[英]Is there a built-in C# method to go from an empty string to null value?
有很多次我有一個輸入文本,如果它是空的(例如,如果用戶沒有輸入任何文本),我想向數據庫查詢發送一個 null 值。
我不想發送String.Empty.
(或""
)。
因此我發現自己經常這樣做:
var mySqlValue = string.IsNullOrEmpty( tbCustomerId.Text)?null:tbCustomerId.Text;
這對我來說似乎很難看。 .NET針對相反的場景給出了很多其他的解決方案:
string.IsNullOrEmpty
string.IsNullOrWhiteSpace
myProblemVal ?? myDefultVal
C# 是否有任何內置功能可以讓我以更短的方式執行此操作,例如相反的方向?
我知道這可以通過編寫自己的擴展方法來解決,而且我知道該怎么做; 那不是我感興趣的解決方案。
我正在尋找一些代碼,如“ if empty -> null
”。
您可以使用擴展方法:
public static class Extensions {
public static string NullIfWhiteSpace(this string value) {
if (String.IsNullOrWhiteSpace(value)) { return null; }
return value;
}
}
你可以這樣使用:
var mySqlValue = tbCustomerId.Text.NullIfWhiteSpace();
我真的不知道你想象的東西比擴展方法更好。 你如何定義“更好”? 短? 使用特殊關鍵字? 使用很少使用的運算符看起來很聰明? 這已經只是附加到您的值的單個方法調用,它甚至可以在空值上工作,並且您所需的邏輯無法以比此更短的方式表達。 另外,我不知道它的任何特殊語法。
但有什么更好的嗎?
不,雖然我認為你在問題中描述的內容(擴展方法)絕對沒問題。 正如您在問題中描述的那樣,在另一個方向上,您具有無效合並。
聲明自己的靜態方法:
public static string NullIfEmpty(string value)
{
return string.IsNullOrEmpty(value) ? null : value;
}
干
MyHelper.NullIfEmpty(value)並不比調用字符串類型的靜態方法更糟糕......而且它似乎比每次寫入“string.IsNullOrEmpty(tbCustomerId.Text)?null:tbCustomerId.Text”更清晰。
從你的字符串開始
string myString = "";
編寫一個將blank轉換為null的方法
public static string NullIf(string value)
{
if (String.IsNullOrWhiteSpace(value)) { return null; }
return value;
}
然后在方法中包裝並使用您在SQL中期望的相同語法將其回調
NullIf(myString);
這不是您直接詢問的,而是實現您想要做的事情的一種方法(如果字符串的值為空,則將空值傳遞給 SQL 以獲取字符串)是使用 if 語句來檢查字符串值的長度在 SQL Query 參數分配期間傳遞(例如Parameters.AddWithValue("@parameter", mySqlValue)
):
if (mySqlValue.Length > 0) {
SqlCommand.Parameters.AddWithValue("@mySqlValue", mySqlValue);
}
else {
SqlCommand.Parameters.AddWithValue("@mySqlValue", DBNull.Value);
}
其中SqlCommand
是使用參數化 SQL 查詢和預先建立的 SQL 連接/連接字符串的using
語句中的變量。
這不是一個優雅的解決方案,但它可以工作(並且不需要您編寫擴展方法)。
如果你想在反序列化 json 時自動返回一個空字符串作為 null:
public partial class MyClass
{
string sample;
[JsonProperty("myProperty")]
public string MyProperty
{
get { return sample; }
set { sample = string.IsNullOrEmpty(value) ? null : value; }
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.