[英]Generic of T for List<T> items
如果以前问过这个问题,我道歉,我找不到类似的东西。
我有一个可以选择进入我班级的选择:
public enum OrdinalValue
{
None = 0,
Qualification = 1,
Career = 2,
Faculty = 3
}
基于这个可枚举的,我有3个属性调用,它们从实体集合中为每个调用带来数据:
public List<Qualification> ByQualification { get; set; }
public List<Career> ByCareer { get; set; }
public List<Faculty> ByFaculty { get; set; }
我想创建一个泛型方法,根据从调用方法传回的枚举返回正确的属性,如:
public List<T> GetEntities<T>(OrdinalValue ord)
{
List<T> value = default(List<T>);
// based on enum, cast the correct List<T> and return value
// something like:
if (ord == OrdinalValue.Career)
return (List<T>)Convert.ChangeType(this.ByCareer, typeof(T));
return value;
}
可能吗?
这听起来像你想要的东西:
public List<T> GetEntities<T>(OrdinalValue ord)
{
object ret;
switch(ord)
{
case OrdinalValue.Career:
ret = ByCareer;
break;
case OrdinalValue.Faculty:
ret = ByFaculty;
break;
case OrdinalValue.Qualification:
ret = ByQualification;
break;
default:
throw new ArgumentOutOfRangeException("ord");
}
return (List<T>) ret;
}
然而,这对我来说并不是一个好的设计。 如果不了解更多关于更大图片的内容,很难提出更好的建议,但它并不像真正的通用方法。
我认为@Jon是在正确的轨道上,在这里过分复杂的事情是没有意义的。 当维护方法变得太复杂时,你应该考虑一直这样做。
但是,我认为他的方法可以简化。 您不需要传递OrdinalValue
参数。 您可以检查typeof(T)
,而不是检查它。 编译器无论如何都需要在编译时知道T.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.