Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';不能进入现场内部的现场_C# - Fatal编程技术网

C# Can';不能进入现场内部的现场

C# Can';不能进入现场内部的现场,c#,C#,需要访问m_fullDescriptor以获取其中的值,但是我无法访问另一个字段中的字段,如下图所示 使用下面的代码获取我成功获取的字段,但当我在pmCS中搜索m_pm或m_fullDescriptor时找不到它们 我如何访问它 var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name

需要访问m_fullDescriptor以获取其中的值,但是我无法访问另一个字段中的字段,如下图所示

使用下面的代码获取我成功获取的字段,但当我在pmCS中搜索m_pm或m_fullDescriptor时找不到它们

我如何访问它

var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "pmCS");
然后我尝试访问下面的“m_pm”

var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "pmCS").GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "m_pm");
它抛出一个错误

System.InvalidOperationException:'序列不包含匹配项 元素'

GetFields()返回FieldInfo[]。FiledInfo的类型为RtFieldInfo。您需要的是字段的实际类型,因此应该像下面这样使用FieldInfo类的FieldType属性:


请注意字段类型属性的使用


那么,尝试这样做的代码在哪里?您必须获取pmCS字段的类型和值才能访问它自己的字段。我在Visual studio中调试并观看了它,但没有。您怎么说“没有”呢?
pmc
m_pm
m_fullDescriptor
都是公共字段,您可以直接访问它们,也可以使用反射来访问非publoc值。我警告您要小心,通常有一个原因是字段是非公共的,而维护这部分代码的字段通常不希望其他人访问这些字段,这意味着一次库升级可能会突然产生运行时异常,因为私有字段不再存在。我知道缺点,但我需要访问该值。编辑了这个问题。我试图得到它,但没有运气。如果你能提供一个理想的格式,这将真的很有帮助,这样我们就不必为了一次看到所有的代码滚动很多。谢谢,我想我得到了。但是现在我怎么才能得到这个字段的值呢?当我使用getValue(objectobj)时,它需要对象。然而,我所需要的只是返回要分配的字符串。@S.Doe像这样使用它——“specFields.GetValue(con.pmCS);”。如果答案有用,别忘了喜欢它。
var specFields = con.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "pmCS").FieldType.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Single(pi => pi.Name == "m_pm");