2010-01-14 105 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