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;
属性声明?如果我删除那个,有没有probs?
如果AgentVersion
为null
或者没有获取任何值或除数值以外的任何字符串,我想将AgentVersion指定为值'0.0.0.0'否则我将
显示即将到来的数值。这里的代码是否足够
string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion;
如果那时我在何处以及如何在'Property'中实现
答案 0 :(得分:2)
m_version
的值始终在构造函数中指定,因此您无需将其设置为null
。get { return string.IsNullOrEmpty(m_version) ? "0.0.0.0" : m_version; }
答案 1 :(得分:1)
您可以使用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; }
}
答案 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;
我的正则表达式有点生疏,所以有人可能会改进我在这里所拥有的东西,但这是你需要的一般要点。