在C ++中,如果方法参数标识符未使用,则可以跳过它:
void foo( int, int ) {}
这在接口实现的情况下非常有用,其中大量方法具有空体。是否有可能在C#中做类似的事情?直接测试给出错误:
public void OnAddInsUpdate( ref Array ) {} // Error, need identifier :(
答案 0 :(得分:6)
不要害怕 - 请看一下这里的语言规范:
答案 1 :(得分:3)
C#语言不支持。
答案 2 :(得分:3)
我不相信这是可能的。如果您有未使用的参数,您应该考虑重载或命名参数(C#4.0中的新参数)。
答案 3 :(得分:1)
在C#中你不可能提供参数名称,但是,我没有看到方法检查是否有问题,例如是否已设置。
public void OnAddInsUpdate(int x, int? y)
{
// do something with x
if (y != null)
// do something with y
}
C#4.0引入了Optional Parameters。
答案 4 :(得分:1)
具有多个参数的事件的示例实际上应该使用EventArgs来完成。
这有很多好处。主要的一点是,您可以传递大量潜在值,但只填充相关的值。
额外的好处是,您可以在以后阶段添加更多值,而无需更改事件的签名,并要求更新所有使用者。
所以,例如:
public void OnAddInsUpdate(AddInsUpdateEventArgs e) { }
public class AddInsUpdateEventArgs : EventArgs
{
public int x { get; } // Readonly for event handler
public int? y { get; set; } // Read/Write (eg if you can accept values back)
public bool? Handled { get; set; }
}
答案 5 :(得分:0)
也许使用params会给你你想要的东西:
public class MyClass
{
public static void UseParams(params int[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}
public static void UseParams2(params object[] list)
{
for ( int i = 0 ; i < list.Length ; i++ )
Console.WriteLine(list[i]);
Console.WriteLine();
}
public static void Main()
{
UseParams(1, 2, 3);
UseParams2(1, 'a', "test");
int[] myarray = new int[3] {10,11,12};
UseParams(myarray);
}
}