在C#中访问匿名类型的属性?

时间:2013-07-19 08:59:45

标签: c# anonymous-types

假设我为名字和出生日期为属性的人创建了一个匿名类型:

var person = new{ Name = "Mike", BirthDate = new DateTime(1990, 9, 2) };

然后,决定添加一个返回人的年龄的方法。

var person = new { Name = "Mike", 
                   BirthDate = new DateTime(1990, 9, 2), 
                   GetAge = new Func<int>(() => { return /* What? */; }) };

如何访问属性BirthDate以便我可以计算年龄?我尝试使用this,但当然没有用。

1 个答案:

答案 0 :(得分:4)

你做不到。您必须创建一个Person类才能具有此功能:

    class Person {
        public string Name { get; set; }
        public DateTime BirthDate { get; set; }
        public TimeSpan Age {
            get {
                // calculate Age
            }
        }
    }

    var person = new Person {
            Name = "Mike",
            BirthDate = new DateTime(1990, 9, 2))
    };

修改:另一种选择是为DateTime创建extension method

    public static TimeSpan GetAge(this DateTime date) {
        // calculate Age
    }

    var person = new {
            Name = "Mike",
            BirthDate = new DateTime(1990, 9, 2))
    };

    TimeSpan age = person.BirthDate.GetAge();