Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-如何使用空列表<;字符串>;作为可选参数_C#_C# 4.0 - Fatal编程技术网

C#-如何使用空列表<;字符串>;作为可选参数

C#-如何使用空列表<;字符串>;作为可选参数,c#,c#-4.0,C#,C# 4.0,有人能举个例子吗 我尝试了null、string.Empty和对象初始化,但它们不起作用,因为默认值在编译时必须是常量这是不可能的。您应该改用方法重载 public static void MyMethod(int x, List<string> y) { } public static void MyMethod(int x) { MyMethod(x, Enumerable<string>.Empty()); } publicstaticvoidmymeth

有人能举个例子吗


我尝试了
null
string.Empty
和对象初始化,但它们不起作用,因为默认值在编译时必须是常量

这是不可能的。您应该改用方法重载

public static void MyMethod(int x, List<string> y) { }
public static void MyMethod(int x)
{
    MyMethod(x, Enumerable<string>.Empty());
}
publicstaticvoidmymethod(intx,List y){
公共静态void MyMethod(int x)
{
MyMethod(x,Enumerable.Empty());
}

这是不可能的。您应该改用方法重载

public static void MyMethod(int x, List<string> y) { }
public static void MyMethod(int x)
{
    MyMethod(x, Enumerable<string>.Empty());
}
publicstaticvoidmymethod(intx,List y){
公共静态void MyMethod(int x)
{
MyMethod(x,Enumerable.Empty());
}
专用无效测试(列表可选=空)
{
}
对不起,是字符串而不是列表。 Null在4.0上对我来说很好,我使用的是visual studio 2010

私有无效测试(列表可选=Null)
{
}
对不起,是字符串而不是列表。
Null在4.0上对我来说很好,我使用的是visual studio 2010

只需使用Null合并操作符和空
列表的一个实例

公共作废流程(字符串param1,列表param2=null)
{
param2=param2??新列表();
//还是从C#8开始
param2???=新列表();
}

问题是,如果“param2”为null,并且您分配了一个新的引用,那么它在调用上下文中就无法访问

只需使用null合并运算符和空
列表的实例

公共作废流程(字符串param1,列表param2=null)
{
param2=param2??新列表();
//还是从C#8开始
param2???=新列表();
}

问题是,如果“param2”为null,并且您分配了一个新的引用,那么它在调用上下文中就无法访问

您还可以使用
默认值
执行以下操作,这是一个编译时常量(
对于
列表
):

void DoSomething(列表lst=默认值(列表))
{
如果(lst==default(List))lst=newlist();
}

您还可以使用
默认值执行以下操作,默认值是编译时常量(
空值
,如果是
列表
):

void DoSomething(列表lst=默认值(列表))
{
如果(lst==default(List))lst=newlist();
}

这是它编译的
字符串
,而不是
列表
,但在运行时会出现对象实例化异常我没有遇到异常,请确保在声明之前测试您的答案。对我来说效果很好,但如果您有多个参数,则需要在末尾编译
字符串
,而不是
列表
,但是您在运行时遇到对象实例化异常我没有遇到该异常,请确保在声明之前测试您的答案。对我来说,这很好,但如果您有多个参数,则需要在末尾。不可能将非编译时常量(如空列表)作为默认值。我知道你可以在C#中使用默认的参数值,很明显……但是,这将是唯一的解决方案,或者任何使用4.0之前的C#版本的人都可以。不可能将非编译时常量(例如空列表)作为默认值。我知道你可以在C#中为参数使用默认值,很明显…但是,这将是唯一的解决方案,或者任何使用4.0之前的C#版本的人。是的,我得到了限制,但在这种情况下,这对我很有效。是的,我得到了限制,但在这种情况下,这对我来说效果很好。IntelliSense向我展示了使用“默认”而不是“默认(列表)”,可以进一步简化语句。IntelliSense向我展示了使用“默认”而不是“默认(列表)”,可以进一步简化语句。
public void Process(string param1, List<string> param2 = null) 
{
    param2 = param2 ?? new List<string>();

    // or starting with C# 8
    param2 ??= new List<string>();
}
void DoSomething(List<string> lst = default(List<string>)) 
{
    if (lst == default(List<string>)) lst = new List<string>();
}
private void test(params object[] params)
{

}