【发布时间】:2012-11-29 16:37:17
【问题描述】:
我需要获取一个列表来存储所有字段 - 类中的值
该类只是我在下面粘贴的一些公共const string 变量。
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";
}
}
这是一种返回字符串列表的方法,它使我能够拥有代表我所有表列名称的字符串列表,尽管由于出现错误,因此某些内容无法使用此代码
" 非静态字段需要一个目标".
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();
}
}
尝试如下使用它:
foreach (string tblCol in RobCS_212a.Utils.Reflct.GetClassFields.AsList (DBSchema.HTDB_Tables.TblCustomers))
{
Response.Write(string.Concat(tblCol, "<br />"));
}
在“DBSchema.HTDB_Cols+TblTimeCPAReport”类型上定义的字段“tbName”不是“DBSchema.HTDB_Cols”类型的目标对象上的字段。
【问题讨论】:
-
所以您只想从该类中获取所有字段名称?
-
一个小风格的评论:如果出现问题,返回如此复杂的操作字符串会使调试变得困难。我通常更喜欢将它分解成更小的步骤,这样如果任何一种 Linq 方法都没有返回我期望的结果,我可以很容易地破译它是什么。无论如何,编译器都会将它们重新合并在一起,但它会使代码更具可读性和可维护性。
-
@MikeParkhill mike,第二次投赞成票是我,原因是,我喜欢保留东西,就像你说我不应该保留的一样,你说的好点,好像有人不这样做但是知道编译器的工作原理你可能会担心你“过度加载”给 cpu 的指令,因为......(如果......你没有把它分解)它应该更快(对 CPU 的指令更少) 实时这是错误的假设,所以为那个评论喝彩
标签: c# .net reflection