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