在对象的成员中使用变量

时间:2013-01-25 13:15:42

标签: c#

我从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());
}  

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

2 个答案:

答案 0 :(得分:3)

您需要使用反射来实现此目的:

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,则不会崩溃。

答案 1 :(得分:0)

您可以使用Reflection来执行此操作。

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上没有相应属性的数组值。