Если у меня есть 5 переменных String и между 0 и 5 из них являются нулевыми или пустыми, есть ли простой/короткий способ возврата первого, который не является нулевым или пустым? Я использую .NET 3.5
Как вернуть первую строковую переменную, которая не является нулевой или пустой
Ответ 1
var myString = new string[]{first, second, third, fouth, fifth}
.FirstOrDefault(s => !string.IsNullOrEmpty(s)) ?? "";
//if myString == "", then none of the strings contained a value
edit: deleted Where(), помещенный предикат в FirstOrDefault(), спасибо Yuriy
Ответ 2
Определите метод расширения:
static string Or(this string value, string alternative) {
return string.IsNullOrEmpty(value) ? alternative : value;
}
Теперь вы можете сказать следующее:
string result = str1.Or(str2).Or(str3).Or(str4) …
Ответ 3
private static string FirstNonEmptyString(params string[] values)
{
return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
}
Вызывается следующим образом:
Console.WriteLine(FirstNonEmptyString(one, two, three, four, five) );
Ответ 4
Если ваши строки находятся в IEnumerable
, вы можете использовать First
или FirstOrDefault
:
strings.First(s => !string.IsNullOrEmpty(s))
Ответ 5
var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));
Ответ 6
Если вы используете .NET 3.5, это очень легко с Linq.
string[] strings = new[] {"", "a", "b", ""};
string firstNotNullOrEmpty =
strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();
Ответ 7
Да.
string selected = null;
foreach(string currStr in strArray)
if(String.IsNullOrEmpty(currStr)==false)
{
selected = currStr;
break;
}
Нет деревьев выражений, не связано с LINQ, нет скрытых особенностей языка. Такая же производительность во время выполнения и студент CS первого года могут понять, что вы делаете.