c# - 以强类型方式使用对象的属性名称

标签 c# .net reflection

有没有办法(在 c# .Net 4.0 中)以强类型方式提供对象属性名称? 例如,如果我们有一个对象 Person

Public class Person{
    public string Name { get; set; }
    public int Age { get; set; }
    }

我想将参数名称、年龄属性名称发送到其他方法,但不是字符串而是强类型:

SomeMethodThatWantToKnowKeys(Person.Name,Person.Age);

我想要实现的是,如果有人更改属性名称,他将不得不更改他发送到“SomeMethodThatWantToKnowKeys”的属性名称。 也许反射(reflection)? 更好的方法是不更新对象本身或创建它的实例。

最佳答案

如果我明白你想要什么,你可以使用 expressions :

void SomeMethod<T>(Expression<Func<T>> expr)
{
    var memberExpr = expr.Body as MemberExpression;
    Console.WriteLine("{0}: {1}", memberExpr.Member.Name, expr.Compile()());
}

var person = new { Name = "John Doe", Age = 10 };
SomeMethod(() => person.Name); // prints "Name: John Doe"
SomeMethod(() => person.Age);  // prints "Age: 10"

关于c# - 以强类型方式使用对象的属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19966167/

相关文章:

c# - Entity Framework 核心 : Cannot add migrations: No parameterless constructor

c# - 用 C# 编写脚本?

.net - Bash `set -e` 的 Powershell 模拟

c# - 使用 C# Microsoft.Azure.Management.Fluent 从 Azure 检索应用服务列表会导致 'this.Client.SubscriptionId' 不能为空

c# - 身份密码重置 token 无效

java - 如何动态类型转换java中反射API的newInstance()方法创建的对象

reflection - 从 nil 指针定义的类型创建一个新的结构体

c# - 将对象转换为其他对象的类型

c# - 无法理解 C# 中的小数

java - 为什么依赖反射是不可取的?