gpt4 book ai didi

c# - 如何使用 C# 反射获取受常量影响的源值

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:43 25 4
gpt4 key购买 nike

这是我的问题:

我有一个类 A(来自项目 A)引用类 B(来自项目 B)。每个项目都构建到自己的程序集

 public class B
{
public const string CONSTANT_B= "Anything";

}


public class A
{
public const string filedA = B.CONSTANT_B;

}

我需要从 A 类中获取 fieldA 并验证它的值是否来自另一个类(这里是 B 类)。

我这样做了:

 var fieldInfo = typeof(A).GetFields(BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public)[0];
var value = fieldInfo.GetValue(BindingFlags.Default);

结果是:'任何'

那么我怎样才能得到 B.CONSTANT_B 呢?或者只是想知道 A 类是否需要引用 B 类。

我的目标是删除对项目 B 的引用(如果项目 A 未使用它)。那么我如何决定删除它或保留它呢?仅供引用:我有这些项目的源代码和二进制文件。

最佳答案

how please can I get B.CONSTANT_B instead?

当您构建项目 A 时,该字段的 是从类 B 的常量字段中读取并直接烘焙到代码中的。没有要查询的元数据或要反汇编的 IL 会告诉您该值来自 B.CONSTANT_B

您可以验证类 A 从类 B 获取常量的唯一方法是查看源代码。

另请注意,如果您更改 B.CONSTANT_B 的值,则该更改不会反射(reflect)在类 A 中,除非您重建该项目。

现在,如果两个字段都是 readonly 而不是 constant,您可以反汇编 IL 以查看项目 A 是否引用了 B 中的只读字段,但它仍然会无法通过反射获得。

关于c# - 如何使用 C# 反射获取受常量影响的源值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com