【问题标题】:c# Creating a reusable method to access properties inside object [duplicate]c#创建一个可重用的方法来访问对象内部的属性
【发布时间】:2019-08-09 12:24:58
【问题描述】:

抱歉,我知道标题听起来模棱两可,但我无法形容它更好

所以,我会尽量保持简单和简短。假设我有一个带有 int 属性的 User 对象,名为 UserID,我按如下方式访问它:

var value = instanceofUser.UserID;

有没有办法我可以创建一个可重用的方法来访问 given 对象的 given 属性?这就是我想要实现的目标:

void GetTheValue(object parent, property nameOfProperty)
{
  var value = parent.nameOfProperty;
}

这背后的原因是我有一个类似的情况,我必须一遍又一遍地重写整个代码块(不是这个确切的代码块,但几乎相同)。那么,这里有什么方法可以使某些东西可重用,以便我可以访问任何 given 对象的任何 given 属性?

我正在考虑使用Reflection 或泛型但是,现在,我对搜索或实现什么一无所知。任何建议都会有所帮助!

【问题讨论】:

  • 如果您想访问编译时未知的属性,则可以使用反射。
  • @dymanoid,有什么例子吗?
  • 试过搜索?
  • 但是调用你的函数需要你指定类和属性。如果您知道父母和财产,您可以使用parent.nameOfProperty?对我来说,重复的代码听起来像是类继承问题。
  • @Aousafrashid 如果你真的需要,那么反射就是要走的路。但这将是某种最后的手段(我们确实使用它来生成基于您想要在该报告中的属性的文本定义的报告)。但无论如何,重复的代码应该进入可重用的方法。但我仍然不清楚重复的代码是什么。

标签: c# generics reflection


【解决方案1】:

试试这个(为简洁起见省略了错误处理):

object GetTheValue(object parent, string nameOfProperty)
{
    return parent.GetType().GetProperty(nameOfProperty).GetValue(parent);
}

它应该将值作为对象提供,然后您必须将其转换为预期的类型。

【讨论】:

  • 在 cmets 中,Adam 建议这不是正确的方法。你能解释一下为什么吗?
  • @Aousafrashid:我将把它留给亚当。我无法解释他的cmets。但是,除非出于某种原因,否则不建议使用反射来设置属性。但试图回答你的实际问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-20
  • 2011-07-11
  • 1970-01-01
相关资源
最近更新 更多