Подтвердить что ты не робот

Как вернуть первую строковую переменную, которая не является нулевой или пустой

Если у меня есть 5 переменных String и между 0 и 5 из них являются нулевыми или пустыми, есть ли простой/короткий способ возврата первого, который не является нулевым или пустым? Я использую .NET 3.5

4b9b3361

Ответ 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 первого года могут понять, что вы делаете.