2017-12-18 9 views
-1

次のコードを持つクラス名にc_invPrdがあります。C#のクラスからすべての属性名を取得します

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クラスにアクセスすることによって、リストにようにITEM_NO、PRD_INDEX、PRD_CD、PRD_DESC、PRINCIPAL_INDなどすべての属性を置くためにリストのC#を作成することができますか?私は私のIDEとしてsharpdeveloperを使用しています。

+1

なぜあなたはフィールドを使用していない、定期的な性質でなければなりませんか? –

+0

クラスのすべてのメンバー変数をプログラムで読み込みますか? – Codor

+0

このコードは奇妙です。なぜあなたは固定値を持つことができるだけの32のプライベートな読み込み**インスタンス**フィールドを持っていますか?これを表現しようとしているのは何ですか? –

答えて

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(); 

率直に言えば、このコードはちょうどうんざりです。どちらかそれらのものは、(Type用)(string用)constまたはstatic readonlyでなければなりません - あるいは、彼らはすなわち

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? 
+0

ありがとうございます –

+0

@ChanYoHonHon私はまだあなたこのクラスでモデル化しようとしています - それが正しいアプローチであるかどうかを検討することを強くお勧めします –

関連する問題