gpt4 book ai didi

c# - 类型转换 List 的问题,其中 Class A :Generic to List>

转载 作者:太空宇宙 更新时间:2023-11-03 11:06:02 26 4
gpt4 key购买 nike

我有下一节课:

public class EntityBase<T>
{
public T Id { get; set; }

}

它的实现者:

public class ClassA : EntityBase<Int32>
{
...
}

public class ClassB : EntityBase<Int64>
{
...
}

在代码中,它不知道类 - ClassAClassB 它只知道 EntityBase<...> 的存在,我做这样的事情:

     // Here for sure I get the list of `ClassA`
object obj = GetSomeHowListOfClassA();
List<EntityBase<Int32>> listOfEntityBases = (List<EntityBase<Int32>>)obj;

我得到了错误:

Unable to cast object of type 'System.Collections.Generic.List`1[...ClassA]' to type 'System.Collections.Generic.List`1[...EntityBase`1[System.Int32]]'.

我是这样修复的:

var listOfEntityBases = new List<EntityBase<Int32>>(obj);

但我不喜欢这种方式,因为我正在创建新的列表<>。有办法投吗?感谢任何预付款。

最佳答案

出于明确的原因,您不能这样做。让我们假设这行代码工作:

 List<EntityBase<Int32>> listOfEntityBases = (List<EntityBase<Int32>>)obj;

这意味着在那行之后你可以说以下内容

listOfEntityBases.Add(new EntityBase<Int32>());

但实际上这一行同时会加上EntityBase<Int32>反对你的obj类型 List<ClassA> - 这绝对是 InvalidCast

因此,您不能将相同 变量声明为List<ClassA>List<EntityBase<Int32>>同时。

不过,很容易允许 IEnumerable<T>因为您不能为此类集合添加新值。

这就是为什么他们有 inout在泛型声明中。

关于c# - 类型转换 List<Class> 的问题,其中 Class A :Generic<Int32> to List<Generic<Int32>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com