C#中没有标识符的参数?

时间:2009-11-06 12:54:45

标签: c#

在C ++中,如果方法参数标识符未使用,则可以跳过它:

void foo( int, int ) {}

这在接口实现的情况下非常有用,其中大量方法具有空体。是否有可能在C#中做类似的事情?直接测试给出错误:

public void OnAddInsUpdate( ref Array )  {} // Error, need identifier :(

6 个答案:

答案 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);
   }
}