方法参数的C#null-conditional简写

时间:2018-04-08 08:57:29

标签: c# null null-conditional-operator

当方法属于相关对象时,空条件运算符非常有用,但如果有问题的对象是参数怎么办?例如,这可以缩短吗?

var someList = new List<SomeType>();
if (anotherList.Find(somePredicate) != null)
{
    someList.Add(anotherList.Find(somePredicate))
}

我想到的一个解决方案是使用如下的扩展方法:

public static void AddTo<T>(this T item, List<T> list)
{
    list.Add(item);
}

使用它可以将第一个代码块简化为:

var someList = new List<SomeType>();
anotherList.Find(somePredicate)?.AddTo(someList);

但是此解决方案特定于此示例(即,如果对象不为null,则将对象添加到列表中)。是否有一般方法表明如果参数为null,则不应运行该方法?

3 个答案:

答案 0 :(得分:4)

您也可以使用:

var someList = new List<SomeType>();
someList.AddRange(anotherList.Where(somePredicate));

在你的情况下,你可能需要确保你的谓词只找到最多一个元素。

答案 1 :(得分:4)

永远不要这样做

var someList = new List<SomeType>();
if (anotherList.Find(somePredicate) != null)
{
    someList.Add(anotherList.Find(somePredicate))
}

这将两次搜索列表,这是不必要的。改为使用临时变量。

var someList = new List<SomeType>();
var find = anotherList.Find(somePredicate);
if (find != null) someList.Add(find);
  

是否有一般方法表明如果参数为null,则不应运行该方法?

目前没有这样的功能。如何有其他替代方案像其他答案一样更好地工作。

答案 2 :(得分:2)

TLDR:还没有。

该团队计划在该语言中实现一项功能,即可完成这项工作。它看起来像这样:

someList.Add(anotherList.Find(somePredicate) ?? return);

?? return检查第一个参数是否为null,如果是,则返回。 (或者,如果这是你想要的话,你可以写下来)

我不确定这是否是他们目前正在处理的事情,如果它将被包含在下一版本的C#中,但是如果它将会有很长的路要走。