方法参数的 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?
暂无此功能。有没有其他替代方案比提供的其他答案更有效。
空条件运算符在方法属于相关对象时非常有用,但如果相关对象是参数怎么办?例如,这个可以缩短吗?
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?
暂无此功能。有没有其他替代方案比提供的其他答案更有效。