C#:使用System.Reflection.GetFields()显示字段元数据 - c#

This question already has answers here:

Closed 8 years ago.

Possible Duplicate:
Find a private field with Reflection?

我正在尝试使用System.Reflection.GetFields()方法显示类的字段名称。

问题是,仅当字段被声明为“ public”时,它才有效。
例如 :

class Element
{
    private String id;
    private string a;
    private string b;
    private int c;
    private Dictionary<String, String> dict;

    public Element(String id)
    {
        this.id= id;
    }}

当我尝试调用System.Reflection.GetFields()方法时,它不起作用(它返回一个空数组)。但是,如果我将字段的可见性更改为“ public”,则它可以工作。

有人知道我可以如何使它工作而不必将其公开吗?

谢谢

参考方案

试试这个:

GetFields(BindingFlags.NonPublic | BindingFlags.Instance)

更新:
这是不带参数调用GetFields时的情况:

public FieldInfo[] GetFields()
{
   return this.GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance);
}

因此,如您所见,默认情况下不返回私有字段。

顺便说一下,这里是msdn中GetFields()方法的描述:

返回当前Type的所有公共字段。返回值:的数组
代表为该定义的所有公共字段的FieldInfo对象
当前类型。 -或-如果没有公共字段,则为FieldInfo类型的空数组
为当前类型定义。

将数据从ip套接字转发到蓝牙套接字。 C# - c#

我想在特定端口上监听传入的IP套接字,并使用蓝牙套接字转发它们。这可能吗?我正在使用c#,但是如果可以更轻松地编写代码,则可以使用java。 参考方案 实际上,该对象正在通过蓝牙连接使用SMB协议。我找到了一个类似于SMB协议的蓝牙配置文件,它使我能够从PC上浏览sdcard。该配置文件是OBEX FTP(文件传输配置文件),我发现了Java API。谢谢您…

Cefsharp如何获取当前的URL地址? C# - c#

我想获取当前地址,基本上将其放在文本框中。我找到了此链接,但似乎什么也听不懂。http://cefsharp.github.io/api/57.0.0/html/P_CefSharp_WinForms_ChromiumWebBrowser_Address.htm我非常感谢某人提供的代码段。这太痛苦了。我正在使用WFA。 参考方案 您必须听下面的地址更改事件并…

C#-如何使用正则表达式替换NULL字符? - c#

我有以下字符串:< \0\"\0E\0x\0t\0e\0n\0s\0i\0b\0i\0l\0i\0t\0y\0,\0v\0e\0r\0s\0i\0o\0n\0=\0\\\0\"\07\0.\00\0.\03\03\00\00\0.\00\0\\\0\"\0,\0p\0u\0b\0l\0i\0c\0K\0e\0y\0T\0o…

C#-文本框的XML子节点 - c#

我在将子节点文本放入c#的富文本框中时遇到麻烦。到目前为止,这是我尝试过的:这是XML文件:<DATA_LIST> <Customer> <Full_Name>TEST</Full_Name> <Total_Price>100</Total_Price> <Discounts>…

使用System.Drawing.Font限制字体大小? - c#

我正在使用内置的“字体”对话框来选择字体大小和样式。字体大小范围是从8到72。我需要限制用户不要选择超过20的大小。是否可以将字体大小从22禁用或完全不显示22?我没有在Font类上看到任何属性来执行此操作?感谢您的任何建议。 c#参考方案 我没有在Font类上看到任何属性来执行此操作?这是因为它是FontDialog类的属性,而不是Font类的属性。例如:…