3

これはあまり意味がないので、事前にお詫びします。私はC#開発者ではありませんが、確認するためのコードが提供されています。

モデルオブジェクトを関数に渡す必要がありますが、ループするため、名前を動的に作成する必要があります。それで、私が通常そのようにそれを参照すると仮定しましょう。

model.employee.title
model.employee.forename

最後の部分の文字列を使用してそれを参照するにはどうすればよいですか。

foreachを使用してさまざまな部分をループしますが、これは問題ありませんが、オブジェクトを関数呼び出しに渡す必要があります。最後の部分の名前をリテラル文字列( "title"、 "forname")として持っていますが、それをどのように渡すかわかりません。

だから効果的に私が必要なのは次のようなものを使うことです

model.employee."title"

また

model.employee.varContainingTheName

私はこれらが機能しないことを知っていますが、どのように進めるかわかりません。

4

2 に答える 2

3

基本的に、メンバー名の文字列がある場合は、リフレクションについて話していることになります。リフレクションAPIはフィールドとプロパティで異なるため、たとえば、どちらであるかを知る必要があります(ここobjmodel.employeenameは、アクセスするメンバーの名前です)。

object value = obj.GetType().GetField(name).GetValue(obj);

vs:

object value = obj.GetType().GetProperty(name).GetValue(obj, null);

または、 FastMemberのようなAPIを使用します(ちなみに、生のリフレクションよりもはるかに高速です。多くのブードゥーを使用します)。

var wrapper = ObjectAccessor.Create(obj);
object value = wrapper[name];
于 2012-10-05T10:52:06.250 に答える
1

model.employeeクラスを開発してそのように使用する場合は、ファイルに辞書を使用することを検討する必要があります。

    class employee
    {
        public Dictionary<string, object> properties = new Dictionary<string,object>();

        public employee()
        {
            properties.Add("time", DateTime.Now);
            properties.Add("name", "Bill Gates");
        }
    }

次に、次のように使用します。

        Employee employee = new Employee();
        employee.properties["time"];

このコードはより速く、より読みやすくなります。

于 2012-10-05T11:04:17.663 に答える