2012-04-24 93 views
15

有很多次,我有一個輸入文本,c#空字符串 - > null?

,如果它爲空(用戶didnt鍵入文本) - 我要發送到DB查詢「空」

String.Empty. (或 「」)

,所以我覺得我自己這個做了很多:

var mySqlValue = string.IsNullOrEmpty(tbCustomerId.Text)?null:tbCustomerId.Text; 

這似乎醜陋的我。

.NET提供了許多其他的解決方案,爲相反的情況:

 string.IsNullOrEmpty 
     string.IsNullOrWhiteSpace 
     myProblemVal ?? myDefultVal 

我知道這可以通過擴展方法來解決 - 我知道該怎麼做..

但有什麼更好的?

是否有智能代碼:「if its empty -> null」。

+0

還存在以下問題:如果'.Text'是一個屬性(即對get訪問器的調用),則第一次調用getter時,可能會返回一個長字符串,例如「John Doe」 '。我們可以評估三元「:」條件操作符的最後一個「組件」。但是這會再次調用'Text' getter,這次它可能會返回''「'。所以在priciple你必須採取'文本'的局部變量副本。當然,如果您使用擴展方法,這不是必需的。 – 2012-12-07 22:18:19

+0

如果使用擴展方法,則可以在檢查之前先「修剪()」字符串,這在單個表達式中很難實現。 – toddmo 2015-11-04 15:43:54

回答

5

但還有什麼更好的?

不,我認爲你在問題(擴展方法)中描述的是絕對正確的。正如你在問題中所描述的那樣,在另一個方向上,你有空合併。

+0

我會很高興聽到和學習什麼不是'絕對好' – 2012-04-24 09:23:19

+0

@羅伊?困惑;一個擴展方法在這裏並不醜陋... – 2012-04-24 09:24:13

+0

@羅伊我的意思是擴展方法的方法 - 我已經澄清, – 2012-04-24 09:24:44

17

您可以使用擴展方法:

public static class Extensions { 
    public static string NullIfWhiteSpace(this string value) { 
     if (String.IsNullOrWhiteSpace(value)) { return null; } 
     return value; 
    } 
} 

,你可以使用這樣的:

var mySqlValue = tbCustomerId.Text.NullIfWhiteSpace(); 

我真的不知道你的東西比擴展方法更好的想象。你如何定義「更好」?短?使用特殊的關鍵字?使用很少使用的操作符來看起來很聰明?這已經只是一個附加到你的值的方法調用,它甚至可以處理空值,並且你所需要的邏輯不能用比這更短的方式來表達。另外,我不知道它有什麼特別的語法。

+0

我明確寫道'我知道這可以通過擴展方法解決 - 我知道該怎麼做......' - 有什麼更好的 – 2012-04-24 09:19:40

+0

oops,沒有看到那部分:)但我沒有看到更優雅辦法。 – Botz3000 2012-04-24 09:20:26

+5

雖然他說他知道,但這可能是最好的方式,而不是一堆,如果ifhe – Matthew 2012-04-24 09:21:11

3

聲明自己的靜態方法:

public static string NullIfEmpty(string value) 
{ 
    return string.IsNullOrEmpty(value) ? null : value; 
} 

MyHelper.NullIfEmpty(值)不大於字符串類型的靜態方法的調用難看......而且似乎比寫作更清潔「string.IsNullOrEmpty(tbCustomerId.Text)?null:tbCustomerId.Text」每次。

+3

呵呵,如果你把這個方法放在靜態類中,並使用'this'關鍵字,你可以像擴展方法一樣使用它;) - 寫得很短 – Matthew 2012-04-24 09:22:52

+4

你至少可以使它成爲擴展方法,不是嗎? – 2012-04-24 09:22:55

+0

當然你可以做一個擴展方法,但我不太喜歡它,尤其是在空引用上。個人選擇。 – Guillaume 2012-04-24 09:31:56