空值检查
问题描述:
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);
这里有我的疑惑
我需要
private string m_version = null;
在财产申报在这种情况下?如果我删除那个,是否有任何probs?如果
AgentVersion
是null
还是没有得到任何价值或我要指派AgentVersion价值“0.0.0.0”比数值其他任何字符串,否则我会 显示其即将到来的数值。这是下面的代码在这里充分string.IsNullOrEmpty(AgentVersion) ? "0.0.0.0" : AgentVersion;
如果又在哪里,我怎么能在“财产”
答
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;
我的正则表达式有点生疏,所以有人可能会改善我在这里的内容,但它是你所需要的一般要点。
答
您可以使用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; }
}
答
- 作为
m_version
值始终为实现它在构建中分配或者您不需要将其设置为null
。 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;
string m_version;在这里我不需要把私人字符串m_version; ????? – peter 2010-01-14 18:18:54
two isNullOrEmpty checkings are there是否需要? – peter 2010-01-14 18:26:53
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