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

Method Parameter Without A Parameter Type In C#

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

我正在使用 visual studio 2015,我在他们的 API-SDK

中发现了一个有趣的扩展方法签名
  public static class CallExtendedInfoEx
  {
        public static void AddToSIPMessage(this CallExtendedInfo info,  msg);
  }

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

Severity Code Description Project File Line

Error CS1503 Argument 2: cannot convert from 'object' to '.'

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

那些家伙怎么能用C#写出这样的代码?可能吗?有什么想法吗?

Note : I suspect from a code obscurification problem...But still i do not understand what is going here

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

这不是有效的 C# 代码。某些反编译器可能给了您该代码,或者您复制此代码的文档有问题。

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

可以传递 null 的事实不足为奇 - 参数是引用类型(或可从 null 转换),因此 null 是一个完全有效的值.另一方面,期望传递一个 object 实例是完全错误的——你只能传递更多的派生类型作为参数,而不是 less。可以传递 string(更具体)而不是 object(不太具体),但反之则不行。

最有可能的是,这要么是您不应该接触的方法(即不是 API/SDK 的 public 契约的一部分),要么您应该获得参数的实例来自其他方法 - 永远不要在任何地方使用显式类型。