[英]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#中沒見過。 我嘗試將通用的Object參數作為第二個參數,並且C#Compiler給出了一個奇怪的錯誤
嚴重性代碼描述項目文件行
錯誤CS1503參數2:無法從'object'轉換為'。'
它使用“null”...沒有編譯器錯誤或運行時錯誤[忽略我認為]
這些人怎么能用C#編寫這樣的代碼? 它可以嗎? 任何想法?
注意:我懷疑代碼存在問題...但我仍然不明白這里發生了什么
IL_0073: call void [CallExtendedInfoEx::AddToSIPMessage(class [VoIP.CallExtendedInfo,
class [VoIPSDK]''.'')
好吧,看看ILDASM輸出,很明顯,該參數具有完全有效的類型。 當然,它是一種你無法在C#中實際命名的類型,但它在CLR中完全有效。
您可以傳遞null
的事實不應該令人驚訝 - 參數是引用類型(或可以從null
轉換),因此null
是一個完全有效的值。 另一方面,期望傳遞object
實例是完全錯誤的 - 您只能傳遞更多派生類型作為參數,而不是更少 。 傳遞string
(更具體)而不是object
(不太具體)是可以的,但不是相反。
最有可能的是,這是一個你不應該觸摸的方法(即不是API / SDK的公共合同的一部分),或者你應該從其他方法獲取參數的實例 - 從不在任何地方使用顯式類型。
這不是有效的C#代碼。 一些反編譯器可能會給你那些代碼,或者你復制它的文檔是錯誤的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.