0

オブジェクトの観測可能なコレクション (Web サービスから返された) を取り込み、それらの属性に従ってそれらを分析するメソッドがあります。

メソッドのコード スニペットを次に示します。

プライベートダブル分析(ObservableCollection mobjColl) {

        FieldInfo fi = null;

        foreach (MyApp.MyObj oi in mobjColl)
        {

        if(oi.pressure.Equals("high"){

            fi = oi.GetType().GetField("air");

            .....
        }
        }
        return someval;
    }

私の問題は、fieldinfo fi が常に null であることです。オブジェクト名を使用してオブジェクトのすべてのフィールド (foreach 内) にアクセスできますが、fieldinfo オブジェクトにはデータが取り込まれません。GetFields メソッドを使用してみましたが、配列が返されません...

PS : オブジェクト フィールドは public です。getfield で bindingflags を使用しても役に立ちませんでした。

4

4 に答える 4

1

BindingFlags を使用しない GetField/GetFields は、パブリック フィールドのみを検索します。私の推測では、「空気」はプライベート フィールドです。

代わりにこれを試してください:

oi.GetType().GetField("air", BindingFlags.Instance | BindingFlags.NonPublic);

于 2009-07-21T15:32:35.783 に答える
1

Web サービスから返されたオブジェクトが public フィールドを公開しているとは思えません。代わりにプロパティを考えているかもしれません。努力GetProperty("air")すれば、きっと何かが返ってきます。

于 2009-07-21T16:01:53.150 に答える
0

フィールドエアはプライベートですか?その場合は、BindingFlags パラメーターを受け入れる GetField のオーバーロードを使用し、NonPublic を指定する必要があります。

fi = oi.GetType().GetField("air", BindingFlags.NonPublic | BindingFlags.Instance);
于 2009-07-21T15:33:51.663 に答える
0

フィールドが公開されていない場合、既定では公開フィールドのみが含まれているため、BindingFlags を使用する必要がある場合があります。

fi = oi.GetType().GetField("air", BindingFlags.Instance | BindingFlags.NonPublic);
于 2009-07-21T15:33:55.860 に答える