gpt4 book ai didi

c# - 为什么这在 C# 泛型中是不可能的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:58:55 25 4
gpt4 key购买 nike

一位同事向我指出了 C# 中的一个奇怪案例(虽然不确定这是否真的很奇怪)。
假设您有一个 Employee 类。如果你想创建一个 Employee 类型的 Generic List<>,你可以简单地做:

List<Employee> x = new List<Employee>;

我知道我需要将 Employee 类型传递给 Generic 列表,以便它知道有关 Employee 的所需类型信息并生成返回和接受与 Employee 兼容的参数的方法。

现在我的问题是,为什么不能执行以下操作?

Employee x = new Employee();
List<typeof(x)> list = new List<typeof(x)>();

为了创建列表,这是否足以让 List<> 知道所需的信息?换句话说,作为 Employee 类型的 x 的类型现在作为泛型类型参数传递给 List<>,这(我曾经相信)与传递类型名称(在本例中为 Employee)的列表相同.

我知道在 Java(使用 .class )变量关键字中可以使用类似的东西。

我确定我遗漏了一些东西,所以请大家赐教!

最佳答案

不,Java 中 的等价物可用。您不能使用“x.class”来获取变量的声明类型。

此外,typeof(x)在 C# 中也无法获取变量的类型 - 它返回 Type type 名称的引用,例如typeof(string)将返回对 Type 的引用与 System.String 关联的对象类型。这相当于使用 String.class在 java 。 (再次注意,这是将 .class 应用于类型名称,不是变量名称。)

Java 泛型也不支持任何类似于您的最终声明的内容。如果您相信他们这样做,请提供示例 :)

可以在 C# 中做的是使用类型推断来做您想要的:

public static List<T> CreateListForSampleType<T>(T sample)
{
return new List<T>();
}

...

Employee x = new Employee();
var list = CreateListForSampleType(x);

请注意,没有理由不能扩展 C# 以允许像 typeof(variablename) 这样的东西或 List<typeof(variablename)> - 毕竟都是编译时类型信息。但是,我看不出它能满足团队对实用性的要求……我希望首先看到其他更有用的功能 :)

关于c# - 为什么这在 C# 泛型中是不可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2192876/

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