1

これら2つのクラスがある場合:

public class A
{
    public int Id { get; set; }
}

public class B
{
    public string Name { get; set; }
}

次のような一般的な方法を使用できますか:

public void InitMethod(object classProperty)

次のようにデータを渡すには:

var a = new A() { Id = 1 };
var b = new B() { Name = "John" };

InitMethod(a.Id);
InitMethod(b.Name);

メソッド内から次の情報を取得します。

  • クラス名 (例: "A"、"B")
  • プロパティ名 (例: "Id"、"Name")
  • プロパティ値 (例: 1、"John")
4

2 に答える 2

2

価値があるよりも面倒かもしれませんが。

ASP.Net MVC は、式を頻繁に使用して、厳密に型指定された方法でプロパティ情報を取得します。式は必ずしも評価されるとは限りません。代わりに、そのメタデータが解析されます。

これは MVC に固有のものではありません。Microsoft フレームワークで確立されたパターンを引用するために言及します。

式からプロパティ名と値を取得するサンプルを次に示します。

// the type being evaluated
public class Foo
{
    public string Bar {
        get;
        set;
    }
}

// method in an evaluator class
public TProperty EvaluateProperty<TProperty>( Expression<Func<Foo, TProperty>> expression ) {
    string propertyToGetName = ( (MemberExpression)expression.Body ).Member.Name;

    // do something with the property name

    // and/or evaluate the expression and get the value of the property
    return expression.Compile()( null );
}

次のように呼び出します (式が渡されることに注意してください)。

var foo = new Foo { Bar = "baz" };
string val = EvaluateProperty( o => foo.Bar );

foo = new Foo { Bar = "123456" };
val = EvaluateProperty( o => foo.Bar );
于 2013-03-05T19:18:31.063 に答える
1

この例では、そのオブジェクトのプロパティではなく、オブジェクトを InitMethod に渡す必要があります。おそらく問題ありません。

class Program
{
    static void Main(string[] args)
    {
        InitMethod(new A() { Id = 100 });
        InitMethod(new B() { Name = "Test Name" });

        Console.ReadLine();
    }

    public static void InitMethod(object obj)
    {
        if (obj != null)
        {
            Console.WriteLine("Class {0}", obj.GetType().Name);
            foreach (var p in obj.GetType().GetProperties())
            {
                Console.WriteLine("Property {0} type {1} value {2}", p.Name, p.GetValue(obj, null).GetType().Name, p.GetValue(obj, null));
            }
        }
    }
}
于 2013-03-05T19:18:59.623 に答える