除了已经提供的答案之外,c# 还允许匿名类型并支持动态类型。因此,以您给出的示例为例,在 c# 中您可以执行以下操作:
匿名类型:
var person = new {
fname = "first",
lname = "last",
id = "123"
};
Console.WriteLine(person.lname);
动态类型:
dynamic anotherPerson = new System.Dynamic.ExpandoObject();
anotherPerson.FirstName = person.lname;
Console.WriteLine(anotherPerson.FirstName);
anotherPerson.PrintPerson = (Action<dynamic>)((p => Console.WriteLine("[{0}] {1}. {2}", p.id, p.lname, p.fname)));
anotherPerson.PrintPerson(person);
这些例子有点做作。在某些特定情况下,它们会派上用场。但是,除非您真的需要它,否则最好创建强类型类。它们为您提供了一个可以由编译器验证的公共接口契约。此外,在大多数情况下,动态类型的运行时成本会大大提高。