如果我有5个字符串变量,并且0到5之间是null或空,是否有一种简单/简单的方法可以返回非空或空的第一个?我使用的是.NET 3.5
答案 0 :(得分:29)
var myString = new string[]{first, second, third, fouth, fifth}
.FirstOrDefault(s => !string.IsNullOrEmpty(s)) ?? "";
//if myString == "", then none of the strings contained a value
编辑:删除Where(),将谓词放在FirstOrDefault()中,谢谢Yuriy
答案 1 :(得分:16)
定义扩展方法:
static string Or(this string value, string alternative) {
return string.IsNullOrEmpty(value) ? alternative : value;
}
现在您可以说以下内容:
string result = str1.Or(str2).Or(str3).Or(str4) …
答案 2 :(得分:8)
private static string FirstNonEmptyString(params string[] values)
{
return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
}
这样称呼:
Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );
答案 3 :(得分:1)
如果您的字符串位于IEnumerable
,则可以使用First
或FirstOrDefault
:
strings.First(s => !string.IsNullOrEmpty(s))
答案 4 :(得分:1)
var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));
答案 5 :(得分:0)
如果你使用的是.NET 3.5,那么使用Linq非常容易。
string[] strings = new[] {"", "a", "b", ""};
string firstNotNullOrEmpty =
strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();
答案 6 :(得分:0)
是
string selected = null;
foreach(string currStr in strArray)
if(String.IsNullOrEmpty(currStr)==false)
{
selected = currStr;
break;
}
没有表达式树,没有LINQ滥用,没有晦涩的语言功能。相同的运行时性能和第一年的CS学生可以弄清楚你在做什么。
答案 7 :(得分:0)
如果您有固定数量的变量,我建议使用空合并运算符,因为这似乎是最简单的选择。
var result = s1 ?? s2 ?? s3 ?? s4 ?? s5 ?? "";
我认为,鉴于已经有一种语言构造,因此不再需要为此做一个单独的功能。