在Null值字符串上使用String.Contains

时间:2016-03-30 15:12:47

标签: c#

在我的应用程序中,我从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”的结果,导致误报,描述仅包含“已签约”。

4 个答案:

答案 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值的行为之外,其用法保持不变。检查我的评论。