私は、異なるリストを格納するクラスDataHolder
を持っています。courses
リストが初期化されている場合、ドロップダウンリストを更新する関数があります。さまざまなタイプのリスト(例:course
、student
)と、それぞれのタイプを確認するさまざまな機能があります。私は、リストのさまざまな種類のために働くジェネリック関数を作成したいと思いますが、主には、C#で文字列を使って動的にフィールド名にアクセスする方法がわかりません。私は反射で読んでいたが、それを働かせるように見えなかった。Unity C#クラスのフィールドへのアクセス
基本的には、私はdataHolder[dataType] != null && dataHolder[dataType].length
のC#と同等のものを探しています。
private DataHolder dataHolder;
void CheckIfCoursesHasBeenPulled (string dataType) {
//dataHolder has been initialised in Start function
if (dataHolder.courses != null && dataHolder.courses.Count > 0) {
UpdateDropdown(dataHolder.courses);
}
//code that I hope to do but getting error
if (dataHolder.GetType().GetField(dataType).GetValue(dataHolder) != null && dataHolder.GetType().GetField(dataType).GetValue(dataHolder).Count > 0) {
UpdateDropdown(dataHolder.courses);
}
}
エラーメッセージ
Operator ‘>’ cannot be applied to operands of type ‘method group’ and ‘int’
ありがとうございました!私はあなたのコードを実行しようとしていますが、 'objects'は' dataHolder.courses'が有効な間にヌルとして表示されているようです。私は何かしなければならないことがありますか? –
あなたは間違ったタイプにキャストしようとしています。オブジェクトがFooのインスタンスでない場合、 'as Foo'はnullを返します。 「科目」はどのようなタイプですか? Tが正しい型である場合、GetValue(...)をTとして使用する必要があります。 – Doug