如何转换 IList到 IList其中 SomeObject 在 C# 4.0 中使用协方差实现 ISomeInterface

发布于 2024-10-31 04:25:32 字数 448 浏览 1 评论 0原文

如何将 IList 转换为 IList,其中 SomeObject 使用 C# 4.0 中的协方差实现 ISomeInterface

我有类似于以下内容的内容

IList<Items> GetItems;

IList<IItems> items = GetItems() as IList<IItems>; 

,但 items 为 null;

这里的答案是 4.0 之前的版本:

将 T 类型的数组转换为 I 类型的数组,其中 T 在 C# 中实现 I

How to Convert IList to IList where SomeObject implements ISomeInterface using covariance in C# 4.0

I have something similar to following

IList<Items> GetItems;

IList<IItems> items = GetItems() as IList<IItems>; 

but items is null;

the answer here was for pre 4.0:

Converting an array of type T to an array of type I where T implements I in C#

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜吻♂芭芘 2024-11-07 04:25:32

为什么不简单地使用

IList<Items> GetItems;
IList<IItems> items = GetItems().Cast<IItems>().ToList(); 

why not simply use

IList<Items> GetItems;
IList<IItems> items = GetItems().Cast<IItems>().ToList(); 
野心澎湃 2024-11-07 04:25:32

为了使其按照您的想法工作,我相信 IList 必须被声明为协变,而不是列表中的项目。并且IList不支持协方差。更新为支持协变的唯一 .NET 接口有:

  • IEnumerable(T 是协变)
  • IEnumerator(T 是协变)
  • IQueryable(T 是协变)
  • IGrouping(TKey 和 TElement 是协变)
  • IComparer(T 是逆变)
  • IEqualityComparer(T 是逆变) )
  • IComparable(T 是逆变)

这来自 http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx

For this to work as you are thinking then I believe IList would have to be declared as covariant, not the items in the list. And IList does not support covariance. The only .NET interfaces that were updated to support covariance are:

  • IEnumerable (T is covariant)
  • IEnumerator (T is covariant)
  • IQueryable (T is covariant)
  • IGrouping (TKey and TElement are covariant)
  • IComparer (T is contravariant)
  • IEqualityComparer (T is contravariant)
  • IComparable (T is contravariant)

This from http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx

蓬勃野心 2024-11-07 04:25:32

从技术上讲,以下内容可行,但我不认为这正是您正在寻找的......

IList<IItems> items = GetItems().ToArray() as IList<IItems>;

Technically, the following will work, but I don't think this is exactly what you're looking for...

IList<IItems> items = GetItems().ToArray() as IList<IItems>;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文