提问人:Aleksandar 提问时间:11/12/2023 最后编辑:Aleksandar 更新时间:11/12/2023 访问量:43
在 C 语言中从泛型集合到特定类型的集合的类型转换#
Type conversion from a collection of generics to a collection of a specific type in C#
问:
假设以下代码:
public ObservableCollection<Dog> TblDogs { get; set; } = new ObservableCollection<Dog>();
public ObservableCollection<Health> TblDogHealth { get; set; } = new ObservableCollection<Health>();
public ObservableCollection<Pedigree> TblDogPedigree { get; set; } = new ObservableCollection<Pedigree>();
private ObservableCollection<T>? GetList<T>(Enum e)
{
switch (e.GetType().Name)
{
case "TblDogs": return TblDogs;
case "TblDogHealth": return TblDogHealth;
case "TblDogPedigree": return TblDogPedigree;
}
return null;
}
该方法应该根据作为参数提供的类型,从类本身中的类返回现有集合作为属性(从而使值类型指向引用类型,使方法可用)。Enum
IEnumerable
我尝试使自定义数据类型继承自空类,并使方法的返回类型适合继承的类,但没有奏效。有没有解决这样的问题?
答:
0赞
D Stanley
11/12/2023
#1
代码不保证返回类型与枚举类型匹配。调用:
var dogList = GetList<Health>(TypeEnum.Pedigree);
您可以显式强制转换:
private ObservableCollection<T>? GetList<T>(Enum e)
{
switch (e.GetType().Name)
{
case "TblDogs": return TblDogs as ObservableCollection<T>;
case "TblDogHealth": return TblDogHealth as ObservableCollection<T>;
case "TblDogPedigree": return TblDogPedigree as ObservableCollection<T>;
}
return null;
}
如果请求的输出类型与枚举值不匹配,则返回该值。null
或者只是不使用泛型方法(因为你的方法不是真正的泛型方法)并使用真正的类型安全:
private ObservableCollection<Dog> GetDogList()
{
return TblDogs;
}
private ObservableCollection<Health> GetHealthList()
{
return TblDogHealth;
}
private ObservableCollection<Pedigree> GetPedigreeList()
{
return TblDogPedigree;
}
评论
0赞
Aleksandar
11/12/2023
选角明确奏效。问题是,我确信该方法永远不会被调用,除了我定义的那些之外,其他枚举类型,所以就像你说的那样,它本身真的不是泛型的,而是为了适应已经存在的方法,以根据提供的枚举进行循环。感谢您的帮助!
评论
GetList