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

これを行うには、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に対応するプロパティがない配列値は許可されないことに注意してください。

于 2013-01-25T13:21:42.360 に答える