使用 LINQ 简化 foreach 循环(在每次迭代中选择两个对象)

2024-04-11

给定以下接口和两个类:

public interface IMyObj
{
    int Id { get; set; }
}

public class MyObj1 : IMyObj
{
    public MyObj1(int id) { Id = id; }
    public int Id { get; set; }
    public override string ToString() => $"{GetType().Name} : {Id}";
}

public class MyObj2 : IMyObj
{
    public MyObj2(int id) { Id = id; }
    public int Id { get; set; }
    public override string ToString() => $"{GetType().Name} : {Id}";
}

并给出使用它们的以下逻辑:

var numbers = new[] { 1, 5, 11, 17 };

var list = new List<IMyObj>();

foreach (var n in numbers)
{
    // I'd like to simplify this part with LINQ...
    list.Add(new MyObj1(n));
    list.Add(new MyObj2(n));
}

Assert.AreEqual(8, list.Count);

测试通过,我看到了里面list正是我想要的 - 每个数字两个对象实例:

Count = 8
  [0]: {MyObj1 : 1}
  [1]: {MyObj2 : 1}
  [2]: {MyObj1 : 5}
  [3]: {MyObj2 : 5}
  [4]: {MyObj1 : 11}
  [5]: {MyObj2 : 11}
  [6]: {MyObj1 : 17}
  [7]: {MyObj2 : 17}

我的问题是,如何简化foreach使用 LINQ 循环逻辑?我想可能有一种优雅的方式来做同样的事情SelectMany https://msdn.microsoft.com/en-us/library/bb534336(v=vs.110).aspx也许是运算符,但我无法产生相同的输出。


SelectMany确实是你想要的:

var list = numbers.SelectMany(n => new IMyObj[] { new MyObj1(n), new MyObj2(n) })
                  .ToList();

换句话说,对于每个数字,创建一个二元素数组,然后使用以下方法将其展平SelectMany.

The new IMyObj[]部分是必需的而不仅仅是new[]因为类型推断无法判断您想要什么数组类型。如果类型相同,您可以执行以下操作:

var list = numbers.SelectMany(n => new[] { new MyObj(n), new MyObj(n) })
                  .ToList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LINQ 简化 foreach 循环(在每次迭代中选择两个对象) 的相关文章

  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • C# 和 Javascript SHA256 哈希的代码示例

    我有一个在服务器端运行的 C 算法 它对 Base64 编码的字符串进行哈希处理 byte salt Convert FromBase64String serverSalt Step 1 SHA256Managed sha256 new S
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • for循环中计数器变量的范围是多少?

    我在 Visual Studio 2008 中收到以下错误 Error 1 A local variable named i cannot be declared in this scope because it would give a
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 32 位到 64 位内联汇编移植

    我有一段 C 代码 在 GNU Linux 环境下用 g 编译 它加载一个函数指针 它如何执行并不重要 使用一些内联汇编将一些参数推送到堆栈上 然后调用该函数 代码如下 unsigned long stack 1 23 33 43 save
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • ASP.NET MVC 6 (ASP.NET 5) 中的 Application_PreSendRequestHeaders 和 Application_BeginRequest

    如何在 ASP NET 5 MVC6 中使用这些方法 在 MVC5 中 我在 Global asax 中使用了它 现在呢 也许是入门班 protected void Application PreSendRequestHeaders obj

随机推荐

  • 通过 Android Intent 共享位图

    在我的 Android 应用程序中 我有一个位图 比如 b 和一个按钮 现在 当我单击按钮时 我想共享位图 我正在使用下面的代码onClick 为了达成这个 Intent intent new Intent Intent ACTION SE
  • Bash 脚本 - 自动填写答案

    我有一个 bash 脚本 其中有几个问题 是否可以自动填写答案 script sh install 按顺序回答y 2 1 n n 我怎样才能在 bash 中做到这一点 编辑 是否可以只通过第一个答案 echo y install 并让用户选
  • C++ - 重复使用 istringstream

    我有一个代码用于读取在线存储的浮点数文件 如下所示 3 34 2 3409 1 0001 1 1 我想使用 istringstream 阅读它们 但它并不像我预期的那样工作 string row string strNum istrings
  • ios8 中 iphone 的 UIPopoverController 显示白屏

    在 iphone 中使用 ios8 0 以下的 UIPopovercontroller 可以正常使用此代码 但在ios8中却显示白屏 Code pickerController UIViewController alloc init UIV
  • CSS 伪元素上的事件侦听器,例如 ::after 和 ::before?

    我有一个div带有 CSS 伪元素的元素 before用作关闭按钮 而不是使用实际按钮 如何应用事件侦听器only伪元素 HTML div div CSS box before background image url close png
  • 在 Eclipse 中更改概览标尺颜色

    如何更改概览规则背景Eclipse 3 4 0 I20080617 2000 中的颜色 编辑窗口右侧的垂直条 带有一些注释 常规 gt 编辑器 gt 文本编辑器 gt 注释仅允许更改标记本身的颜色 而不是整个栏的背景 看来我的网络搜索能力越
  • Laravel afterFind 回调事件

    laravel 中是否有像 cakePHP 中那样的 afterFind 模型事件 以便我可以在任何搜索查询后格式化数据 或任何其他方式来做到这一点 Thanks 它不是一个事件 而是一个可以在模型中设置的变异器 您只需在模型中创建一个名为
  • 导出 eclipse 可部署插件和片段时出错

    我有一个 Eclipse 插件在 Eclipse 环境中运行良好 我想将其导出为 jar 文件 因此我选择了 导出 gt 可部署插件和片段 我可以得到一个jar文件 但是报告了一个错误 打开日志文件 它报告我有 1242 个问题 191 个
  • 从顶部裁剪图像

    通过设置从底部 左侧或右侧裁剪图像非常容易overflow hidden图像容器的属性 div class img container img class img src img jpg div 有没有办法从顶部裁剪图像 如果正在调整窗口大
  • 如何为react-big-calendar(fullcalendar.js)设置momentLocalizer(moment.js)?

    我在用着反应大日历 https github com intljusticemission react big calendar并需要帮助来实现所需的本地化 来自 git 的示例 import BigCalendar from react
  • 加载巨大的 XML 文件并处理 MemoryError

    我有一个非常大的 XML 文件 准确地说是 20GB 是的 我需要全部 当我尝试加载该文件时 收到此错误 Python 23358 malloc mmap size 140736680968192 failed error code 12
  • 无法在 iOS 6 中以编程方式安装 ipa 文件

    我使用 MobileInstallationInstall 在越狱 iOS 中安装 ipa 文件 在iOS5中运行良好 但在iOS6中失败 我检查了日志并发现以下内容 需要有一个名为 com apple private mobileinst
  • C 易失性变量和高速缓存

    缓存是由缓存硬件对处理器透明地控制的 因此如果我们在C程序中使用易失性变量 如何保证我的程序每次都从指定的实际内存地址读取数据而不是缓存 我的理解是 Volatile 关键字告诉编译器不应优化变量引用 而应按照代码中的编程方式读取变量引用
  • MongooseError:Model.findOne() 不再接受回调

    考虑 app get posts postId function req res const requestedPostId req params postId Post findOne id requestedPostId functio
  • 检查一个值集合是否包含另一个值集合

    假设我有两个集合 如下所示 收藏1 A1 A1 M1 M2 收藏2 M2 M3 M1 A1 A1 A2 所有值都是字符串值 我想知道 Collection1 中的所有元素是否都包含在 Collection2 中 但我不能保证顺序 并且一个集
  • 如何获取Google服务帐户访问令牌javascript

    我正在尝试为我的网站设置一个分析仪表板 以便我的领导层查看网站使用情况 我不希望他们必须拥有谷歌帐户或单独添加他们才能看到结果 我已经设置了服务帐户和 OAuth2 访问权限 我找到的所有教程都显示这样的代码 gapi analytics
  • 如何通过宏检查是否使用了 GNU libstdc++?

    如何通过宏检查是否使用了 GNU GCC libstdc STL 实现 那可能吗 我希望它能在 GCC 和 Clang 中工作 对于 Linux 上的 C 11 它可能是唯一的选择 或者是吗 据我所知 STLport 不支持 C 11 在
  • AWS Chime - 将视频分配给图块无法按预期工作

    I have an AWS Chime meeting setup in this fashion with 5 video tiles video tile 0 through video tile 4 当会议建立时 观察者回调audio
  • Android 版 usbmon

    我想分析我的设备的 USB 通信 SGS4 我到处都看到需要配置 usbmon 并将其编译到内核中 Afaik 这个模块没有内置在android linux系统中 我在编译内核方面没有太多经验 但如果有必要 我会这样做 您能说出这样做的步骤
  • 使用 LINQ 简化 foreach 循环(在每次迭代中选择两个对象)

    给定以下接口和两个类 public interface IMyObj int Id get set public class MyObj1 IMyObj public MyObj1 int id Id id public int Id ge