从C#中的类获取所有属性名称[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我有一个名为c_invPrd的类,代码如下。

public  readonly string ITEM_NO                                     = "ITEM_NO";
public  readonly string PRD_INDEX                                   = "PRD_INDEX";
public  readonly string PRD_CD                                      = "PRD_CD";
public  readonly string PRD_DESC                                    = "PRD_DESC";
public  readonly string PRINCIPAL_IND                               = "PRINCIPAL_IND";
public  readonly string PROMO_IND                                   = "PROMO_IND";
public  readonly string PRDCAT1_CD                                  = "PRDCAT1_CD";
public  readonly string PRDCAT2_CD                                  = "PRDCAT2_CD";
public  readonly string PRDCAT3_CD                                  = "PRDCAT3_CD";
public  readonly string PRDCAT4_CD                                  = "PRDCAT4_CD";
public  readonly string PRDCAT5_CD                                  = "PRDCAT5_CD";
public  readonly string PRDCAT6_CD                                  = "PRDCAT6_CD";
public  readonly string PRDCAT7_CD                                  = "PRDCAT7_CD";
public  readonly string PRDCAT8_CD                                  = "PRDCAT8_CD";
public  readonly string PRDCAT9_CD                                  = "PRDCAT9_CD";
public  readonly string PRDCAT10_CD                                 = "PRDCAT10_CD";


private readonly Type   typeof_ITEM_NO                              = typeof(int);
private readonly Type   typeof_PRD_INDEX                            = typeof(int);
private readonly Type   typeof_PRD_CD                               = typeof(string);
private readonly Type   typeof_PRD_DESC                             = typeof(string);
private readonly Type   typeof_PRINCIPAL_IND                        = typeof(string);
private readonly Type   typeof_PROMO_IND                            = typeof(string);
private readonly Type   typeof_PRDCAT1_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT2_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT3_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT4_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT5_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT6_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT7_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT8_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT9_CD                           = typeof(string);
private readonly Type   typeof_PRDCAT10_CD                          = typeof(string);


public c_invIndPrd(DMSFW.Objects.Argument arg)
    : base (arg) {
}

public c_invIndPrd()
{

}

如何通过访问以下c_invPrd类来创建List C#以将所有属性(如ITEM_NO,PRD_INDEX,PRD_CD,PRD_DESC,PRINCIPAL_IND等)放入列表中?我使用sharpdeveloper作为我的IDE。

c# .net sharpdevelop
1个回答
2
投票

这段代码看起来非常奇怪 - 看起来你想要一些私有字段,但只需要string

var fields = typeof(c_invPrd).GetFields(
        BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
     .Where(f => f.FieldType == typeof(string)).ToArray();

如果你只想要名字:

var fields = typeof(c_invPrd).GetFields(
        BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
     .Where(f => f.FieldType == typeof(string)).Select(f => f.Name).ToArray();

如果你想要这些值,那么你需要一个类型的实例,然后使用FieldInfo.GetValue

c_invPrd obj = ...
var fields = typeof(c_invPrd).GetFields(
          BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
     .Where(f => f.FieldType == typeof(string))
     .Select(f => (string)f.GetValue(obj)).ToArray();

坦率地说,这段代码令人费解。这些东西应该是const(对于string)或static readonly(对于Type) - 或者它们应该是常规属性,即

public int ITEM_NO {get;set;} // I'd use ItemNumber if it was me, but...
public string PRD_CD {get;set;} // I'm going to guess... ProductCode?
© www.soinside.com 2019 - 2024. All rights reserved.