3

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

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

4

2 回答 2

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
于 2013-01-25T13:19:07.390 回答
0

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

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

于 2013-01-25T13:21:42.360 回答