由於某種原因,我有一種感覺,只有Jon Skeet會知道這個答案,但它值得一試。爲什麼不能用泛代碼編寫的代碼操作需要明確的參數聲明
我有這個方法存根,用作代理來生成命令。
public static void SetCommand<T>(string commandName, Action<T> execution)
where T : new()
{
//Omitted unimportant
}
我有一個調用此代碼的函數,但行爲因調用方式而異。
如果我通過顯式聲明的行動調用的代碼,如果我聲明瞭一個函數來表示我的行動
public static void GenerateClass(ClassDeclarationOptions classOptions)
{
}
然後,我需要顯式地所有的參數都可以解決細
Action<ClassDeclarationOptions> test = (t) => { };
SetCommand(GENERATE_CLASS_COMMAND, test);
然而聲明參數時將它傳遞給函數如下:
SetCommand<ClassDeclarationOptions>(GENERATE_CLASS_COMMAND, Commands.GenerateClass);
一個人能解釋爲什麼編譯器不能從方法定義解決我的泛型參數
想象一下,'Commands.GenerateClass'中有一個重載過程,它採用了不同的參數類型,編譯器無法找出使用哪一個參數類型。 – DavidG
@DavidG好點我沒有想到這一點。如果您將該帖子發佈爲答案,我會將其標記爲正確 –
當然可能還有其他原因,但這是首先想到的。 – DavidG