是否可以使用字符串值来指定参数的字符串访问器的名称?



我觉得我从过去的经历中错过了一些非常重要的东西,然而,它是:

我正在为公司内的客户设计一个使用DevExpress的最终用户报表设计器。由于这些都是动态生成的,我想让客户有机会自由选择他们在报告中的内容。我没有对所有可用的值进行硬编码,而是使用StartsWithSubstring来检索控件的名称。我想使用这个字符串值来指定他们需要的参数字段。我不确定我的想法是否正确,或者我是否偏离了轨道,希望有人能再看一眼,给我一些建议。

如有任何信息,我们将不胜感激。

也许我需要一本字典或某种接口?我目前拥有的代码片段如下:

private static void BuildReportHeader(Notice notice, XRControl control)
{
if (control.Name.StartsWith("lbl"))
{
string elementName = control.Name.Substring(3);
XRLabel label = (XRLabel)control;
label.Text = notice.{elementName};
}
}

显然,这并不能像现在这样工作或编译,只是在寻找{elementName}位的解决方案,这样我就可以访问该特定参数上的任何字段。

您可以使用反射来执行此动态值查找:notice.{elementName}

下面的示例代码假设elementName存在并且是public

如果elementName是属性

var propertyValue = typeof(Notice).GetProperty(elementName).GetValue(notice);
  • 请记住,GetValue返回object
  • 上面的代码假设elementName属性有一个getter
    • 如果没有,则您将收到ArgumentException

如果elementName是字段

var propertyValue = typeof(Notice).GetField(elementName).GetValue(notice);
  • 上面的代码假设elementName指向一个字段
    • 如果您提供了一个不存在的字段名或属性/方法名,那么您将收到一个NullReferenceException,因为GetField将返回null

相关内容

  • 没有找到相关文章

最新更新