通过名称访问静态变量

Access static variables by their names

我正在编写一些 Unity C# 脚本。

public class SomeClass {    
     public static float radius;
}    

我有一个 class 有很多 static 变量(我知道 static 变量可能是一种不好的做法,但我不是实现这些 static 变量,我需要使用它们)。

在另一个脚本中,我需要更改这些变量的值。 所以我使用 SomeClass.radius = val 访问它们,但我想使用它们的名称访问它们:

SomeFunction(string name) { theVariableCorespondingToTheName = val }

这看起来微不足道,但不知道如何让它工作(我是 C# 的新手)。我是否需要一个 returns 包含 static 字段的 class 变量引用的函数?

实在改不了设计,就得用反射了。然而,编译器将不再知道所有字段都被键入为浮点数,您将获得大量样板代码并损失大量性能。 反射的确切语法根据您使用的 .NET 版本而有所不同。

如果允许您更改字段,更好的解决方案是按照 Tim Schmelter 在评论中的建议创建一个 Dictionary<string, float>

显然,可以改进具有大量静力学的设计。但是,您似乎无法直接控制它,所以这里有一种使用反射来完成您需要的方法:

typeof(SomeClass).GetField("radius").SetValue(null, val);