当前位置:  开发笔记 > 编程语言 > 正文

如何获取类属性的名称?

如何解决《如何获取类属性的名称?》经验,为你挑选了4个好方法。

无论如何我可以获得类属性的名称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 SendIncompleteNotification
    {
        get
        {
            return new Task
                (
                a => Console.WriteLine("Sample Task")
                , "This is a sample task which does nothing."
                );
        }
    }
}

因此,代码将能够检索类和属性的全名,如下所示:namespace.ApplicationTask.SendIncompleteNotification并将其保存到数据库中.稍后,代码将读取字符串并动态创建任务并将其传递给另一个任务以执行.



1> wintersolide..:

使用C#6.0,您可以获得它

nameof(ClassName.IntProperty)



2> CMS..:

我认为在这种情况下使用GetProperty方法是多余的,因为您需要知道属性名称来调用该方法.

您可以遍历您的属性并提取其名称:

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



3> Jon Skeet..:

结果ClassName.IntProperty只是一个整数值.一旦执行并返回结果,就没有来自它的痕迹IntProperty.

如果您使用的是.NET 3.5,则可以使用表达式树,通常通过lambda表达式创建:

Expression> exp = () => ClassName.IntProperty;

然后,您可以编译并执行表达式,分别找出它正在做什么(IntProperty在这种情况下检索).我不确定这是否适合你想做的事情.

如果您确实如何在数据库中保存属性名称,那么GetProperty就是继续检索前进的方法.

也许如果你可以根据你想要如何使用它来提供更多关于问题的背景,我们可以提供更多帮助.你已经只展示了一个表达式 - 如果你可以根据你使用它的方式显示它,那就太好了.

编辑:你扩展了属性,但没有扩展属性.您是否需要直接调用它,而不是仅仅使用Type.GetProperties并在数据库中存储属性名称列表来获取属性列表?

同样,如果您可以显示调用属性的代码,以及您希望它如何与数据库交互,我们可能会取得更多进展.



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

这是您需要的吗?

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有