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]''.'')
好吧,看看ILDASM输出,很明显该参数具有完全有效的类型。当然,这是一种你不能在c#中命名的类型,但它在CLR中是完全有效的。
您可以传递null
的事实不应该令人惊讶-参数是引用类型(或从null
转换),因此null
是一个完全有效的值。另一方面,期望传递一个object
实例是完全错误的——您只能传递更多的派生类型作为参数,而不能传递更少的。传递string
(更具体)而不是object
(不太具体)是可以的,但不能反过来。
最有可能的是,这是一个你不应该触摸的方法(即不是API/SDK的公共合约的一部分),或者你希望从其他方法获得参数的实例-永远不要在任何地方使用显式类型
这不是有效的c#代码。一些反编译器可能给了你这些代码,或者你复制这些代码的文档是错误的。