在 c# 中返回泛型类型
本文关键字:泛型类型 返回 | 更新日期: 2023-09-27 18:32:42
public class Manager<T> where T: IBallGame
{
T GetManager()
{
//if T is ISoccer return new Soccer()
//if T is IFootball return new Football()
//This wont work. Why?
if (typeof(T) == typeof(ISoccer))
return new Soccer();
}
}
Interface ISoccer: IBallgame
{
}
class Soccer: ISoccer
{
}
Interface IFootball: IBallgame
{
}
class Football:IFootball
{
}
我已经检查了这个问题如何使方法的返回类型泛型?还有比 Convert.ChangeType() 更优雅的东西吗?
当类型存在约束时,为什么无法返回足球或足球的实例?
如果您期望根据泛型的确切类型进行不同的实现,那么您实际上不再处理泛型了。
您应该定义两个类,例如 FootBallManager : Manager<IFootball>
和SoccerManager : Manager<ISoccer>
根据您的更新,您真正想要的是对new()
泛型的附加约束,并将您的类实现为
public class Manager<T> where T: IBallGame, new()
{
T GetManager()
{
return new T();
}
}
public class Manager<T> where T : class, IBallgame
{
T GetManager()
{
//if T is ISoccer return new Soccer()
//if T is IFootball return new Football()
if (typeof(T) == typeof(ISoccer))
return new Soccer() as T;
//code
}
}
public interface IBallgame
{
}
public interface ISoccer : IBallgame
{
}
public class Soccer : ISoccer
{
}
public interface IFootball : IBallgame
{
}
class Football : IFootball
{
}
你只需要一个类约束和 T