0

これらの2つのクラスを持つ:

class A
{
    public A()
    {
        strA1 = "A1";
        strA2 = "A2";
        strA3 = "A3";
    }

    public string strA1 { get; set; }
    public string strA2 { get; set; }
    public string strA3 { get; set; }
}

class B
{
    public B()
    {
        strB1 = "B1";
        strB2 = "B2";
    }

    public string strB1 { get; set; }
    public string strB2 { get; set; }
}

これらのクラスのプロパティの数に基づいて情報を生成する単一のメソッド(おそらくoverride toString())を作成する方法を見つけようとしています。

たとえば、結果は次のようになります。

for Class A: "{\""A1\"",\""A2\"",\""A3\""}";  // {"A1","A2","A3"}
for Class B: "{\""B1\"",\""B2\""}";           // {"B1","B2"}

各クラスに特定のコードを記述せずに、一般的な方法でどのように実行できますか?

おそらく基本クラスが始まりです...アドバイスしてください

4

4 に答える 4

3

Reflectionを使用して、タイプ情報とパブリックプロパティの値を取得できます。拡張メソッドは次のとおりです。

public static string ConvertToString(this object obj)
{
   Type type = obj.GetType();
   var properties = 
         type.GetProperties()
             .Where(p => p.GetGetMethod() != null)
             .Where(p => !p.GetIndexParameters().Any())
             .Select(p => p.GetValue(obj, null))
             .Select(x => String.Format("\"{0}\"", (x == null) ? "null" : x));

   return String.Format("{{{0}}}", String.Join(", ", properties));
}

使用法:

string info = new A().ConvertToString();

出力:

{"A1","A2","A3"}
于 2012-12-11T10:46:27.310 に答える
1

オブジェクトのすべてのプロパティを動的に読み取るために、リフレクションを調べます。基本クラスのToStringをオーバーライドし、リフレクションを使用してすべての小道具を出力できます。

public override string ToString()
{
    var props = GetType().GetProperties();
    foreach(var prop in props)
        ...
}

(テストされていません。一般的なアイデアを提供するためです。)

于 2012-12-11T10:42:26.093 に答える
1

リフレクションを使用して、このようなメソッドを実装する基本クラスを作成できます。

Type t = this.GetType()
foreach (PropertyInfo Info in t.GetProperties())
{
    // Property Name: Info.Name
    // Property Value: t.GetProperty(Info.Name).GetValue(this);
}
于 2012-12-11T10:44:20.567 に答える
0

XMLシリアル化を使用できます。

于 2012-12-11T10:45:29.977 に答える