C#: 使用OR (短路版本)进行赋值

Lua中,有一个很好的功能可以快速检查语句的结果是否为nil,并使用or的短路版本来反应这种情况; 类似于:

文本 = GetTextFromUser() 或 "默认文本"

它的意思是将GetTextFromUser()的返回值赋给text,如果GetTextFromUser()返回了nil,则将"默认文本"赋给text,这基本上是使用or运算符的短路求值进行赋值的一个好技巧。

我想知道c#的||运算符是否也具有这样的功能。如果没有,那么实现相同行为的最短路径是什么?三元运算符?if语句?

点赞
用户1666620
用户1666620

也许是空值合并运算符?https://msdn.microsoft.com/en-ie/library/ms173224.aspx

string a;
string b = a ?? "默认值";

因此,您的示例将变为:

string text = GetTextFromUser() ?? "默认文本"
2016-06-28 10:51:34
用户1997232
用户1997232

你可以创建一个简单的方法,如果条件失败,则返回默认值

string GetValueOrDefault(string value, Func<bool, string> condition,
    string defaultValue = "") => condition(value) ? value: defaultValue;

使用方法

var text = GetValueOrDefault(GetTextFromUser(), o => o != nil, "默认文本");

附注: TODO 通用版本。

2016-06-28 13:36:56