[英]null value checking
public string AgentVersion
{
get { return m_version; }
} // property: Enabled
private string m_version = null;
我在構造函數中執行的以下聲明編碼
string keySpoPath = SpoRegistry.SpoAgentRoot;
RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keySpoPath);
m_version = (string)regkey.GetValue(SpoRegistry.regValue_CurrentVersion);
這是我的疑問
我是否需要private string m_version = null;
在這種情況下的財產申報? 如果我刪除那一個,有沒有問題?
如果AgentVersion
為null
或未獲得任何值或非數字值的任何字符串,我想將AgentVersion分配為值'0.0.0.0',否則我將顯示即將出現的數字值。 下面的代碼是否足夠在這里string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion;
string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion;
如果可以,那么在哪里以及如何在“屬性”中實施
m_version
的值始終在構造函數中分配,因此無需將其設置為null
。 get { return string.IsNullOrEmpty(m_version) ? "0.0.0.0" : m_version; }
您可以使用Resharper,它將向您顯示您有多余的聲明。 在這種情況下,這是多余的。
如果String.Empty
是有效值,則可以使用
public string AgentVersion { get { return m_version ?? "0.0.0.0"; } }
否則,您正確使用String.IsNullOrEmpty
public string AgentVersion
{
get { return String.IsNullOrEmpty(m_version) ? "0.0.0.0":m_version; }
}
您可以使用此代碼。
public string AgentVersion
{
get
{
if(string.isNullOrEmpty(m_version))
{
string keySpoPath = SpoRegistry.SpoAgentRoot;
RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keySpoPath);
m_version = (string)regkey.GetValue(SpoRegistry.regValue_CurrentVersion);
}
m_version = string.isNullOrEmpty(m_version) ? m_version : "0.0.0.0";
return m_version;
}
}
string m_version;
1)在這種情況下,您無需將m_version
實例m_version
null。 通常,僅在聲明局部變量時才需要這樣做,以避免出現“使用未分配的局部變量[name] ”的編譯錯誤。 因此private string m_version;
就足夠了。
2)對於檢查空值和空值,使用String.IsNullOrEmpty()
可以。 如果要檢查屬性是否以正確的格式返回字符串,則可以使用Regex.IsMatch()
來確保屬性僅以版本號格式返回字符串。
[DefaultValue("0.0.0.0")]
public string AgentVersion
{
get
{
return System.Text.RegularExpressions.Regex.IsMatch(m_version ?? String.Empty, @"\A\d+[.]\d+[.]\d+[.]\d+\z")
? m_version
: "0.0.0.0";
}
}
private string m_version;
我的正則表達式有些生疏,所以有人可能可以改進我在這里的功能,但這是您所需要的基本內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.