【发布时间】:2016-02-08 09:56:01
【问题描述】:
我有以下在 Fluent API 中使用的通用静态类。它接受一个输入参数并返回一个包装类,其中包含转换为泛型类型的参数。:
public static Foo<TOut> InputAs<TOut>(object parameter) {
var castParameter = parameter as TOut;
if(castParameter == null) {
throw new Exception("Invalid cast");
}
return new Foo<TOut>(castParameter);
}
问题是castParameter == null 检查总是返回null。使用TOut 泛型参数作为新类型来转换对象的正确方法是什么?
【问题讨论】:
-
为什么不:
public static Foo<TOut> InputAs<TOut>(TOut parameter) {?像这样,您可以强制输入参数为预期类型。如果你需要一个基类,你可以有限制地扩展它:public static Foo<TOut> InputAs<TOut>(TOut parameter) where TOut : ISomeInterface {