首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#如何在循环中间避免代码重复

C#如何在循环中间避免代码重复
EN

Stack Overflow用户
提问于 2022-11-11 09:24:06
回答 1查看 72关注 0票数 2

目前,我有两个这样的功能

代码语言:javascript
复制
GenerateDocumentA(DocumentA docA)
{
    OpenDocumentCode();
    for (int i = 0; i < pageCount; i ++)
    {
        // some common per page code, var page = xxx
        SpecificCodeA(docA, page, i);
    }
    CloseDocumentCode();
}

GenerateDocumentB(DocumentB docB)
{
    OpenDocumentCode();
    for (int i = 0; i < pageCount; i ++)
    {
        // some common per page code, var page = xxx
        SpecificCodeB(docB, page, i);
    }
    CloseDocumentCode();
}

我试着去复制代码,看到了这个答案。

https://codereview.stackexchange.com/questions/18379/how-to-remove-code-duplication-that-difference-only-a-few-lines

并且面临一个我不知道如何将变量从两个地方传递到SpecificCode()的问题。

代码语言:javascript
复制
GenerateDocument(Action SpecificCode)
{
    OpenDocumentCode();
    for (int i = 0; i < pageCount; i ++)
    {
        // some common per page code, var page = xxx
        SpecificCode(); // How to pass the current page / page index
    }
    CloseDocumentCode();
}

GenerateDocumentA(DocumentA docA)
{
    GenerateDocument( () => { } ) // how to also pass the DocumentA docA
}

我的问题是:如何定义SpecificCode()并将其传递给GenerateDocument()公共代码,因为知道SpecificCode()GenerateDocumentA()GenerateDocument()中的变量作为参数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-11 09:34:45

代码语言:javascript
复制
GenerateDocument(Action<int,int> todo)
{
    OpenDocumentCode();
    for (int i = 0; i < pageCount; i ++)
    {
        // some common per page code, var page = xxx
        todo(page,i);
    }
    CloseDocumentCode();
}

用例:

代码语言:javascript
复制
DocumentA docA;
GenerateDocument((int page, int i)=>
{
    SpecificCodeA(docA, page, i);
});

DocumentB docB;
GenerateDocument((int page, int i)=>
{
    SpecificCodeB(docB, page, i);
});
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74400382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档