1

可能重复:
使用 C# 中的反射从字符串中获取属性值

我正在尝试编写一个通用方法,以允许我在迭代集合时指定要检索的属性:

private void WriteStatisticsRow<T>(ICollection<InstitutionStatistics> stats, 
    ICollection<short> years, 
    string statisticsName, 
    string rangeName) where T : struct
{
    Console.WriteLine(statisticsName);

    foreach (short yr in years)
    {
        var stat = stats.SingleOrDefault(s => s.InformationYear == yr);

        if (stat != null)
        {
            if (typeof(T) == typeof(double))
            {
                Console.WriteLine(value, format: "0.0");
            }
            else
            {
                Console.WriteLine(value);
            }
        }
        else
        {
            Console.WriteLin(string.Empty);
        }
    }
}

基本上,我想遍历stats集合,并写出指定属性的值。我假设我可以使用 LINQ 表达式来做到这一点,但我不知道怎么做!

4

3 回答 3

2

使用 IEnumerable<>.Select():

var props = collection.Select(x => x.Property);

foreach (var p in props)
{
  Console.WriteLine(p.ToString());
}
于 2012-09-25T09:51:44.340 回答
1

Gets you the values in order of year:

foreach (double value in
    from stat in stats
    where years.Contains(stat.InformationYear)
    orderby stat.InformationYear
    select stat.Property)
{
    Console.WriteLine(value);
}
于 2012-09-25T10:03:59.367 回答
0

如果我理解你的问题,你需要写出 InformationYear 属性的值,所以你的 LINQ 表达式如下:

  foreach (double value in
        from stat in stats
        select stat.InformationYear)
    {
        Console.WriteLine(value);
    }
于 2012-09-25T10:14:06.107 回答