Как получить имя свойства класса?
В любом случае я могу получить имя свойства класса 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
и сохранить его в базе данных. Позже код будет читать строку и динамически создавать задачу и передавать ее в другую для выполнения.
Ответы
Ответ 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