![]() |
1
10
对于大列表来说,公认的解决方案效率很低,完全没有必要。您可以稍微更改方法的签名以使代码工作。 没有 任何隐式或显式转换:
请注意,该方法现在是泛型的,并使用类型约束来确保只能使用
|
![]() |
2
17
几乎所有这些答案都表明这将在C 4中得到支持。他们都错了。 只是为了清晰起见: 这不是我们将在C 4中支持的协方差示例,因为这样做不会是类型安全的。 我们支持 用引用类型参数构造的泛型接口和委托的类型安全协方差和反方差 . 这里的示例使用的是类类型、列表,而不是接口类型。接口类型ilist对于协变或逆变来说不是类型安全的。 IEnumerable将是协变的,因为它是一个对协变安全的接口。 |
![]() |
3
4
目前,这是禁止的,因为否则类型安全将被破坏。 你可以在dostuffwithInterfaceList中执行类似的操作:
它将在运行时失败,因为ListOfInterfaces的类型仅为Concrete。 正如其他人所说,只要您不更改方法内部的列表,但必须将其明确地告知编译器,这就可能是C 4。 要回答关于转换列表的其他问题,如果您使用.NET 3.5,我将使用Enumerable.Cast扩展方法。否则,您可以使用yield关键字自己编写一个懒惰的转换方法,这将给您同样的效果。 编辑: 正如EricLippert所说,您应该使用IEnumerable以便它在C 4中工作。 |
![]() |
4
2
这与协方差和反方差有关。埃里克·利珀特今年早些时候写了很多关于它的文章。(11篇关于该主题的博客文章。)第一篇是 Covariance and Contravariance in C#, Part One . 读这篇文章,然后在他的博客中搜索其他文章。他详细解释了为什么这类事情很困难。 好消息:C 4.0中取消了一些限制。 |
![]() |
5
2
伊利斯特不会工作,因为伊利斯特不是反义词。它需要是IEnumerable,但同样,它只在4.0中工作。您也可以将convertall与lambda表达式一起使用,它将在3.5中工作。 |
![]() |
6
2
C目前不支持转换这样的通用类型(
您可以这样调用方法:
更新
|
![]() |
7
1
你可以试试
但我认为这只适用于.NET 4.0。 如果你想变脏,就做吧
检查出来的物体是否是混凝土。 |
![]() |
8
0
或
或
|
![]() |
A B · C#Excel自动调整列避免长文本时出错 7 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 8 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 8 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 8 月前 |