是否有一种语言具有这种简化的语法?
问题描述:
我喜欢C#,但是,例如,一个简单的条件,如以下是相当冗长什么它试图达到:是否有一种语言具有这种简化的语法?
if ((ctr == "BT") || (ctr = "B")) {
ctrName = "Brian";
} else if ((ctr == "G") || (ctr = "GD")) {
ctrName = "George";
}
我在想,在一个理想的语言它可以被编码类似:
if ctr:
in {"BT", "B"}: ctr = "Brian"
in {"G", "GD" }: ctr = "George"
有没有更像这样的语言?
答
这里有一种语言! C# - 通过扩展方法。
下面是一个示例,使用In
扩展方法。
using System;
using System.Linq;
namespace Bob
{
public static class Extensions
{
public static bool In<T>(this T toCheck, params T[] isItInOneOfThese)
{
return isItInOneOfThese.Contains(toCheck);
}
}
public class Program
{
static void Main(string[] args)
{
var ctrName = "";
var ctr = "BT";
if (ctr.In("BT", "B"))
{
ctrName = "Brian";
}
else if (ctrName.In("G", "GD"))
{
ctrName = "Brian";
}
Console.WriteLine(ctrName);
Console.ReadLine();
}
}
}
答
您可以轻松地做到这一点在许多语言,包括C#,用switch语句:
switch (ctr)
{
case "BT":
case "B":
ctrName = "Brian";
break;
case "G":
case "GD":
ctrName = "George";
break;
}
降低线的switch语句分解得到稍微接近于您的例子:
switch (ctr)
{
case "BT": case "B": ctrName = "Brian"; break;
case "G": case "GD": ctrName = "George"; break;
}
如果这就是对你来说太冗长了,那么在C#中就没有其他选择了。如果你是特别是寻找替代语言,这是该网站的主题。
是那两个单=错别字? – BoltClock
为什么不linq到字典 – Ramankingdom
根据你想匹配什么,一个'RegEx'匹配可能是适当的(不适用于这种情况,但对于你想要匹配更复杂变化的东西)。 –