簡體   English   中英

正確的空值檢查

[英]Proper null check

我正在實例化一個Associate對象,並從我的主窗體內的txtboxes中為其分配屬性。 空檢查的最佳實踐是什么? 是在分配它之前使用if語句檢查每個屬性,還是有更好的選擇? 這是我的代碼:

Associate updateAssociate = new Associate();

updateAssociate.AssocID = txtAssocId.Text;
updateAssociate.FirstName = txtFname.Text;
updateAssociate.LastName = txtLname.Text;
updateAssociate.HireDate = Convert.ToDateTime(txtHireDate.Text);
updateAssociate.ContractEndDate = Convert.ToDateTime(txtContractEnd.Text);
updateAssociate.TerminationDate = Convert.ToDateTime(txtTerminationDate.Text);
updateAssociate.FullPartTimeID = cboFullPart.SelectedText;
updateAssociate.PrimaryRole = cboPRole.SelectedText;

根據您對問題的評論:

如果它是一個文本框,那么它將是.Text屬性,我想在將它們分配給對象之前檢查null或空白值

像這樣分配時,可以使用null合並運算符檢查null值:

updateAssociate.AssocID = txtAssocId.Text ?? string.Empty;

要么:

updateAssociate.AssocID = txtAssocId.Text ?? someDefaultValue;

這樣,如果txtAssocId.Textnull則可以將定義的默認值分配給object屬性,而不是null

雖然我不能完全確定一個TextBox.Text屬性將永遠 null的,而不是一個空字符串。 也許您要同時檢查兩者?:

updateAssociate.AssocID = string.IsNullOrEmpty(txtAssocId.Text) ? someDefaultValue : txtAssocId.Text;

在C#6中,它將是空條件運算符

updateAssociate.AssocID = txtAssocId?.Text;

在早期版本的c#中,您可以編寫一種方法來消除代碼重復。 像這樣:

public static T CheckNull<T>(Func<T> canBeNull) where T : class
    {
        try
        {
            return canBeNull();
        }
        catch (NullReferenceException)
        {
            return default(T);
        }
    }

像這樣使用

updateAssociate.AssocID = CheckNull(() => txtAssocId.Text);

然后,您可以將可以將空引用引發的所有代碼包裝到lambda中,將其傳遞給此方法,而不再麻煩它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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