c# - 分解骨架处理 (C#)

标签 c# language-features

C# 中是否存在允许抽象循环(或其他)“外部”处理的语言结构?

我有一个相当直接的嵌套结构(例如整数列表的列表)以及通过每个最低级别的整数“旋转”的代码。代码并不复杂(也不是特别长),但我有多个函数需要独立地与最低级别“交互”,并且只是复制循环骨架来执行此操作。对我来说似乎是一种浪费。

foreach (list in outerlists)
    ... a few random lines of structure traversing
    foreach (int in list)
        do something simple to int

这显然是一个按比例缩小的示例,但我的现实世界是相似的 - 我最终重复复制外部处理以更改相对较少的内部工作线。

我的暂定解决方案是创建一个包含循环的“处理”方法,并采用枚举(或其他)参数来告诉它要调用哪个内部函数。然后在“做某事”级别放置一个 switch 语句来调用正确的子函数。

我走在正确的道路上还是有更简单的方法?我可以使用函数指针的概念摆脱 switch 语句(只需将函数指针传递到处理循环并在执行某些操作级别调用它),但不知道这在 C# 中是否可行?

最佳答案

(详细阐述 Oded 的回答)

假设您总是希望以相同的方式进行迭代,并且复制粘贴的 foreach 之间唯一的不同是最里面的嵌套 block ,那么您可以将所有循环封装到一个方法中:

public void DoStuffOnInnerElements (Action<int> theStuffToDo)
{
    foreach (var subList in outerLists)
    {
        // a few random lines here...
        foreach (int item in subList)
        {
            theStuffToDo(item);
        }
    }
}

操作可以是 C# 接受的任何格式 delegates (委托(delegate)是 C# 对 C/C++ 函数指针的回答):

// Lambdas
DoStuffOnInnerElements((i) => Console.WriteLine(i));
// Methods
DoStuffOnInnerElements(My_Void_xxx_Int_Method);
DoStuffOnInnerElements(new Action<int>(Console.WriteLine));
// anonymous delegates
DoStuffOnInnerElements(delegate(int i) { Console.WriteLine(i); });
// etc.

关于c# - 分解骨架处理 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441013/

相关文章:

c# - C# 的 Nunit 和代码覆盖率

c# - 单语句条件 - 为什么该模式不用于其他代码块?

c# - 哪些 C# 语言功能可以帮助您减少代码行数并提高可读性?

c - 从高级语言过渡到 C 的最佳方法是什么?

java - 在并发编程方面,Scala 比 Java 有什么优势?

c# - 以编程方式添加数据注释

c# - 从联系人全名中删除头衔

c# - 将数组传递给采用参数 object[] 或 IEnumerable<T> 的函数

windows-xp - 如何从 cmd 中找到当前的 Windows 语言?

language-agnostic - 是否应该从编程语言中删除(非接口(interface)类型的)继承?