Подтвердить что ты не робот

Как получить имя свойства класса?

В любом случае я могу получить имя свойства класса IntProperty?

public class ClassName
{
  public static int IntProperty { get { return 0; } }
}

//something like below but I want to get the string of "IntProperty"
ClassName.IntProperty.GetType().Name

В основном я хочу динамически сохранять строку имени свойства в базе данных, а затем извлекать ее из базы данных и динамически вызывать свойство.

Кажется, что то, что я ищу, похоже на утиную типизацию, я думаю.

Спасибо!

ОБНОВЛЕНО:

Это фактический код. Это больше похоже на рабочий процесс. Но каждая задача определяется как свойство класса (класс используется для группировки задач).

public class ApplicationTask
{
    public static Task<string> SendIncompleteNotification
    {
        get
        {
            return new Task<string>
                (
                a => Console.WriteLine("Sample Task")
                , "This is a sample task which does nothing."
                );
        }
    }
}

Таким образом, код сможет получить полное имя класса и свойства, например: namespace.ApplicationTask.SendIncompleteNotification и сохранить его в базе данных. Позже код будет читать строку и динамически создавать задачу и передавать ее в другую для выполнения.

4b9b3361

Ответ 1

Результат ClassName.IntProperty - это просто целочисленное значение. Как только он будет выполнен, и результат будет возвращен, нет никаких следов, полученных из IntProperty.

Если вы используете .NET 3.5, вы можете вместо этого использовать дерево выражений, обычно создаваемое с помощью выражения лямбда:

Expression<Func<int>> exp = () => ClassName.IntProperty;

Затем вы можете скомпилировать и выполнить выражение и отдельно узнать, что он делает (в этом случае получить IntProperty). Я не уверен, подходит ли это для того, что вы хотите сделать.

Если вы знаете, как сохранить имя свойства в базе данных, тогда GetProperty - это путь к началу поиска.

Возможно, если бы вы могли дать больше контекста в вопросе с точки зрения того, как вы хотите использовать это, мы могли бы помочь больше. Вы показали только выражение - если бы вы могли показать это с точки зрения того, где вы будете его использовать, это было бы здорово.

EDIT: вы расширили свойство, но не как его вызывали. Вам нужно вызвать его напрямую, а не просто отображать список свойств с помощью Type.GetProperties и сохранить список имен свойств в базе данных?

Опять же, если вы можете показать код, который вызывает свойство, и как вы хотите, чтобы он взаимодействовал с базой данных, мы можем добиться большего прогресса.

Ответ 2

Я думаю, что использование метода GetProperty в этом случае избыточно, потому что вам нужно знать имя свойства, чтобы вызвать метод.

Вы можете просмотреть свои свойства и извлечь его имя:

foreach (PropertyInfo p in typeof(ClassName).GetProperties())
{
    string propertyName = p.Name;
    //....
}

Ответ 3

С С# 6.0 вы можете получить его

nameof(ClassName.IntProperty)

Ответ 4

Type objectType = this.GetType();
PropertyInfo property = objectType.GetProperty("intProperty");
System.Console.Write(property.Name);

Это то, что вам нужно?

Ответ 5

Я наткнулся на это, и мне кажется, очень полезно получить имя свойства. (С++)

#define getVarName(varName,holder) sprintf(holder, "%s", #varName)

int main() {
    int var = 100; // just any type of identifier
    char name[100]; // it will get the variables name
    getVarName(var, name);
    puts(name);
    return 0;
}

ref: http://zobayer.blogspot.com/2010/05/c-fun-get-variables-name.html