首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用system.reflection列出类文件

使用system.reflection列出类文件
EN

Stack Overflow用户
提问于 2012-12-12 02:33:55
回答 1查看 870关注 0票数 0

我需要一个列表来存储类中的所有字段-值。

正如我在下面粘贴的那样,这个类只是一些公共的const string变量。

代码语言:javascript
复制
public class HTDB_Cols
{
    public class TblCustomers
    {
        public const string CustID  = "custID",
               Name  = "name",
         CustType  = "custType",
         AddDate  = "addDate",
         Address  = "address",
         City  = "city",
         Phone  = "phone",
         Cell  = "cell";
    }
}

这是一个返回字符串列表的方法,它使我能够拥有一个字符串列表,表示我的所有表、列名称,尽管有些情况下由于我收到错误而无法处理这段代码。

“非静态字段需要目标”。

代码语言:javascript
复制
public class GetClassFields
{

        public static List<string> AsList(string TableName)
        {


                    return typeof(HTDB_Cols).GetNestedTypes()
                    .First(t => String.Compare(t.Name, TableName, true) == 0)
                    .GetFields()
                    .Select(f => f.GetValue(null) as string)
                    .ToList();

        }
}

试图按以下方式使用它:

代码语言:javascript
复制
foreach (string tblCol in RobCS_212a.Utils.Reflct.GetClassFields.AsList      (DBSchema.HTDB_Tables.TblCustomers))
{
    Response.Write(string.Concat(tblCol, "<br />"));
}

在类型'DBSchema.HTDB_Cols+TblTimeCPAReport‘上定义的字段’DBSchema.HTDB_Cols+TblTimeCPAReport‘不是目标对象上的'DBSchema.HTDB_Cols’类型的字段。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-12 02:52:32

你的密码很接近。有两个问题,都位于linq select方法调用的参数中:

  • 类HTDB_Cols是一个非静态类,您要检索的字符串值是实例成员。因此,当您试图从类中提取实例成员时,必须将类的一个实例传递给FieldInof.GetValue方法。在下面的代码中,我在变量"instanceOfClass“中创建了类的一个实例。您可以在FieldInfo类的文档中看到这一点
  • 从FieldInfo.GetValue返回的值是一个对象。必须使用ToString方法或( string ) cast显式地将其转换为字符串。

通过这两个更改,您的方法可以工作。名单如下:

代码语言:javascript
复制
public class GetClassFields
{
    public static List<string> AsList(string tbl)
    {
        var instanceOfClass = new HTDB_Cols();
        return typeof(HTDB_Cols).GetNestedTypes()
                                .First(t => String.Compare(t.Name, tbl, true) == 0)
                                .GetFields()
                                .Select(f => f.GetValue(instanceOfClass).ToString())
                                .ToList<String>();
    }
}

您可以按以下方式调用此函数:

代码语言:javascript
复制
var fields = GetClassFields.AsList("TblCustomers");

它返回所需的信息:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13831888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档