【问题标题】:Using a variable inside a member of an object [duplicate]在对象成员中使用变量[重复]
【发布时间】:2013-01-09 11:04:14
【问题描述】:

我正在从 C# 中的对象中提取几个数据元素。它们都在对象内的同一个“位置”,如下所示:

objectContainer.TableData.Street.ToString());
objectContainer.TableData.City.ToString());
objectContainer.TableData.State.ToString());
objectContainer.TableData.ZipCode.ToString());

我希望使用 foreach 循环将它们全部拉出,并能够通过添加到数组中来添加更多内容。

string[] addressFields = new string[] { "Street", "City", "State", "ZipCode" };
foreach(string add in addressFields) 
{
  objectContainer.TableData.{add}.ToString());
}  

可以这样做吗?如果可以,正确的程序是什么?

【问题讨论】:

  • 什么是 TableData ??它是什么类型的?
  • 您是要向 TableData 中添加项目,还是要从 TableData 中获取项目?你的意图不明确
  • 我正在尝试获取,是的,GetType().GetProperty() 是我一直在寻找但找不到的。谢谢大家。

标签: c#


【解决方案1】:

您需要使用反射来实现:

var type = objectContainer.TableData.GetType();

foreach(var addressFieldName in addressFieldNames)
{
    var property = type.GetProperty(addressFieldName);
    if(property == null)
        continue;
    var value = property.GetValue(objectContainer.TableData, null);
    var stringValue = string.Empty;
    if(value != null)
        stringValue = value.ToString();
}

请注意:这段代码非常具有防御性:

  • 如果不存在具有指定名称的属性,它不会崩溃。
  • 属性值为null时不会崩溃。

【讨论】:

    【解决方案2】:

    您可以使用反射来做到这一点。

    string[] addressFields = new string[] { "Street", "City", "State", "ZipCode" };
    foreach(string add in addressFields) 
    {
      var myVal = objectContainer.TableData.GetType().GetProperty(add).GetValue(objectContainer.TableData).ToString();
    }
    

    请注意,这不允许在 objectContainer.TableData 上没有对应属性的数组值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-23
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      相关资源
      最近更新 更多