C# 为什么 GetProperty 找不到它?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/360422/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 00:30:59  来源:igfitidea点击:

Why does GetProperty fail to find it?

c#reflectionproperties

提问by Remi Despres-Smyth

I'm trying to use reflection to get a property from a class. Here is some sample code of what I'm seeing:

我正在尝试使用反射从类中获取属性。这是我所看到的一些示例代码:


using System.Reflection;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            PropertyInfo[] tmp2 = typeof(TestClass).GetProperties();
            PropertyInfo test = typeof(TestClass).GetProperty(
               "TestProp", BindingFlags.Public | BindingFlags.NonPublic);
        }
    }

    public class TestClass
    {
        public Int32 TestProp
        {
            get;
            set;
        }
    }
}

When I trace through this, this is what I see:

当我跟踪这个时,这就是我所看到的:

  • When I fetch all properties using GetProperties(), the resulting array has one entry, for property TestProp.
  • When I try to fetch TestPropusing GetProperty(), I get null back.
  • 当我使用 获取所有属性时GetProperties(),结果数组有一个条目,用于 property TestProp
  • 当我尝试获取TestProp使用GetProperty(),我得空回来。

I'm a little stumped; I haven't been able to find anything in the MSDN regarding GetProperty()to explain this result to me. Any help?

我有点难住;我一直无法在 MSDN 中找到任何关于GetProperty()向我解释这个结果的内容。有什么帮助吗?

EDIT:

编辑:

If I add BindingFlags.Instanceto the GetProperties()call, no properties are found, period. This is more consistent, and leads me to believe that TestPropis not considered an instance property for some reason.

如果我添加BindingFlags.InstanceGetProperties()呼叫中,则找不到任何属性,期间。这更加一致,并使我相信TestProp由于某种原因它不被视为实例属性。

Why would that be? What do I need to do to the class for this property to be considered an instance property?

为什么会这样?我需要对类做什么才能将此属性视为实例属性?

采纳答案by Andrew Rollings

Add BindingFlags.Instanceto the GetPropertycall.

添加BindingFlags.InstanceGetProperty通话中。

EDIT: In response to comment...

编辑:回应评论...

The following code returns the property.

以下代码返回该属性。

Note: It's a good idea to actually make your property do something before you try to retrieve it (VS2005) :)

注意:在尝试检索它(VS2005)之前,最好先让你的财产做一些事情:)

using System.Reflection;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            PropertyInfo[] tmp2 = typeof(TestClass).GetProperties();
            PropertyInfo test = typeof(TestClass).GetProperty(
                "TestProp",
                BindingFlags.Instance | BindingFlags.Public |
                    BindingFlags.NonPublic);

            Console.WriteLine(test.Name);
        }
    }

    public class TestClass
    {
        public Int32 TestProp
        {
            get
            {
                return 0;
            }
            set
            {
            }
        }
    }
}

回答by leppie

You need to specify whether it is static or an instance (or both) too.

您还需要指定它是静态的还是实例(或两者)。

回答by bruno conde

Try to add the following tag:

尝试添加以下标签:

System.Reflection.BindingFlags.Instance

EDIT:This works (at least to me)

编辑:这有效(至少对我而言)

PropertyInfo test = typeof(TestClass).GetProperty("TestProp", BindingFlags.Public | BindingFlags.Instance);

Console.WriteLine(test.Name);