C#code-duplication:属性列表处理

时间:2013-11-01 12:38:21

标签: c# code-duplication

我有一个功能,可以浏览对象列表(类型,国籍等)。它必须返回添加特定属性(每个对象不同)。我无法修改这些列出的对象的代码(在DDL中)。

以下是我现在要做的一些例子:

    private String formatListString(List<Genre> list)
    {
        for (...)
        {
            str += list[i].Value;
            ...
        }
        return str;
    }

    private String formatListString(List<Nationality> list)
    {
        for (...)
        {
            str += list[i].Code;
            ...
        }
        return str;
    }

如何在单一功能中制作? 也许在函数中添加一个参数来指定要使用的属性?

感谢。

2 个答案:

答案 0 :(得分:3)

return String.Join("...", list.Select(o => o.Code));

如果这对您不起作用,您可以使用泛型和lambda:

private string FormatList<T>(IEnumerable<T> list, Func<T, String> prop)

答案 1 :(得分:1)

您可以传入lambda来选择所需的属性:

private String formatListString<T>(List<T> list, Func<T, string> selector)
    {
        for (...)
        {
            str += selector(list[i]);
            ...
        }
        return str;
    }

请致电如下:

var genres = formatListString(genreList, x => x.Value);
var nationalities = formatListString(nationalityList, x => x.Code);

可以从调用中自动推断泛型类型参数,因此您不必明确指定它(即写formatListString<Genre>(genreList, x => x.Value);