Reflection GetField() 不适用于 GetType(),仅适用于 typeof(T)

问题描述 投票:0回答:1

我在反思中遇到了一些奇怪的行为。这似乎是一个错误。 我一直在我的 C# 项目中使用反射来访问各种自定义数据类型中的公共字段。我一直使用 mono 在 Mac 上运行我的代码,但这是我第一次使用“dotnetpublish-r osx-x64 -c Release --self-contained -p:PublishAot=true 构建了一个本机独立项目”。除了 GetField/GetFields 之外,一切正常。

我的项目中的一个类有一个名为 name 的公共字符串,例如。假设该类名为 being

//o is of type object which is an instance of being
o.GetType().GetField("name").SetValue(o, "somevalue");

上面的代码行因未将对象引用设置为对象实例而崩溃,因为 GetField("name") 返回 null。同样,即使我有数十个公共字段,GetFields()也会返回一个空数组。

这对我来说似乎是一个错误的原因是,如果我首先以这种方式访问它就会起作用:

var field = typeof(being).GetField("name");

我什至不需要对 field 做任何事情。只需在 typeof(being) 上调用 GetField() 将使我的实例中的 GetType() 突然开始返回字段。嗯?既然上面的行根本不涉及,这怎么可能呢? 无论它是否是错误,我都需要一个解决方法。在某些情况下,我在编译时不知道类型,因此无法执行 typeof(being)、typeof(monster) 等操作。我必须依赖 GetType()。

提前致谢!

c# reflection aot
1个回答
0
投票

谢谢您的询问,

我可以看看你的课吗?

© www.soinside.com 2019 - 2024. All rights reserved.