Csharp/C#教程:Casting List – 协方差/逆变问题分享


Casting List – 协方差/逆变问题

给出以下类型:

public interface IMyClass { } public class MyClass : IMyClass { } 

我想知道如何将List转换为List ? 关于协方差/逆变主题,我并不完全清楚,但据我所知,由于这个原因,我不能仅仅清楚地列出清单。

我只能提出这个微不足道的解决方案; 缺乏优雅,浪费资源:

 ... public List ConvertItems(List input) { var result = new List(input.Count); foreach (var item in input) { result.Add(item); } return result; } .... 

你怎么能以更优雅/高效的方式解决它?

请注意,我需要.NET 2.0解决方案,但为了完整性,我也很高兴看到使用更新框架版本的更优雅的解决方案。

最简单的方法可能是使用ConvertAll

 List converted = original.ConvertAll(x => x); 

即使您使用的是.NET 2,如果您使用的是VS2008或更高版本,也可以使用lambda语法。 否则,总会有匿名方法:

 List converted = original.ConvertAll( delegate (MyClass x) { return x; }); 

在.NET 3.5中,您可以使用带有CastOfType LINQ,甚至只需Select

 var converted = original.Cast().ToList(); var converted = original.OfType().ToList(); var converted = original.Select(x => (IMyClass) x).ToList(); 

在.NET 4.0中,由于IEnumerable的协方差,您可以直接使用ToList而无需中间转换:

 var converted = original.ToList(); 

它需要是一个列表吗? IEnumerable解决方案可能更有效:

  public IEnumerable ConvertItems(List input) { foreach (var item in input) { yield return (IMyClass)item; } } 

(.NET 3.5解决方案)

上述就是C#学习教程:Casting List – 协方差/逆变问题分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 List list = new List { ... }; List converted = list.Cast().ToList(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1012342.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐