假设我们有一个只有一个泛型方法的接口:
public interface IExtender
{
T GetValue<T>(string tag);
}
并且有一个简单的实现A,它根据“tag”参数返回两种不同类型(B和C)的实例:
public class A : IExtender
{
public T GetValue<T>(string tag)
{
if (typeof(T) == typeof(B) && tag == null)
return (T)(object) new B();
if (typeof(T) == typeof(C) && tag == "foo")
return (T)(object) new C();
return default(T);
}
}
有没有可能避免双重转换 (T)(object)
呢?或者,是否有一种方法告诉编译器:“嘿,我确定这个转换在运行时不会失败,让我直接转换而不是先转换为对象!”