1

リフレクションを使用してByte[]を取得しようとしています。残念ながら、結果は常にNULLになります。プロパティはデータでいっぱいです。これが私のコードスニペットです。

public static void SaveFile(BusinessObject document)
{
    Type boType = document.GetType();
    PropertyInfo[] propertyInfo = boType.GetProperties();
    Object obj = Activator.CreateInstance(boType);
    foreach (PropertyInfo item in propertyInfo)
    {
        Type xy = item.PropertyType;
        if (String.Equals(item.Name, "Content") && (item.PropertyType == typeof(Byte[])))
        {
            Byte[] content = item.GetValue(obj, null) as Byte[];
        }
    }
    return true;
}

動作するコードは次のとおりです。

    public static void SaveFile(BusinessObject document)
{
    Type boType = document.GetType();
    PropertyInfo[] propertyInfo = boType.GetProperties();
    foreach (PropertyInfo item in propertyInfo)
    {
        if (String.Equals(item.Name, "Content") && (item.PropertyType == typeof(Byte[])))
        {
            Byte[] content = item.GetValue(document, null) as Byte[];
        }
    }
}
4

2 に答える 2

4

あなたのコードは奇妙に見えます。パラメータのタイプの新しいインスタンスを作成し、そのインスタンスから値を取得しようとしています。代わりに、パラメーター自体を使用する必要があります。

public static void SaveFile(BusinessObject document)
{
    Type boType = document.GetType();
    PropertyInfo[] propertyInfo = boType.GetProperties();
    foreach (PropertyInfo item in propertyInfo)
    {
        Type xy = item.PropertyType;
        if (String.Equals(item.Name, "Content") &&
            (item.PropertyType == typeof(Byte[])))
        {
            Byte[] content = item.GetValue(document, null) as Byte[];
        }
    }
}

ところで:

  1. return trueを返すメソッドでvoidは不正であり、コンパイラエラーが発生します。
  2. あなたの場合、リフレクションを使用する必要はありません。あなたは単にこれを書くことができます:

    public static void SaveFile(BusinessObject document)
    {
        Byte[] content = document.Content;
        // do something with content.
    }
    

    これは、が派生クラスだけでなくでContent定義されている場合にのみ当てはまります。BusinessObject

于 2012-10-10T09:25:13.060 に答える
1

コードスニペットから、値を入力していないように見えます。

Object obj = Activator.CreateInstance(boType); 

これは、デフォルトのコンストラクターを呼び出し、すべてのタイプにデフォルト値を割り当てるだけです。そしてbyte[]の場合はnullです

そのはず

item.GetValue(document, null)
于 2012-10-10T09:27:37.627 に答える