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

本文关键字:参数 类型 方法 | 更新日期: 2023-09-27 18:10:45

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

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

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

第二个参数类型不存在。在c#中从未见过。我试图给出一个通用的对象参数作为第二个参数,c#编译器给出了一个奇怪的错误

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

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

它适用于"null"…没有编译错误或运行时错误[忽略i think]

这些家伙怎么能用c#写出这样的代码?这可能吗?任何想法?

注意:我怀疑是代码模糊问题…但我还是不明白这是怎么回事

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

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

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

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

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

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