0

私は次のコードを持っています:

public static IList<SortOption> SortValues()
{
var sortValues = (from prop in typeof(SolrSchemaApp1).GetProperties(BindingFlags.Instance | BindingFlags.Public)
  where Attribute.IsDefined(prop, typeof(SolrSortAttribute)) 
  select new SortOption(prop.Name)).ToList();
return sortValues;
}

ここで、SolrSchemaApp1は、ISolrDocumentと呼ばれるインターフェイスから派生したクラスです。

SolrSchemaApp2のインスタンスを渡し、コードにSolrSchemaApp1ではなくそのインスタンスからソートプロパティを選択させたいと思います。事実上、私はこれをしたい:

public static IList<SortOption> SortValues(ISolrDocument schemaToScan)
{
var sortValues = (from prop in typeof(schemaToScan).GetProperties(BindingFlags.Instance | BindingFlags.Public)
  where Attribute.IsDefined(prop, typeof(SolrSortAttribute))
  select new SortOption(prop.Name)).ToList();
return sortValues;
}

私が行ったのは、ハードコードされたSolrSchemaApp1を別のタイプの変数に置き換えることだけです。ただし、エラーが発生します

タイプまたは名前空間の名前'schemaToScan'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

任意のクラスでGetPropertiesを使用する構文に苦労しています。

Linqを使用して、パラメーターとして渡すクラスのプロパティをスキャンするにはどうすればよいですか?

4

3 に答える 3

5
replace typeof(schemaToScan)

schemaToScan.GetType()

schemaToScanはタイプのインスタンスであり、タイプではありません。

于 2012-08-28T13:20:21.270 に答える
1

schemaToScanは型ではない(パラメータです)のでtypeof(schemaToScan)、意味がありません。3つのオプションがあり、それらはすべてわずかに異なる意味を持っています。

typeof(ISolrDocument)1:プロパティがにあるかどうかをハードコーディングするinterface

2:schemaToScan.GetType()プロパティが実装オブジェクトの具体的なタイプにある場合に使用します

3:それをジェネリックメソッドにし、プロパティが渡される変数(オブジェクトではない)typeof(T)の宣言された型にある場合に使用します。

    public static IList<SortOption> SortValues<T>(T schemaToScan)
        where T : ISolrDocument
    { ... }
于 2012-08-28T13:22:24.453 に答える
0

まず、 -schemaToScan.GetType()の代わりにuseを使用して、型名のを取得します。インスタンスの取得に使用します。typeof(schemaToScan)typeofTypeGetType()Type

于 2012-08-28T13:21:50.917 に答える