1 回答

TA貢獻1810條經驗 獲得超4個贊
為什么?
類型參數推斷是全有或全無:您必須在每次方法調用時指定所有類型參數,或不指定任何類型參數。
M無法推斷類型參數,因為它不會出現在參數列表中的任何位置。
幾個選項:
將兩個方法鏈接在一起,以便第一個可以使用類型推斷,第二個可以讓您為 指定類型參數M:
Bar<double> bar = foo.CreateConverter() // Implicitly CreateConverter<int>
.ConvertTo<double>() // Specify that you want a Bar<double>
這將需要一個新的干預類型,例如Converter<T>由 返回CreateConverter。那將有一個常規的實例方法ConvertTo<M>。
M在方法中添加一個類型的參數Convert:
public static Bar<M> Convert<T, M>(this Foo<T> list, M ignored)
...然后您可以將該方法稱為:
Bar<double> bar = foo.Convert(default(double));
無可否認,這有點臭。
不要使用擴展方法,而是在泛型類型中使用常規靜態泛型方法——其中類型和方法都有一個類型參數:
public static class Converters<M>
{
public static Bar<M> Create<T>(Foo<T> foo) { ... }
}
然后將其調用為:
Bar<double> bar = Converters<double>.Create(foo);
該方法的類型參數可以從 中推斷出來,并且您正在顯式指定類型foo的類型參數。
- 1 回答
- 0 關注
- 155 瀏覽
添加回答
舉報