簡體   English   中英

是否有內置的 C# 方法將 go 從空字符串轉換為 null 值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM