将Generic设置为C#中的一个新实例

本文关键字:一个 Generic 新实例 实例 设置 | 更新日期: 2023-09-27 18:21:28

我有一个接受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"。存在显式转换(是否缺少强制转换?)

将Generic设置为C#中的一个新实例

作为一个简单的解决方案(没有任何关于方法用例的详细信息)如果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  
{ 
}

我觉得周围有一些设计问题,你能发布一个代码,为AddressAddress_accessor的情况调用CreateAddress()方法吗?也许你在找一个抽象的工厂?

我不明白为什么你需要那个代码,但你可以将结果对象转换为t,直到返回它:

object result = typeof(T) == typeof(Address_Accessor)
  ? (object) new Address_Accessor(dt, eID , sID)
  : (object) new Address(dt, eID, sID);
address = (T)result;