Skip to main content
 首页 » 编程设计

c#之迭代两个集合的单个 foreach 语句

2024年02月01日28EasonJim

所以我有两个集合 - 一个 int? , 和 string 之一.

我想对两者进行迭代,并且我有一大段代码要对它们执行。但是,存在一些细微差别。如果值为 int? ,需要一些额外的代码。

我正在努力遵循 DRY 原则,所以我不想重写我的代码。我也不想将它放在外部函数中,因为它已经从我的 MVC 应用程序 Controller 代码中抽象出来,我不希望它变得不必要地复杂。

有没有办法在c#中做这样的事情

foreach(object o in (ints && strings)) 
{ 
    if(o is int) 
    { 
        // do in specific stuff 
    } 
 
    // do all my generic stuff.     
} 

编辑: 实际上是 int?不是 int .当我尝试将它们组合成 List<object> 类型的通用列表时我得到一个错误

请您参考如下方法:

有了这个特殊的结构,您可以使用 Concat 将它们组合成一个大对象集合,例如:

foreach (object o in ints.Cast<object>().Concat(strings.Cast<object>())) 

但我可能会建议将您的功能分解为一个方法,并运行两个循环:

foreach (int i in ints) { 
    DoSomething(i); 
    DoSomethingWithInt(i); 
} 
 
foreach (string s in strings) { 
    DoSomething(s); 
    DoSomethingWithString(s); 
} 

在我看来,这将使事情保持整洁并更具可读性。