C# 带有默认参数值的params参数

C# 带有默认参数值的params参数,c#,params,C#,Params,我看到params参数的次数比我能说的要多,并且总是在不考虑其含义的情况下删除它。现在我明白了它的目的。我刚刚学到的是params参数必须是参数列表中的最后一个。但这就是我对指定了默认值的参数的了解。例如: MyMethod(string Name, int blah=0). MyMethod(int blah=0, params string[] variableData). 所以问题是,如果我需要在需要使用params时指定如上所述的默认值,可以这样做吗?如果是,最后必须申报哪一项?

我看到
params
参数的次数比我能说的要多,并且总是在不考虑其含义的情况下删除它。现在我明白了它的目的。我刚刚学到的是
params
参数必须是参数列表中的最后一个。但这就是我对指定了默认值的参数的了解。例如:

MyMethod(string Name, int blah=0). 
MyMethod(int blah=0, params string[] variableData). 
所以问题是,如果我需要在需要使用
params
时指定如上所述的默认值,可以这样做吗?如果是,最后必须申报哪一项?例如:

MyMethod(string Name, int blah=0). 
MyMethod(int blah=0, params string[] variableData). 

再次感谢你的帮助。詹姆斯你的例子是正确的:

public void TestMethod(string name = "asdasd", params int[] items)
{
}

params
必须是最后一个参数,无论之前使用的是什么参数。

是的,
params
在这里是一个特例-只有在这种情况下,没有默认值的参数才能跟在有默认值的参数后面

但是,如果不指定可选参数,则不能调用该方法并利用事物的
params
端(对于非空数组):

MyMethod(5, "x", "y");                            // Fine, no defaulting
MyMethod(variableData: new string[] { "x", "y"}); // Default for blah
MyMethod();                                       // Default for blah, empty variableData
MyMethod(new string[] { "x, "y" });               // Invalid   
MyMethod("x", "y");                               // Invalid

我认为这样做完全可以。你们试过了吗。嘿,伙计们。谢谢你的评论。直到昨晚我还没有电脑。我今天刚能用上我的新笔记本电脑。这就是为什么我不能测试它。所以对于那些不知道的人来说,默认值参数是最后声明的,除非使用了params。在后一种情况下,默认值参数声明为倒数第二个,params参数声明为倒数第二个。谢谢有趣的事实:当您添加默认参数值并重新编译时,编译器会循环并将这些默认参数插入到对您的方法的调用中-找到了困难的方法。@JerKimball:是的,会的。默认参数就是这样工作的——它们被烘焙到调用站点中。谢谢你简单的回答。我昨晚刚买了一台新的笔记本电脑,终于能够测试我的场景,看看结果。我看你完全正确!