c# - 如何迭代类字段并设置属性

2024-02-17

我不确定这是否可行,但我想迭代一个类并设置字段成员属性,而不显式引用字段对象:

public class Employee
{
  public Person _person = new Person();

  public void DynamicallySetPersonProperty()
  {
    MemberInfo[] members = this.GetType().GetMembers();

    foreach (MemberInfo member in members.Where(a => a.Name == "_person"))
    //get the _person field
    {

      Type type = member.GetType();
      PropertyInfo prop = type.GetProperty("Name"); //good, this works, now to set a value for it

      //this line does not work - the error is "property set method not found"
      prop.SetValue(member, "new name", null);
    }
  }
}


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

在我标记为答案的答案中,您需要添加:

  public static bool IsNullOrEmpty(this string source)
  {
    return (source == null || source.Length > 0) ? true : false;
  }

这是一个完整的工作示例:

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

class Program
{
    static void PropertySet(object p, string propName, object value)
    {
        Type t = p.GetType();
        PropertyInfo info = t.GetProperty(propName);
        if (info == null)
            return;
        if (!info.CanWrite)
            return;
        info.SetValue(p, value, null);
    }

    static void PropertySetLooping(object p, string propName, object value)
    {
        Type t = p.GetType();
        foreach (PropertyInfo info in t.GetProperties())
        {
            if (info.Name == propName && info.CanWrite)
            {
                info.SetValue(p, value, null);
            }
        }
    }

    static void Main(string[] args)
    {
        Person p = new Person();

        PropertySet(p, "Name", "Michael Ellis");
        Console.WriteLine(p.Name);
        PropertySetLooping(p, "Name", "Nigel Mellish");
        Console.WriteLine(p.Name);
    }
}

编辑:添加了一个循环变体,以便您可以了解如何循环属性信息对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c# - 如何迭代类字段并设置属性 的相关文章

随机推荐

  • Java EE 5 依赖注入?

    既然Java EE 5没有CDI 那么DI在这里是如何工作的呢 EJB可以注入吗 EJB在非 EJB 类中 可以EntityManager被注射 PersistenceContext在非 EJB 类中 容器管理的非资源本地的EntityMa
  • DotNetNuke 5.6.2 - 社区版用户可以使用 DNNRadMenu 吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 DotNetNuke 社区版中 DNNRadMenu 的使用存在不确定性 据我了解 从 DNN 5 6 2 开始 社区版用户可以使用 和修
  • 如何在 Spring boot 应用程序的嵌入式 untertow 中禁用 HTTP TRACE

    我的目标是为我的 Spring Boot 应用程序禁用 HTTP TRACE 方法 该应用程序使用嵌入式 undertow 最好进行有效的 yaml 更改 如果没有 更改代码也可以 理想情况下 最终结果应该是 4xx HTTP 响应代码 并
  • Window.popup 在浏览器中居中对齐

    我有一个动态生成的 Div 数据 我想在某个事件触发后在弹出窗口中打开该 div 数据 我的代码已经完成了 但是当弹出窗口在我的浏览器中打开时 它没有居中对齐 它出现在角落里 我的代码 var left window screen widt
  • Netstream 和step() 或seek()?

    我正在做一个 AS3 项目 正在播放视频 H264 由于某些特殊原因 我想去某个职位 a 我尝试使用 NetStream seek 在那里它只进入关键帧 在我当前的设置中 这意味着 我可以每 1 秒找到一个位置 为了获得更好的分辨率 我必须
  • Numpy 向量化:查找列表和列表列表之间的交集

    我试图找到列表和列表列表之间的交集 这个问题可以通过一个简单的 for 循环轻松解决 def find intersec x y result for i in range len y if set x intersection set y
  • 当前上下文中不存在名称<对象名称>

    大多数问题与旧版本有关ASP NET MVC 我的问题与最新相关 NET Core建立在框架4 6 我创建了一个控制台应用程序和标准类库 我安装了运行 WEB 所需的所有库 NET Core 一切工作正常 视图编译良好 调试视图也正常工作
  • PHP 选项下拉列表将选项设置为存储在数据库中的一个

    我有一个 PHP 表单 我用它来编辑 MySQL 数据库中的记录 它有一个值的下拉列表 我想将数据库中保存的选项设置为列表中的第一个选项 这样如果用户不想更改选项 那么数据库将不会被默认选项覆盖 任何人都可以提出一个非常简单的解决方案吗 根
  • 右值函数重载

    我想重载一个函数 以便它以某种方式操纵它的参数 然后返回对该参数的引用 但如果参数不可变 那么它应该返回一个被操纵的copy相反 经过多年的摸索之后 这就是我想到的 using namespace std string foo string
  • 我怎样才能以相反的方式制作动画?

    问候 我正在更改用作 bar 的元素的宽度 并且有效 然而我不能 使它朝相反的方向动画 我尝试将 放在 bar width 前面 但无济于事 宽度将动态计算 只是我希望方向向左而不是向右 就像这样 var bar width this cs
  • 如何限制客户端服务器程序的连接数

    我想要一个服务器程序 它应该只接受最多一个连接 并且应该丢弃其他连接 我怎样才能实现这个目标 Only accept 单个连接 这是一个典型的服务器例程 s socket bind s listen s backlog while 1 t
  • 开源/免费的通用 EPG/XMLTV 数据 API 或服务,或者如何制作一个? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找通用 EPG XMLTV 服务的 开源 又名 免费 数据源 该项目需要以易于解析的格式更新 可更新的实时电视调度信息 它还必须免
  • ParseUser 返回类型的解析子类

    我对 parseUser 进行子类化 所以当我查找用户时我使用 query getFirstInBackground new GetCallback
  • ggplot2 等高线图中的自定义级别?

    这是文档网站的代码片段 Generate data library reshape2 for melt volcano3d lt melt volcano names volcano3d lt c x y z Basic plot v lt
  • 是否有针对这些特定的多线程数据结构需求的现有解决方案?

    我需要一个支持这些声明的多线程数据结构 允许多个并发读取器和写入器 已排序 很容易推理 满足多个读者和一名作者要容易得多 但我真的希望允许多个作者 我一直在研究这个领域 并且我知道 ConcurrentSkipList 由 Lea 基于 F
  • 如何禁用Xcode4.2自动引用计数

    今天 我已经将我的xCode更新到4 2版本 并且我想禁用ARC 我也用google搜索 但无法解决我的问题 根据搜索结果 在目标设置中 我找不到 Objective C自动引用计数 项 所以没有机会将其设置为NO 我一项一项地查找该项目
  • 无法将 @type/node 与 typescript 3.2 一起使用

    我无法在 Typescript 3 2 中使用任何类型的 type node 我的 tsconfig compilerOptions target es5 module commonjs moduleResolution node sour
  • 点击关闭时不要关闭 UIPopoverController

    经过一番搜索后 我找不到对许多人有用的答案 有没有办法制作一个UIPopoverController not当用户点击外部某处时关闭 我希望用户必须使用取消按钮 是的 我意识到这可能在某种程度上违反了 Apple 的 HIG 但这是一种罕见
  • 如何为 vue-ads-table 中的每个 _children 进行复选框

  • c# - 如何迭代类字段并设置属性

    我不确定这是否可行 但我想迭代一个类并设置字段成员属性 而不显式引用字段对象 public class Employee public Person person new Person public void DynamicallySetP