0
NetworkElementCountersFactory factory=new NetworkElementCountersFactory();
List<NetworkElementCounters> neCountersList= new List<NetworkElementCounters>();
NetworkElementCounters neCounters;
while (reader.Read())
{
    i = 4;
    neCounters = factory.getInstance(tableName, reader.GetInt32(0), reader.GetDateTime(1), reader.GetDateTime(2), reader.GetInt32(3));
    foreach (var v in neCounters.Fields)
    {
        v.GetType().GetProperty("CounterValue").SetValue(neCounters.GetType(), reader.GetValue(i), null);
        i++;
    }
    neCountersList.Add(neCounters);
} 

ここで例外を受け取ります:

v.GetType().GetProperty("CounterValue").SetValue(neCounters.GetType(), reader.GetValue(i), null);
4

1 に答える 1

3

これは非常に間違っているように見えます:

.SetValue(neCounters.GetType(), {whatever}, null);

Typeこれは、これをインスタンスに割り当てようとしていることを意味します。ここでターゲット オブジェクトを渡すかnull、プロパティの場合は渡す必要がありstaticます。これは次のようになります

.SetValue(neCounters, {whatever}, null);

しかし、それは使いやすいでしょう:

neCounters.CounterValue = ...
// v.CounterValue = ... // <=== might be this instead - confusing context

dynamicここにいくつかの複雑さがある場合は、おそらく経由します:

dynamic obj = neCounters;
// dynamic obj = v; // <=== might be this instead - confusing context
obj.CounterValue = reader.GetValue(i);
于 2012-05-02T07:27:21.030 に答える