方法参数的 C# null 条件 shorthand

C# null-conditional shorthand for method arguments

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

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,方法不应该是运行?

TLDR:还没有。

该团队计划在该语言中实现一项功能,以完成这件事。它看起来像这样:

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

其中 ?? return 检查第一个参数是否为空,如果是,则 returns。 (或者你可以写 break 如果那是你想要的)

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

您也可以只使用:

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

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

永远不要这样做

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);

Is there a general way to indicate that if a parameter is null, the method should not be run?

暂无此功能。有没有其他替代方案比提供的其他答案更有效。