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

Hip*_*nor 7 c# c#-4.0

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

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

  public static class CallExtendedInfoEx
  {
        public static void AddToSIPMessage(this CallExtendedInfo info,  msg);
  }
Run Code Online (Sandbox Code Playgroud)

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

严重性代码描述项目文件行

错误CS1503参数2:无法从'object'转换为'.'

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

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

注意:我怀疑代码存在问题...但我仍然不明白这里发生了什么

  IL_0073:  call       void [CallExtendedInfoEx::AddToSIPMessage(class [VoIP.CallExtendedInfo,
                                                                                  class [VoIPSDK]''.'')
Run Code Online (Sandbox Code Playgroud)

Lua*_*aan 5

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

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

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