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 个选项,所有选项的含义都略有不同:

1:硬编码到typeof(ISolrDocument)属性是否在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()代替typeof(schemaToScan)--typeof用于获取Type类型名称。用于GetType()获取Type实例的。

于 2012-08-28T13:21:50.917 回答