将null类型转换为列表(错误处理)

时间:2013-07-05 02:50:56

标签: c# null argumentnullexception

所以,标题有点误导,我先把它整理出来。

考虑以下代码:

public static ADescription CreateDescription(string file, string name, params string[] othername)
{
    return new ADescription(file, name, othername.ToList<string>());
}

如果用户故意在结尾处输入空值,则会抛出System.ArgumentNullException。例如:

ADescription.CreateDescription("file", "name", null); // example

现在我有一个基本上得到的属性&amp;设置othername列表。我担心的是,我必须检查每个阶段(如属性以及此方法):

if (othername == null){
   // do nothing
}
else{
    othername.ToList<string>; // for example
}

因为othername可以接受null。有没有什么方法可以让c#本身提供这种功能,如果othername为null,那么它就不会真正运行ToList()。

2 个答案:

答案 0 :(得分:0)

您可以使用三元运算符:

 return new ADescription(file, name, othername==null?null:othername.ToList<string>());

或者创建一个扩展方法,如此处Possible pitfalls of using this (extension method based) shorthand中接受的响应中所述:

public static class IfNotNullExtensionMethod
{
    public static U IfNotNull<T, U>(this T t, Func<T, U> fn)
    {
        return t != null ? fn(t) : default(U);
    }
}

您的代码将是:

return new ADescription(file, name, othername.IfNotNull(on => on.ToList());

答案 1 :(得分:0)

您可以使用扩展方法来处理此问题:

public static class MyExtensionMethods
{
    public static List<T> ToListIfNotNull<T>(this IEnumerable<T> enumerable)
    {
        return (enumerable != null ? new List<T>(enumerable) : null);
    }
}

然后,您可以将扩展方法替换为否则使用ToList()

return new ADescription(file, name, othername.ToListIfNotNull());