2012-03-14 9 views
5

Chcę usunąć pierwszej linii:string.IsNullOrEmpty użyciu trim()

    !string.IsNullOrEmpty(cell.Text) 

spowoduje to żadnego problemu?

natknąłem to w niektórych kodu:

   if ((id % 2 == 0) 
        && !string.IsNullOrEmpty(cell.Text) 
        && !string.IsNullOrEmpty(cell.Text.Trim()) 
        ) 

Myślę, że pierwszy string.IsNullOrEmpty będzie return false na sznurku ze spacjami
i zgodnie z trim() dba o to, więc pierwszy IsNullOrEmpty jest bezużyteczny

Ale zanim usunę linię bez wykończenia myślałem, że będę go prowadził przez grupę.

+2

znaczy string.IsNullOrWhitespace – nothrow

+0

Czy to zbyt trudne do sprawdzenia czy szukać oficjalna dokumentacja? (http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx). Krótka odpowiedź: Nie, ciąg spacji nie jest pusty lub zerowy. – madth3

+3

Faceci nie rozumieją tego. Tak, możesz użyć 'IsNullOrEmpty', ale OP jest zdezorientowany tym, dlaczego pierwsze wywołanie jest potrzebne, aby uniknąć' NullReferenceException'. Zrozumienie tego jest o wiele ważniejsze niż przejście do innego wywołania metody, ponieważ powiedziano mu, aby to zrobił. –

Odpowiedz

4

Pierwszy IsNullOrEmpty połowy wartości null przed rzucają NullReferenceException z tapicerką() .

Jednakże, istnieje lepszy sposób:

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+2

Dostępne tylko w .NET Framework 4 i nowszych. – Chris

12

jeśli komórka.Tekst jest pusty, istnieje wyjątek bez tego pierwszego sprawdzenia.

+3

Jeśli komórka to TextBox, ta właściwość nigdy nie będzie miała wartości NULL. – code4life

+0

Które można również osiągnąć za pomocą 'cell.Text! = Null && cell.Text.Trim()! =" "' Jeśli nadal masz .NET <.NET 4.0. –

+0

UWAGA: komórka jest treścią komórki tabeli html nabytą przy użyciu WebDriver (ale to nie jest kwestia pytania) –

8

W .NET 4.0:

if (id % 2 == 0 && !string.IsNullOrWhiteSpace(cell.Text)) 
{ 
    ... 
} 

W starszych wersjach należy zachować dwa testy, ponieważ po usunięciu pierwszego i cell.Text jest null, dostaniesz NRE na drugi podczas próby wywołania .Trim na instancji zerowej.

Albo można też to zrobić:

if (id % 2 == 0 && string.IsNullOrWhiteSpace((cell.Text ?? string.Empty).Trim())) 
{ 
    ... 
} 

lub nawet lepiej, można napisać extension method dla typu string, że zrobi to tak, że można po prostu:

if (id % 2 == 0 && !cell.Text.IsNullOrWhiteSpace()) 
{ 
    ... 
} 

które mogłyby wygląda tak:

public static class StringExtensions 
{ 
    public static bool IsNullOrWhiteSpace(this string value) 
    { 
     return string.IsNullOrEmpty((value ?? string.Empty).Trim()); 
    } 
} 
+0

Nie sądzę, że metoda rozszerzenia jest lepsza w tej sytuacji. Z reguły "nie akceptuj wartości null jako prawidłowego parametru metody rozszerzenia". Inni programiści mogliby zinterpretować to jako "Tekst musi mieć wartość, ponieważ można by nazwać metodę". –

0

Uważam, że test polega na upewnieniu się, że komórka.tekst nie jest pusta po pierwsze ... jeśli tak, próba ominięcia go i uzyskania samego cell.text.trim() mógłby się dusić, ponieważ nie można wykonać przycięcia na pustym ciągu.

0

Dlaczego nie użyć !string.IsNullOrWhitespace(call.Text) i usunąć dwa poprzednie kontrole?

0

Nie można usunąć tylko pierwszej IsNullOrEmpty jako komórki.Tekst może mieć wartość zerową, a tym samym wywoływanie przycinania na nim spowoduje odrzucenie i wyjątek. Użyj IsNullOrWhiteSpace, jeśli korzystasz z .Net 4.0 lub pozostaw obie kontrole.

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+0

Tak, ale to nie odpowiada na pytanie. Oczywiście OP jest zdezorientowany, jeśli chodzi o sposób wyrażenia wyrażenia if. –

+0

Zaktualizowano. Dzięki. –

0

Jeśli cell.Text jest null, string.IsNullOrEmpty wyrażenie (cell.Text.Trim()) wygeneruje wyjątek, ponieważ stara się uruchomić metody trim() na komórkę.

Znacznie więcej readble jeśli warunek będzie:! Cell.Text = null & & cell.Text.Trim() = ""

0

Można użyć metody rozszerzenie takiego:

/// <summary> 
/// Indicates whether the specified string is null or empty. 
/// This methods internally uses string.IsNullOrEmpty by trimming the string first which string.IsNullOrEmpty doesn't. 
/// .NET's default string.IsNullOrEmpty method return false if a string is just having one blank space. 
/// For such cases this custom IsNullOrEmptyWithTrim method is useful. 
/// </summary> 
/// <returns><c>true</c> if the string is null or empty or just having blank spaces;<c>false</c> otherwise.</returns> 
public static bool IsNullOrEmptyWithTrim(this string value) 
{ 
    bool isEmpty = string.IsNullOrEmpty(value); 
    if (isEmpty) 
    { 
     return true; 
    } 
    return value.Trim().Length == 0; 
} 
Powiązane problemy