用通用代码替换Switch(.Net)

时间:2015-07-30 20:37:26

标签: c# .net switch-statement

我必须使用我的类创建XML结构。我的类实例中有一些重复的结构以及其他元素。如下

<MainBody>
<Leg1>
<aa>--</aa>
<bb>--</bb>
</Leg1>
<Leg2>
<aa>--</aa>
<bb>--</bb>
</Leg2>
<Leg3>
<aa>--</aa>
<bb>--</bb>
</Leg3>
</Mainbody>

为了得到这个结构,我写了像

这样的代码
    foreach (var leg in LegList)
                {
                    switch (legNum)
                    {
                        case 1:
                            Mainbody.Leg1 = leg;
                            AddConditionSwith("Leg1", true);
                             break;
                        case 2:
                            Mainbody.Leg2 = leg;
                            AddConditionSwith("Leg2", true);
                             break;
                        case 3:
                            Mainbody.Leg3 = leg;
                            AddConditionSwith("Leg3",true);
                            break;
                    }                
                }

有没有办法用更通用的代码替换Switch。我需要有相同的xml结构。无法改变它。因此,值和名称将会改变,但分配逻辑仍然相同。

1 个答案:

答案 0 :(得分:0)

你至少可以像以下一样将开关拉出for循环:

        Action<Leg> assigner;
        string name;


        switch (legNum)
        {
            case 1:
                assigner = leg => Mainbody.Leg1 = leg;
                name = "Leg1";
                break;
            case 2:
                assigner = leg => Mainbody.Leg2 = leg;
                name = "Leg2";
                break;
            case 3:
                assigner = leg => Mainbody.Leg3 = leg;
                name = "Leg3";
                break;
        }                

        foreach (var leg in LegList)
        {
            assigner(leg);
            AddConditionSwith(name, true);
        }                   

理想情况下,您需要更改对象模型,因此Leg1Leg2Leg3是一组腿而不是单独的属性。你仍然可以从中生成相同的XML,它的完成方式略有不同。