關於下列擴展方法:當通用參數類型必須爲擴展方法明確指定時,有哪些規則?
public static class Extensions
{
public static void P<T>(this T value) { }
public static TResult F<T, TResult>(this T value)
{
return default(TResult);
}
}
當我嘗試用不同類型的參數選項使用這些,我得到如下結果:
1.P(); // Compiler just fine
1.P<int>(); // R# says "Type argument specification is redundant"
var x = 1.F<int, int>(); // Compiler just fine
var y = 1.F<int>(); // Compiler error: Incorrect number of type parameters
那麼怎麼來的編譯器可以推斷類型T
爲P
,但不能推斷出相同的F
?圍繞這種推理的規則是什麼?有沒有一種方法可以避免需要指定這樣的類型?
'這個T值'是你通過的任何類型。 - >'1.P();' - >'1'已經是整數 –
@ T.S。,是的,我明白了。我不明白的是爲什麼這不適用於'1.F'。爲什麼'int'推斷爲'P'而不是'F'? –
你在'F'中有完全不同的問題 - 這是一個通用函數,無法映射 –