String.Replace对空值

时间:2014-04-03 15:07:36

标签: c#

我有一个可以接受Xml节点名称作为变量的Replace方法,将评估Replace Xml中的每一行在计算表达式之前获取节点的值。因此,如果一些 节点不存在,Replace将在null上进行评估。

鉴于这种情况,以下代码是否合理?

<chocolates>
    <chocolate>
        <name>Mars Bar</name>
    </chocolate>
    <chocolate>
        <name>Bounty</name>
        <type>Coconut</type>
    </chocolate>
</chocolates>

Replace(type, 'C', 'c')

public string Replace(string a, string b, string c) 
{
    if (a == null) return null;
    if (b == null || c == null) return a;

    return a.Replace(b, c); 
}

4 个答案:

答案 0 :(得分:2)

代码可以简化

// When designing public methods you'd rather give to the parameters more
// descriptive names than "a", "b", "c", e.g.
// "source", "toFind", "toReplace"
public string Replace(string a, string b, string c) 
{
    if ((a == null) || (b == null) || (c == null))
      return a;

    return a.Replace(b, c); 
}

或者甚至在 trenary 运算符的帮助下进一步:

public string Replace(string a, string b, string c) 
{
    return ((a == null) || (b == null) || (c == null)) ? a : a.Replace(b, c);
}

您应该使用String,例如电话:"c""C"而非Char 'C''c'

// All three arguments should be strings
String type = ...
...
Replace(type, "C", "c");

答案 1 :(得分:0)

也许你应该通过以下方式调用你的函数:

Replace(type,"C","C"); 

(当然&#34;类型&#34;也需要是字符串值)

或尝试将此字符串与null进行比较:

if(a.Equals(null)) return null;

答案 2 :(得分:0)

我认为扩展方法看起来更整洁

    public static class MyTestClass
    {
      public static string MyReplace(this string stringToSearch, string find, string replaceWith)
      {
        if(stringToSearch == null) return null;
        if(string.IsNullOrEmpty(find) || replaceWith == null) return stringToSearch;
        return stringToSearch.Replace(find, replaceWith);
      }
    }

然后你可以打电话

      type.MyReplace('C','c');

编辑: 添加了扩展类的完整代码,并添加了isNullOrEmpty而不是仅仅对“find”进行空检查,因为您不想将空字符串传递给Replace调用

答案 3 :(得分:0)

您还需要检查b是否为空。否则将发生参数异常

Console.WriteLine(Replace("dsfa", "", ""));
// Define other methods and classes here
public string Replace(string a, string b, string c) 
{
    if (a == null) return null; 
    if (String.IsNullOrEmpty(b) || c == null) return a;

    return a.Replace(b, c); 
}