如何将 null 添加到泛型列表? [复制]

Posted

技术标签:

【中文标题】如何将 null 添加到泛型列表? [复制]【英文标题】:How do I add null to a List of generic type? [duplicate] 【发布时间】:2021-02-15 18:42:58 【问题描述】:

我正在尝试这样做:

protected List<T> list = new List<T>();

for (int i = 0; i < size; i++)

    list.Add(null);

我收到一个编译器错误提示“无法从 null 转换为 T”。

我环顾四周,但找不到这个问题的答案。

【问题讨论】:

在这种情况下T 是什么? @David 我花了一段时间试图弄清楚这一点,T 是一个引用类型,一旦我将 where T : class 添加到约束中,我就可以添加 null 成员。可以避免的问题,但也许其他人遇到了这个问题并可以从中受益。 list = Enumerable.Repeat(default(T), size).ToList(); 注意,如果Tstruct(例如intbool 等),default(T) 将不是null 【参考方案1】:

好的,很抱歉,在发布此内容几秒钟后,我注意到我没有在类标题中添加约束,当在约束中包含 where T : class 时,我可以将列表成员设为空。

【讨论】:

或者你可以使用default(T) @Dennis_E 这实际上是一个伟大的 @Dennis_E 我会说你应该这样发布作为答案。 @Dmitry Bychenko(初始问题 cmets)正确地指出,default(T) 在处理 intbool 等结构时将不等同于 null 如果目标是专门将 null 添加到列表中,default(T) 本身并不能保证如此,因此它不是这篇文章的好答案。

以上是关于如何将 null 添加到泛型列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在编译时将整数添加到泛型集合中,即使使用引用类型作为数字创建的泛型? [复制]

Kotlin:从泛型集合到泛型数组

是否可以在 TypeScript 中传播独特的泛型类型?

如何在不知道项目泛型类型参数的情况下对作为泛型给出的列表进行浅表复制? [复制]

我丢,去面试初级Java开发岗位,被问到泛型?

java从toArray返回Object[]到泛型的类型擦除