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

加利尤:

一位同事向我指出了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 <>所需的信息以创建列表?换句话说,现在将x的类型(即Employee的类型)作为通用类型参数传递给List <>,这(我曾经相信)与传递列表的类型名称相同(在本例中为Employee) 。

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

我确定我想念一些东西,所以请启发我!

乔恩·斯基特(Jon Skeet):

不,Java中没有等效的功能您不能使用“ x.class”来获取变量的声明类型。

此外,typeof(x)不C#中工作,要么得到一个变量的类型-它返回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)>-毕竟这都是编译时类型信息。但是,我看不到它能满足团队对有用性的要求...我想首先看到其他有用的功能:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在C#泛型中这是不可能的吗?

来自分类Dev

为什么直接使用泛型值是不可能的,但如果从 Dart 中的方法返回也是可能的

来自分类Dev

为什么在C中不可能重载?

来自分类Java

Java泛型不可能赋值?

来自分类Dev

为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

来自分类Java

Java泛型:这是为什么输出可能吗?

来自分类Java

Java泛型:这是为什么输出可能吗?

来自分类Dev

为什么在Haskell中不可能分割整数?

来自分类Dev

为什么不可能从Objective-C目标文件中隐藏符号?

来自分类Dev

在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

来自分类Dev

为什么限制C#泛型的专业化?

来自分类Dev

C链表中不可能的结果

来自分类Dev

为什么在Scala中不可能将变量与`to`一起使用?

来自分类Dev

为什么在Kotlin中不可能使用对`suspend`函数的方法引用?

来自分类Dev

为什么不可能在特征中定义此构造函数?

来自分类Dev

为什么在 VB.NET 中不可能声明一个 NotOverridable 方法?

来自分类Dev

如何在部分模板中设置@key?(或者为什么不可能?)

来自分类Dev

为什么要在Typescript中创建不可能的交集类型?

来自分类Dev

为什么在Python中不可能实现真正的不变性?

来自分类Dev

Nullable <int?>是不可能的,为什么不能呢?

来自分类Javascript

为什么不可能从原型更改构造函数?

来自分类Dev

为什么阶乘1000年不可能的BigInteger?

来自分类Dev

volatile struct = struct不可能,为什么?

来自分类Dev

为什么本文中的这个问题是不可能的?

来自分类Dev

为什么不可能用焦点影响子元素?

来自分类Dev

在使用 C# 的 Selenium 页面对象模型中鼠标悬停是不可能的

来自分类Dev

不可能返回数组在C中实际上意味着什么?

来自分类Dev

为什么可以在TypeScript中将接口中可能的数字值转换为类实现中的不可能的数字值?

来自分类Dev

不可能的事情发生了!这是什么意思?

Related 相关文章

  1. 1

    在C#泛型中这是不可能的吗?

  2. 2

    为什么直接使用泛型值是不可能的,但如果从 Dart 中的方法返回也是可能的

  3. 3

    为什么在C中不可能重载?

  4. 4

    Java泛型不可能赋值?

  5. 5

    为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

  6. 6

    Java泛型:这是为什么输出可能吗?

  7. 7

    Java泛型:这是为什么输出可能吗?

  8. 8

    为什么在Haskell中不可能分割整数?

  9. 9

    为什么不可能从Objective-C目标文件中隐藏符号?

  10. 10

    在C ++中,是否真的不可能跳过带有默认参数的模板参数,为什么语法建议否则呢?

  11. 11

    为什么限制C#泛型的专业化?

  12. 12

    C链表中不可能的结果

  13. 13

    为什么在Scala中不可能将变量与`to`一起使用?

  14. 14

    为什么在Kotlin中不可能使用对`suspend`函数的方法引用?

  15. 15

    为什么不可能在特征中定义此构造函数?

  16. 16

    为什么在 VB.NET 中不可能声明一个 NotOverridable 方法?

  17. 17

    如何在部分模板中设置@key?(或者为什么不可能?)

  18. 18

    为什么要在Typescript中创建不可能的交集类型?

  19. 19

    为什么在Python中不可能实现真正的不变性?

  20. 20

    Nullable <int?>是不可能的,为什么不能呢?

  21. 21

    为什么不可能从原型更改构造函数?

  22. 22

    为什么阶乘1000年不可能的BigInteger?

  23. 23

    volatile struct = struct不可能,为什么?

  24. 24

    为什么本文中的这个问题是不可能的?

  25. 25

    为什么不可能用焦点影响子元素?

  26. 26

    在使用 C# 的 Selenium 页面对象模型中鼠标悬停是不可能的

  27. 27

    不可能返回数组在C中实际上意味着什么?

  28. 28

    为什么可以在TypeScript中将接口中可能的数字值转换为类实现中的不可能的数字值?

  29. 29

    不可能的事情发生了!这是什么意思?

热门标签

归档