在我的应用程序中,我从Active Directory获取描述,然后将其分配给字符串,以便稍后我可以检查该字符串是否为“已签约”以忽略该用户。
问题不是所有用户在描述字段中都有值导致html
被抛出。我能想到处理这个问题的唯一方法是使用Null Reference Exception
添加另一个检查并添加临时值,然后删除该临时值。这看起来既麻烦又错误。
在检查过程中,我需要做些什么来处理字符串中的String.IsNullOrEmpty
?我尝试了以下两组代码,都抛出错误:
null
和
var userDescription = (string)userDirectoryData.Properties["description"].Value;
if (userDescription.Contains("Contracted"))
{
continue;
}
else
{
//Do Stuff here
}
编辑: 根据{{3}},我无法设置为String.Empty,因为这将返回“0”的结果,导致误报,描述仅包含“已签约”。
答案 0 :(得分:2)
如果值为空,则使用c# 可空合并 分配空字符串:
var userDescription = (string)userDirectoryData.Properties["description"].Value ?? String.Empty;
if (userDescription.Contains("Contracted"))
{
continue;
}
else
{
//Do Stuff here
}
答案 1 :(得分:1)
可以使用一点点精简C#6.0语法?.
(而不是.
中的userDescription.Contains
)
if (userDescription?.Contains("Contracted") == true) {
continue;
}
else {
// Do Stuff here
}
不幸的是(在这种特殊情况下)Boolean?
无法隐式 投放到Boolean
,这就是为什么== true
应该是添加。在IndexOf
的情况下,代码看起来很好:
if (userDescription?.IndexOf("Contracted") > -1) {
continue;
}
else {
// Do Stuff here
}
答案 2 :(得分:0)
在C#6之前使用string.IsNullOrEmpty
(或James Dev的回答)是必要的
var userDescription = (string)userDirectoryData.Properties["description"].Value;
if (!string.IsNullOrEmpty(userDescription) && userDescription.IndexOf("Contracted") > -1)
{
continue;
}
else
{
//Do Stuff here
}
使用C#6,您可以将其减少为空传播运算符(?.
):
if ((string)userDirectoryData.Properties["description"].Value?.IndexOf("Contracted") > -1)
{
continue;
}
else
{
//Do Stuff here
}
答案 3 :(得分:0)
您可以覆盖Contains()
和IndexOf
并定义自定义输出,以防字符串为null,如下所示:
public static class Extensions
{
public static bool Contains(this string value, string search)
{
if(value != null)
{
return value.Contains(search);
}
else
{
// IF ITS NULL DEFINE YOUR RETURN HERE
}
return false;
}
public static int IndexOf(this string value, string search)
{
if(value != null)
{
return value.IndexOf(search);
}
else
{
// IF ITS NULL DEFINE YOUR RETURN HERE
}
return -1;
}
}
除了使用null值的行为之外,其用法保持不变。检查我的评论。