C#集合初始化程序 - 是否可以根据条件选择添加元素?

Dmy*_*nko 5 c#

现在我的代码看起来像这样:

var ids = projectId.HasValue ? new List<Guid> { projectId.Value } : new List<Guid>();
Run Code Online (Sandbox Code Playgroud)

是否有更简洁的方法在一行代码中创建列表,可选择添加一个元素?

svi*_*ick 1

这可能不是一个好主意,但在 C# 6 中,集合初始值设定项在Add()is 扩展方法时也可以工作。

Add()这意味着您可以像这样编写扩展:

public static void Add<T>(this List<T> list, T? item) where T : struct
{
    if (item.HasValue)
    {
        list.Add(item.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这段代码将执行您想要的操作:

var list = new List<Guid> { projectId };
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于值类型(因为T/ 的T?区别),并且没有简单的方法使其适用于引用类型。

另外,我发现上面的行非常令人惊讶,更简洁并不总是更好。这就是为什么我实际上不会使用这段代码。