gpt4 book ai didi

c# - 可以将具有不同泛型类型的对象添加到单个容器中吗

转载 作者:行者123 更新时间:2023-11-30 20:00:16 27 4
gpt4 key购买 nike

我需要一个包含一组“泛型”对象的数组,其中数组中的每个元素可能具有相同的泛型类型,也可能不同。我能解决这个问题的唯一方法是让通用对象有一个基类,而数组是一组基类对象。

class abstract absgentype { }

class gentype<T> : absgentype
{
T value;
...
}

不幸的是,一个不好的副作用是当我查看数组的内容时,我必须使用转换才能返回到实际对象,而且我必须知道泛型类型才能进行转换.

有没有一种方法可以构建一个容器,该容器可以包含多个具有不同泛型类型的泛型对象?理想情况下我想这样做:

var p = genarray[0];    // type of p is whatever type was put into array

我不想使用对象类型或动态类型,因为我失去了静态类型...

最佳答案

不,因为您试图使p编译时 类型依赖于值的执行时 类型在集合中。

假设您正在编写一个编译器,并且您获得了以下代码:

public void Foo(MagicCollection collection)
{
var x = collection[0];
...
}

您如何推断 x 的类型,在编译时?可以从具有不同第一个值的不同集合的多个位置调用此方法...但是 x 的类型必须在编译时一次确定。

或者换句话说,让我们添加另一行:

public void Foo(MagicCollection collection)
{
var x = collection[0];
x.Bar(); // is this line valid?
}

静态类型的要点是编译器可以决定 Bar() 调用是否有效。要知道这一点,它需要知道 x 的类型......如果它可以根据集合中的内容而改变,你就不能在编译时做出决定......它可以'既有效无效。

关于c# - 可以将具有不同泛型类型的对象添加到单个容器中吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21648308/

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