所以,标题有点误导,我先把它整理出来。
考虑以下代码:
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()。
答案 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());