2010-01-14 109 views
0
public string AgentVersion 
    { 
    get { return m_version; } 
    } // property: Enabled 
    private string m_version = null; 

以下聲明編碼i的構造空值檢查

string keySpoPath = SpoRegistry.SpoAgentRoot; 
    RegistryKey regkey = Registry.LocalMachine.OpenSubKey(keySpoPath); 
    m_version = (string)regkey.GetValue(SpoRegistry.regValue_CurrentVersion); 

這裏有我的疑惑


  1. 我需要private string m_version = null;在財產申報在這種情況下?如果我刪除那個,是否有任何probs?

  2. 如果AgentVersionnull還是沒有得到任何價值或我要指派AgentVersion價值「0.0.0.0」比數值其他任何字符串,否則我會 顯示其即將到來的數值。這是下面的代碼在這裏充分 string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion;如果又在哪裏,我怎麼能在「財產」

回答

0

1)在這種情況下,您不需要實例化m_version爲空。在聲明本地變量時通常只需要這樣做,以避免'使用未分配的本地變量[名稱]'編譯錯誤。所以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; 

我的正則表達式有點生疏,所以有人可能會改善我在這裏的內容,但它是你所需要的一般要點。

1
  1. 您可以使用ReSharper的工具,它會告訴你,你有多餘的聲明。在這種情況下,這是多餘的。

  2. 如果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; } 
} 
2
  1. 作爲m_version值始終爲實現它在構建中分配或者您不需要將其設置爲null
  2. get { return string.IsNullOrEmpty(m_version) ? "0.0.0.0" : m_version; }
1

您可以使用此代碼。

 

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; 
 
+0

string m_version;在這裏我不需要把私人字符串m_version; ????? – peter 2010-01-14 18:18:54

+0

two isNullOrEmpty checkings are there是否需要? – peter 2010-01-14 18:26:53

+0

m_version = string.isNullOrEmpty(m_version)? m_version:「0.0.0。0「; return m_version;應改爲m_version = string.isNullOrEmpty(m_version)?」0.0.0.0「:m_version; return m_version; rite ?? – peter 2010-01-14 18:29:45