【问题标题】:Can I set a property value with Reflection?我可以使用反射设置属性值吗?
【发布时间】:2011-10-10 21:16:50
【问题描述】:

我知道我的 C# 类中的属性名称。是否可以使用反射来设置这个属性的值?

例如,假设我知道一个属性的名称是string propertyName = "first_name";。实际上存在一个名为first_name 的属性。我可以用这个字符串设置吗?

【问题讨论】:

  • 是静态属性吗?
  • 我会将问题重命名为:“是否可以使用反射来设置属性的值?”答案是:是的,有可能。你可以做到的。
  • @Snowbear 它不允许我在标题中使用问题,并且需要 15 个字符。如果您不喜欢标题,请更改它。
  • @BoltClock 不,它不是静态属性

标签: c# reflection


【解决方案1】:

是的,您可以使用反射 - 只需使用 Type.GetProperty 获取它(必要时指定绑定标志),然后适当地调用 SetValue。示例:

using System;

class Person
{
    public string Name { get; set; }
}

class Test
{
    static void Main(string[] arg)
    {
        Person p = new Person();
        var property = typeof(Person).GetProperty("Name");
        property.SetValue(p, "Jon", null);
        Console.WriteLine(p.Name); // Jon
    }
}

如果它不是公共属性,则需要在 GetProperty 调用中指定 BindingFlags.NonPublic | BindingFlags.Instance

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多