1

我有一个函数可以浏览对象列表(流派、国籍等)。它必须返回特定属性的添加(每个对象不同)。我无法修改这些列出的对象的代码(在 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;
    }

我怎样才能使它成为一个单一的功能?也许在函数中添加一个参数来指定要使用的属性?

谢谢。

4

2 回答 2

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

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

private string FormatList<T>(IEnumerable<T> list, Func<T, String> prop)
于 2013-11-01T12:39:54.053 回答
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);

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

于 2013-11-01T12:42:38.017 回答