我有一个采用Generic参数的方法。我把类型限制为两个中的一个。在我想要设置的方法中调用两个构造函数之一。
代码:
internal static void CreateAddress<T>(out T address, bool isSave, int? cID) where T: Address_Accessor, Address
{
DateTime dt= DateTime.Now;
int? eID = 1;
int? sID = 50;
if (typeof(T) == typeof(Address_Accessor))
address = new Address_Accessor(dt, eID , sID);
else
address = new Address(dt, eID, sID);
}
编译失败说:
无法将类型'Address_Accessor'隐式转换为'T'。存在显式转换(您是否错过了演员?)
答案 0 :(得分:1)
作为一个简单的解决方案(没有任何细节考虑方法使用情况)如果Address和Address_Accessor都代表一些共同的实体 - 只需引入一个通用接口并限制T
来实现此接口,那么你就可以将任何实现IAddress
并设置为IAddress
引用(T后面)的类变为绝密。
interface IAddress
{
}
class Address_Accessor : IAddress
class Address : IAddress
internal static void CreateAddress<T>(out T address, bool isSave, int? cID)
where T: IAddress
{
}
我觉得周围存在一些设计问题,您是否可以发布为CreateAddress()
和Address
案例调用Address_accessor
方法的代码?也许你正在寻找某种抽象工厂?
答案 1 :(得分:1)
我不明白为什么你需要那个代码但你可以将结果对象转换为T直到它返回:
object result = typeof(T) == typeof(Address_Accessor)
? (object) new Address_Accessor(dt, eID , sID)
: (object) new Address(dt, eID, sID);
address = (T)result;