0
我有一個擴展方法:爲什麼不能在T類型的值上使用Nullable <T>的擴展?
public static int DoStuff(this MyEnum? enumValue)
{
...
}
我想要調用它在其已知是不爲空的MyEnum
值:
MyEnum enumVal = ...
var x = enumVal.DoStuff(); // compiler error!
錯誤:
error CS1928: 'MyEnum' does not contain a definition for 'DoStuff' and the best extension method overload 'MyExtensions.DoStuff(MyEnum?)' has some invalid arguments
我可以通過聲明擴展的過載來解決它:
public static int DoStuff(this MyEnum enumValue)
{
return DoStuff((MyEnum?)enumValue);
}
或者,我可以明確地調用擴展類:
var x = MyExtensions.DoStuff(enumVal);
但是,這是不直觀。爲什麼Nullable<T>
的擴展名不能接受類型爲T
的值,就像任何常規方法簽名一樣?
原因'MyEnum'不能爲空 – Rahul
它們不是同一類型。 –
除了'Nullable'絕對不是'T'。 –