空值检查

时间:2010-01-14 18:01:23

标签: c#

  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);

这是我的疑惑


  1. 在此上下文中,我是否需要private string m_version = null;属性声明?如果我删除那个,有没有probs?

  2. 如果AgentVersionnull或者没有获取任何值或除数值以外的任何字符串,我想将AgentVersion指定为值'0.0.0.0'否则我将 显示即将到来的数值。这里的代码是否足够 string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion;如果那时我在何处以及如何在'Property'中实现

4 个答案:

答案 0 :(得分:2)

  1. 由于m_version的值始终在构造函数中指定,因此您无需将其设置为null
  2. get { return string.IsNullOrEmpty(m_version) ? "0.0.0.0" : m_version; }

答案 1 :(得分:1)

  1. 您可以使用Resharper,它会显示冗余声明的位置。在这种情况下,这是多余的。

  2. 如果String.Empty是有效值,您可以使用

    实现它

    public string AgentVersion { get { return m_version ?? "0.0.0.0"; } }

  3. 否则你正确使用String.IsNullOrEmpty

    public string AgentVersion
    {
        get { return String.IsNullOrEmpty(m_version) ? "0.0.0.0":m_version; }
    }
    

答案 2 :(得分: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;

答案 3 :(得分:0)

1)在此上下文中,您不需要将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;

我的正则表达式有点生疏,所以有人可能会改进我在这里所拥有的东西,但这是你需要的一般要点。