三元运算符简化:删除重复
本文关键字:删除 运算符 三元 | 更新日期: 2023-09-27 18:26:35
奇怪的是,有没有一种更短的方法可以在一行中写入,而不必引用节点两次?我发现自己在解析中做了很多这样的事情。
lidID.idCountry = (passportnode.Descendants("COUNTRY").First().Value != String.Empty) ?
passportnode.Descendants("COUNTRY").First().Value :
"NONE"
还是为该值创建一个临时变量的最简单方法?
尽管您需要一个临时变量,但您可以通过定义一个扩展方法来隐藏它:
public static ReplaceEmptyWith(this string original, string replacement) {
return !string.IsNullOrEmpty(original) ? original : replacement;
}
请注意,temporary仍然存在——它是ReplaceEmptyWith
方法的第一个参数。
现在你可以简化你的代码如下:
lidID.idCountry = passportnode
.Descendants("COUNTRY")
.First()
.Value
.ReplaceEmptyWith("NONE");
最简单的方法是使用一个临时变量,如下所示:
var firstDescendantValue = passportnode.Descendants("COUNTRY").First().Value;
lidID.idCountry = firstDescendantValue != "" ? firstDescendantValue : "NONE";
然而,如果你真的想要一个一行,方法时间!
public SelfReturnIfTrue<T>(T source, Func<T, bool> predicate, T falseVal)
{
return predicate(source) ? source : falseVal;
}
然后你可以这样使用它:
lidID.idCountry = SelfReturnIfTrue(passportnode.Descendants("COUNTRY").First().Value, string.IsNullOrEmpty, "NONE");
我认为临时变量是解决这个问题的简单方法,或者创建一个函数来处理它,比如:
string GetValueIfValid(string s){
return string.IsNullOrEmpty(s) ? "NONE" : s;
}