Jeśli mam 5 zmiennych łańcuchowych i między 0 a 5 z nich jest pustych lub pustych, istnieje łatwy/krótki sposób zwrócenia pierwszego, który nie jest zero lub pusty? Używam .NET 3,5Jak mogę zwrócić pierwszą zmienną łańcuchową, która nie jest pusta lub pusta?
Odpowiedz
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: usunięty Gdzie(), umieszczony w FirstOrDefault (predykat), dzięki Jurij
private static string FirstNonEmptyString(params string[] values)
{
return values.FirstOrDefault(x => !string.IsNullOrEmpty(x));
}
Called tak:
Console.WriteLine(FirstNonEmptyString(one, two, three, four, five));
Zdefiniować metodę rozszerzenia:
static string Or(this string value, string alternative) {
return string.IsNullOrEmpty(value) ? alternative : value;
}
Teraz można powiedzieć, co następuje:
string result = str1.Or(str2).Or(str3).Or(str4) …
Jeśli ciągi są w IEnumerable
można użyć First
lub FirstOrDefault
:
strings.First(s => !string.IsNullOrEmpty(s))
1) ta odpowiedź została już podana 2) 'Pierwszy' rzuca IOE, jeśli wszystkie ciągi są puste lub puste – Will
@Will, 1) Myślę, że byłem pierwszy, który zasugerował/FirstOrDefault jako oczywista alternatywa dla Where. 2) Pytający nie określa pożądanego zachowania w przypadku, gdy wszystkie łańcuchy są puste/puste. Dlatego zasugerowałem obu. –
hmmmm, chodziło o wspomnienie o FOD. Mój błąd. Nie wierzę, że powiedział coś w swoim pytaniu o rzucanie, jeśli wszystkie ciągi są zerowe. Nie powiedziałeś też tego małego, maleńkiego faktu. Rzucanie "pierwszego rzutu" jest czymś, czego ludzie często nie zdają sobie sprawy, a kończy się to obgryzaniem ich w dupę. Wydawało mi się, że czytanie tego może być dla ludzi ważne. – Will
Jeśli używasz .NET 3.5 jest to bardzo łatwe z Linq.
string[] strings = new[] {"", "a", "b", ""};
string firstNotNullOrEmpty =
strings.Where(s => !String.IsNullOrEmpty(s)).FirstOrDefault();
'Pierwszy' ma nadpisanie, które sprawia, że' Gdzie' jest bezcelowe. Ponadto, jeśli wszystkie łańcuchy mają wartość NULL, zostanie zgłoszony wyjątek InvalidOperationException. Co by wyssać tyłek. – Will
Znajduję się w tym miejscu, gdzie() sprawia, że jest bardziej czytelny. Dlaczego miałby on rzucić 'InvalidOperationException'? – jrummell
Otwórz LINQPad i spróbuj tego: '(nowy ciąg [] {(string) null}) First (x =>! String.IsNullOrEmpty (x))' Zobaczysz, że rzuca IOE, ponieważ First() jest przeznaczony do wykonania, jeśli nie ma pasujących wyników. FirstOrDefault() nigdy nie wyrzuca, jeśli nie znaleziono pasujących wyników; po prostu zwraca 'default (T)'. – Will
var found = new[]{first, second, third, fourth, fifth}.FirstOrDefault(x =>!String.IsNullOrEmpty(x));
Tak.
string selected = null;
foreach(string currStr in strArray)
if(String.IsNullOrEmpty(currStr)==false)
{
selected = currStr;
break;
}
Brak drzewek wyrażeń, brak nadużycia LINQ, brak ukrytych funkcji językowych. Taki sam czas pracy i student pierwszego roku CS może dowiedzieć się, co robisz.
Czuję się źle z powodu studentów pierwszego roku z CS, którzy są chronieni przed funkcjami językowymi, które sprawiają, że kodowanie jest radością. – Will
@Will: Nadużycia LINQ to poważny problem, który dotyka naszą społeczność, dlatego wszyscy powinniśmy być częścią rozwiązania, a nie problemu. – kervin
BTW Uwielbiam LINQ, właśnie w zeszłym tygodniu przekonwertowałem bibliotekę opartą na XPath na LINQ na XML, a EF to moja ORM z wyboru. – kervin
- 1. Treść żądania POST jest pusta lub pusta
- 2. Pusta lista jest równa Brak lub nie?
- 3. Skrypt powłoki - zamykanie skryptu, jeśli zmienna jest pusta lub pusta
- 4. Oracle 10g: kolumna jest pusta, ale nie jest pusta lub pusty ciąg znaków
- 5. Jak mogę sprawdzić, czy kolejka jest pusta?
- 6. LINQ - Zwracanie wartości właściwości obiektu, która nie jest pusta
- 7. Największa pusta kula lub prostokąt
- 8. usunięcia lub pusta zawartość pierwiastków
- 9. Sprawdź, czy zmienna łańcuchowa jest pusta lub pusta, lub pełna spacja
- 10. Pusta aktywność kontra pusta aktywność
- 11. Wąsy - jak wykryć tablicę nie jest pusta?
- 12. Kwerenda SQLite dla Androida, dla której kolumna nie jest pusta i nie jest pusta
- 13. Jak przekazać zmienną łańcuchową do funkcji, która oczekuje PChar?
- 14. Aby sprawdzić, czy dany przedmiot jest pusta lub nie
- 15. Nie jest pusta w zapytaniu EntityFramework
- 16. Karta brokera selera jest pusta
- 17. Jak sprawdzić, czy Textarea jest pusta w JavaScript lub Jquery?
- 18. Redis "nil" lub "pusta lista lub zestaw"
- 19. Sprawdzanie, czy zmienna jest pusta C#
- 20. Jak powrócić, gdy opcja jest pusta?
- 21. Jak sprawdzić, czy sesja PHP jest pusta?
- 22. Pusta ListViewGroup nie jest wyświetlana w ListView
- 23. Wyświetl "-" czy wartość jest pusta?
- 24. Jak mogę sprawdzić, czy sekwencja jest pusta w F #?
- 25. Firefox: „TypeError: localStorage jest pusta”
- 26. PHP - pusta tablica
- 27. Jak sprawdzić, czy tablica ma wartość zerową lub jest pusta?
- 28. Jak sprawdzić, czy tablica jest pusta?
- 29. Określ, czy lista, sekwencja, tablica lub IEnumerable jest pusta.
- 30. Jak sprawdzić, czy wartość tablicy jest pusta?
Czy możesz zaktualizować swoje pytanie, aby wskazać, z której wersji .NET korzystasz? –
.NET 3.5. Słuszna uwaga! –