为什么 List 不实现 IOrderedEnumerable

2024-02-12

我想使用有序枚举,并使用接口作为返回类型而不是具体类型。我需要返回一组有序的对象。但是,当使用IList<T>执行我无法返回IOrderedEnumerable<T>, as IList<T>不继承IOrderedEnumerable<T>.

In the example下面我有一个带有系列存储库的视图模型,作为List<T>系列对象,因为它们驻留在List<T>,下令。在一个访问器方法中,我想返回一系列的过滤集,其中仅返回特定类型的系列对象,同时保持过滤元素之间的原始顺序。

/// <summary>
/// Represents the view model for this module.
/// </summary>
public class ViewModel : AbstractViewModel
{
    /// <summary>
    /// Gets the series repository.
    /// </summary>
    /// <value>The series repository.</value>
    public IList<ISeries> SeriesRepository { get; private set; }

    //...
}

//8<-----------------------------

    /// <summary>
    /// Gets the series of the specified type.
    /// </summary>
    public IOrderedEnumerable<T> Series<T>() where T : ISeries
    {
        return ViewModel.SeriesRepository.OfType<T>(); //compiler ERROR
    }

编译器告诉我:

Error   14  Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<T>' to 'System.Linq.IOrderedEnumerable<T>'. An explicit conversion exists (are you missing a cast?) ...

我如何支持这样的场景?为什么 List 不实现 IOrderedEnumerable?

EDIT:澄清我的意图:我只是想在接口级别声明我的存储库有一个顺序,即使它没有由键明确指定。 因此,.ThenBy等人。不应添加新订单,因为已经有一个 - 我自己的一个,也是唯一一个。 :-)。我明白了,就像这样,我怀念的意图.ThenBy.


How could List<T>实施IOrderedEnumerable<T>?它必须提供一种创建随后的订购...这是什么意思?

考虑一下:

var names = new List<string> { "Jon", "Holly", "Ash", "Robin", "William" };
var ordered = names.ThenBy(x => x.Length);

那有什么意思?没有primary排序顺序(如果我使用的话就会有names.OrderBy(x => x)),所以不可能强加中学排序。

我建议你try创建您自己的实现IOrderedEnumerable<T>基于一个List<T>- 当您尝试实施CreateOrderedEnumerable方法,我想你会明白为什么它不合适。你可能会发现我的Edulinq 博客文章IOrderedEnumerable<T> http://codeblog.jonskeet.uk/2011/01/04/reimplementing-linq-to-objects-part-26a-iorderedenumerable/ useful.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 List 不实现 IOrderedEnumerable? 的相关文章

随机推荐

  • vue Express上传多个文件到亚马逊s3

    我需要有关如何在亚马逊 S3 上上传多个文件图像的帮助 我假设我有三个这样的输入
  • 聚合实体框架中的 List Code First

    我最初在聚合中使用 Enum 这对我来说工作得很好 但现在当我将属性更改为 List 时 我发现这些值没有在数据库中保存或检索 我认为 CodeFirst 会创建一个单独的表并映射其中的行 但事实并非如此 值既不被存储也不被检索 Agg p
  • 在不同数量的行上重复计算 fft

    我有兴趣计算矩阵第一行的 fft 但我事先不知道需要多少行 我需要重复执行此操作 但需要转换的行数可能会改变 我将用下面的例子来说明 假设我有一个 100 x 128 的数组 如果我在每一行上计划一维 fft FFTW 会生成以下计划 df
  • 不使用 GUI 发送电子邮件 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有任何框架可以让我在不通过 GUI 的情况下发送电子邮件 Add this https githu
  • 需要来自 swagger codegen 的注释

    我需要一种方法来注释我的 openapi 3 规范 以便 swagger codegen 向我的 java 类添加注释 例如 JsonIgnoreProperties ignoreUnknown true 那可能吗 TIA 看来您可以利用胡
  • 通过 WebJobs 重新排队或删除 Azure 存储队列中的消息

    我希望有人能够澄清有关 Azure 存储队列及其与 WebJobs 交互的一些事情 要执行重复的后台任务 即添加到队列一次 然后以设定的时间间隔重复 是否有一种方法可以更新 QueueTrigger 函数中传递的相同消息 以便可以扩展其租约
  • 如何使用OpenCV的重映射功能?

    这是 remap 最简单的测试用例 import cv2 import numpy as np inimg np arange 2 2 reshape 2 2 astype np float32 inmap np array 0 0 0 1
  • 制作独特数组的最快方法是什么?

    我有以下情况 我有一大堆随机字符串 应尽快使该数组变得唯一 现在通过一些基准测试我发现 ruby 的 uniq 相当慢 require digest require benchmark make a nice random array of
  • wordpress 上的 $(window).height() 数量太大

    我正在创建工具提示的动态位置 我先在 jsfiddle 上测试了代码 然后再将我的代码放入我的网站 在本地主机上使用 wordpress 构建 在 jsfiddle 上我的脚本可以工作 但是当我将代码放入我的网站时 它不起作用 在 Chro
  • 将数据传递到 Laravel 视图

    刚刚进入 MVC 框架 我尝试使用刀片模板引擎将数据传递到我的视图 这是我的路线文件 Route get PagesController index 我的页面控制器
  • 绘图上可缩放、可拖动的框可以选择数据

    这是设置 我有一个数据图形图 我试图找出是否可以尝试在图形上放置一个可以移动和更改宽度的框 并返回一些值 例如曲线下的百分比和面积 它看起来像这样 关于从哪里开始有什么建议吗 我的感觉是 使用更多 GUI 界面而不是标准绘图可能是可行的 我
  • 在自定义类上创建字典样式的集合初始值设定项[重复]

    这个问题在这里已经有答案了 可能的重复 自定义集合初始化器 https stackoverflow com questions 2495791 custom collection initializers 我有一个简单的 Pair 类 pu
  • 如何增加 Tensorflow 中的变量?

    当尝试在 Tensorflow 中使用主管时 我意识到 您的训练操作负责增加全局步值 参考 https github com tensorflow tensorflow blob master tensorflow g3doc how to
  • 如何在 MVC 4 中将 List 传递给控制器

    我有 2 个模型 问题和答案 如下所示 我想将列表模型发送到视图 并且在提交表单时 我将列表模型提交到控制器 但在 Action UpdateQuestion 中只能获取问题列表 但只能获取问题列表答案是否定的 您能解释一下并告诉我如何在提
  • 在Python中迭代图像所有像素的最快方法

    我已经将图像读取为数组 import numpy as np from scipy import misc face1 misc imread face1 jpg 面 1 的尺寸为 288 352 3 我需要迭代每个像素并填充y在训练集中我
  • 如何在运算符处分割字符串

    我正在用 Java 创建一个计算器 如果我让用户输入一个字符串 例如 7 4 18 3 2 到目前为止 我必须让用户在每个数字或运算符之间输入一个空格 我如何从给定的字符串创建一个数组 其中字符串按数字或运算符拆分 因此在这种情况下数组将是
  • 错误:警告:从空值创建默认对象

    我第一次发帖 我希望有人能帮助我解决周三出现在我的网站上的这个错误 我不知道如何纠正它 因为我从未接触过 php 文件 如果我能得到一些帮助 我将非常感激 出现错误的网站位于页面顶部 http www inkedkoidesigns ca
  • 如何安装 QtWebKit 插件

    我正在运行 Qt 4 5 商业快照 并希望在我的应用程序中使用我下载的插件 它是一个 so 文件 QWebView 我需要放置此文件的特定位置吗 我可以使用QWebPluginFactory 我假设这里的插件是 NPAPI 插件 例如 Fl
  • 无法创建 SSL/TLS 安全通道 - 问题可能出在代理服务器上吗?

    我有一个 C 应用程序 它调用使用证书进行身份验证的 Web 服务方法 该代码有效 因为当它安装在服务器 A 没有代理 上时 它会进行身份验证 当我在客户端站点的服务器 B 上安装代码时 它安装在代理后面 我确实尝试了几乎所有方法 但我不断
  • 为什么 List 不实现 IOrderedEnumerable

    我想使用有序枚举 并使用接口作为返回类型而不是具体类型 我需要返回一组有序的对象 但是 当使用IList