C# 在这种情况下,如何避免重复代码?

C# 在这种情况下,如何避免重复代码?,c#,oop,C#,Oop,我构建了一个javascript脚本来创建动态表单,我正在为用户创建的每个部分创建一个验证,该验证从重复的问题中更新标题。所以,我建立了一个方法。用户可以在创建包含下拉框、复选框的节之间进行选择 所以,我必须用同样的代码创建6个方法,我只是在更改列表的类型。创建泛型方法是否需要等待来防止这种情况 private static int CheckDuplicatedDropdownQuestions(Template template, int i, List<string>

我构建了一个javascript脚本来创建动态表单,我正在为用户创建的每个部分创建一个验证,该验证从重复的问题中更新标题。所以,我建立了一个方法。用户可以在创建包含下拉框、复选框的节之间进行选择

所以,我必须用同样的代码创建6个方法,我只是在更改列表的类型。创建泛型方法是否需要等待来防止这种情况

    private static int CheckDuplicatedDropdownQuestions(Template template, int i, List<string> collectQuestions)
    {
        foreach (var field in template.Fields.Dropdown)
        {
            if (!collectQuestions.Contains(field.Title))
            {
                collectQuestions.Add(field.Title);
            }
            else
            {
                field.Title = field.Title + " (" + i + ")";
                i++;
            }
        }

        return i;
    }
    ...
private static int CheckDuplicatedDropdownQuestions(模板模板、int i、列表问题)
{
foreach(template.Fields.Dropdown中的变量字段)
{
如果(!collectQuestions.Contains(field.Title))
{
收集问题。添加(字段。标题);
}
其他的
{
field.Title=field.Title+”(“+i+”);
i++;
}
}
返回i;
}
...

尝试为foreach零件创建新方法

     private static int CheckDuplicatedDropdownQuestions(Template template, int i, 
    List<string> collectQuestions,string field)
    {
        if(field=="Dropdown")
        {
           NewMethod(template.Fields.Dropdown,ref i);
        }
        else if(field=="CheckBox")
        {
           NewMethod(template.Fields.CheckBox,ref i);
        }

        return i;
    }

    private static void NewMethod(var FieldType,ref int i)
    {
        foreach (var field in FieldType)
        {
            if (!collectQuestions.Contains(field.Title))
            {
                collectQuestions.Add(field.Title);
            }
            else
            {
                field.Title = field.Title + " (" + i + ")";
                i++;
            }
        }
    }
private static int CheckDuplicatedDropdownQuestions(模板模板,int i,
列表问题,字符串字段)
{
如果(字段==“下拉列表”)
{
NewMethod(模板.字段.下拉列表,参考i);
}
else if(字段==“复选框”)
{
NewMethod(模板.字段.复选框,参考i);
}
返回i;
}
私有静态void NewMethod(var FieldType,ref int i)
{
foreach(FieldType中的变量字段)
{
如果(!collectQuestions.Contains(field.Title))
{
收集问题。添加(字段。标题);
}
其他的
{
field.Title=field.Title+”(“+i+”);
i++;
}
}
}

你说我只是在更改列表的类型是什么意思?您要传递的列表?你怎么改变它?你能添加一个复制的方法,这样我们就可以更清楚地看到你想做什么吗?也许你可以添加另一个复制函数的示例,这样我们就可以同时看到它们了。我还没有编译它。我的想法是分享逻辑。