C#中没有参数类型的方法参数

时间:2015-09-01 12:54:02

标签: c# c#-4.0

我尝试使用C#编写的试用版第三方软件。 当我尝试使用它的API时,我遇到了一个奇怪的问题。

我正在使用visual studio 2015,我在他们的API-SDK中找到了一个有趣的扩展方法签名

  public static class CallExtendedInfoEx
  {
        public static void AddToSIPMessage(this CallExtendedInfo info,  msg);
  }

第二个参数类型不存在。以前在C#中看不到。我尝试将通用的Object参数作为第二个参数,并且C#Compiler给出了一个奇怪的错误

  

严重性代码说明项目文件行

     

错误CS1503参数2:无法从'对象'转换到'。'

它适用于" null" ...没有编译器错误或运行时错误[忽略我认为]

这些人怎么能用C#编写这样的代码?它可以吗?有什么想法吗?

  

注意:我怀疑代码出现问题...但我还是不明白这里发生了什么

  IL_0073:  call       void [CallExtendedInfoEx::AddToSIPMessage(class [VoIP.CallExtendedInfo,
                                                                                  class [VoIPSDK]''.'')

2 个答案:

答案 0 :(得分:5)

好吧,看看ILDASM输出,很明显该参数具有完全有效的类型。当然,它是一种你无法在C#中实际命名的类型,但它在CLR中完全有效。

您可以通过null这一事实不应该令人惊讶 - 参数是引用类型(或可以从null转换),因此null是完全有效的值。另一方面,期望传递object实例是完全错误的 - 您只能传递更多派生类型作为参数,而不是 less 。可以通过string(更具体)而非object(不太具体),但不是相反。

最有可能的是,这是一种你不应该触摸的方法(即不是API / SDK的公共合同的一部分),或者你希望从其他方法中获取参数的实例 - 永远不要在任何地方使用显式类型。

答案 1 :(得分:3)

这不是有效的C#代码。有些反编译器可能会给你这些代码,或者你复制它的文档是错误的。