c # gettype объекта из класса - PullRequest
       28

c # gettype объекта из класса

1 голос
/ 07 декабря 2009

Как я мог сделать эту работу?:

public class myClass
{
 public string first;
 public int second;
 public string third;
}

public string tester(object param)
{
 //Catch the name of what was passed not the value and return it
}

//So:
myClass mC = new myClass();

mC.first = "ok";
mC.second = 12;
mC.third = "ko";

//then would return its type from definition :
tester(mC.first) // would return : "mc.first" or "myClass.first" or "first"
//and 
tester(mC.second) // would return : "mc.second" or "myClass.second" or "second"

Ответы [ 3 ]

9 голосов
/ 07 декабря 2009

В отсутствие infoof лучшее, что вы можете сделать, это Tester(() => mC.first) через деревья выражений ...

using System;
using System.Linq.Expressions;
public static class Test
{
    static void Main()
    {
        //So:
        myClass mC = new myClass();

        mC.first = "ok";
        mC.second = 12;
        mC.third = "ko";
        //then would return its type from definition :
        Tester(() => mC.first); // writes "mC.first = ok"
        //and 
        Tester(() => mC.second); // writes "mC.second = 12"
    }
    static string GetName(Expression expr)
    {
        if (expr.NodeType == ExpressionType.MemberAccess)
        {
            var me = (MemberExpression)expr;
            string name = me.Member.Name, subExpr = GetName(me.Expression);
            return string.IsNullOrEmpty(subExpr)
                ? name : (subExpr + "." + name);
        }
        return "";
    }
    public static void Tester<TValue>(
        Expression<Func<TValue>> selector)
    {
        TValue value = selector.Compile()();

        string name = GetName(selector.Body);

        Console.WriteLine(name + " = " + value);
    }
}
0 голосов
/ 07 декабря 2009

Это невозможно. «param» не будет иметь никакой информации о том, откуда взято значение.

При вызове tester () создается копия значения в одном из свойств, поэтому «ссылка» на свойство теряется.

0 голосов
/ 07 декабря 2009

Это невозможно. Имена переменных не существуют в скомпилированном коде, поэтому нет способа получить имя переменной во время выполнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...