我们可以用C#做的所有很棒的东西,我想知道我们是否可以做类似下面的事情:
string totalWording =
{
if (isA)
return "Value A";
if (isB)
return "Value B";
if (isC)
return "Value C";
return "Default";
};
所以这与?非常相似:除了你可以有超过2个可能的结果
string totalWording = isA ? "Value A" : "Default";
我很乐意创建一个返回值的方法,但我很喜欢能够立即看到简单的东西
private string GetTotalWording()
{
if (isA)
return "Value A";
if (isB)
return "Value B";
if (isC)
return "Value C";
return "Default";
}
我想听听是否有人有一些我可以使用的好东西,或者我只是在祈祷。
编辑:
还有func选项,这是我想让我进入主题,因为它看起来你应该能够在声明一个值时直接使用一个函数..但那可能只是我
Func<string> getTotalWording = () =>
{
if (isA)
return "Value A";
if (isB)
return "Value B";
if (isC)
return "Value C";
return "Default";
};
答案 0 :(得分:3)
使用重复的三元运算符。
string totalWording = isA ? "Value A" : (isB ? "Value B" : (isC ? "Value C" : "Default"))
还有另外一种方法,如果你只有可管理数量的if,那么它们总是保持一致。使用字符串值创建枚举。
Below answer is based on another on Stack Overflow
您可以使用说明为这些语句创建枚举。
public enum Values
{
[Description("Value A")] A,
[Description("Value B")] B,
[Description("Value C")] C,
[Description("Value D")] D
}
然后,您可以创建一个函数来获取枚举描述
private static string GetEnumDescription(string text)
{
var valueAttribs = typeof(Values).GetMember(text)[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
return ((DescriptionAttribute)valueAttribs[0]).Description;
}
然后您可以将它们用作
var variable = "A";
string description =
(Enum.IsDefined(typeof(Values), variable)) ?
GetEnumDescription(variable) : "Default";
Console.WriteLine(description);
Console.ReadLine();
答案 1 :(得分:2)
你可以嵌套方法并更简洁地列出,所以看起来更像是这样:
void someMethod(bool isA, bool isB, bool isC)
{
string totalWording() {
if (isA) return "Value A";
if (isB) return "Value B";
if (isC) return "Value C";
/*Else*/ return "Default"; }
// Other code...
string s = totalWording();
// Etc
}
我个人认为更具可读性。
如果您不能使用C#7,您可以在早期版本中使用Lambda做类似的事情,正如您在问题中已经注意到的那样。为了完整起见,我会在这里复制一份:
void someMethod(bool isA, bool isB, bool isC)
{
Func<string> totalWording = () => {
if (isA) return "Value A";
if (isB) return "Value B";
if (isC) return "Value C";
/*Else*/ return "Default"; };
// Other code...
string s = totalWording();
// Etc
}
我非常喜欢使用三元运算符的原因是,在阅读三元版本时,我必须在尝试理解它时将其精神上翻译成上面的代码。
如果我必须这样做,那么我宁愿为我写下来,所以我不需要花费精力。也许这只是我,而且我很懒。 ;)