C# 初始化IEnumerable<;int>;作为可选参数
在我的C#方法中有一个可选参数类型为C# 初始化IEnumerable<;int>;作为可选参数,c#,ienumerable,C#,Ienumerable,在我的C#方法中有一个可选参数类型为IEnumerable。我是否可以使用除null以外的任何东西初始化它,例如固定的值列表?否-默认参数必须是编译时常量 最好的办法是重载该方法。或者,将默认值设置为null,然后在方法中检测null并将其转换为所需的列表。否。您只能有编译时常量。您可以将in赋值为null,然后 void SomeMethod(IEnumerable<int> list = null) { if(list == null) list = ne
IEnumerable
。我是否可以使用除null
以外的任何东西初始化它,例如固定的值列表?否-默认参数必须是编译时常量
最好的办法是重载该方法。或者,将默认值设置为null,然后在方法中检测null并将其转换为所需的列表。否。您只能有编译时常量。您可以将in赋值为null,然后
void SomeMethod(IEnumerable<int> list = null)
{
if(list == null)
list = new List<int>{1,2,3};
}
用法
如何将其默认值设置为null,并在方法中设置
numbers = numbers ?? Enumerable.Empty<int>();
不,您需要一个编译时常量 但您可以使用重载作为解决方法:
public void Foo(int arg1)
{
Foo(arg1, new[] { 1, 2, 3 });
}
public void Foo(int arg1, IEnumerable<int> arg2)
{
// do something
}
public void Foo(int arg1)
{
Foo(arg1,新[]{1,2,3});
}
公共void Foo(int arg1,IEnumerable arg2)
{
//做点什么
}
由于您需要编译时常量,因此必须将其设置为null
但是,您可以在方法中执行以下操作
list = list ?? new List<int>(){1,2,3,4};
list=list??新列表(){1,2,3,4};
此模式真正令人敬畏的副作用是,如果您通过某个类库公开默认参数,您不会遇到默认参数的调用站点绑定问题,因为这允许您修改默认值,并使它们在库更新时生效。因此,避免这个问题:
numbers = numbers ?? new []{ 1, 2, 3}.AsEnumerable();
public void Foo(int arg1)
{
Foo(arg1, new[] { 1, 2, 3 });
}
public void Foo(int arg1, IEnumerable<int> arg2)
{
// do something
}
list = list ?? new List<int>(){1,2,3,4};