按名称访问静态变量

时间:2015-04-14 08:22:19

标签: c# unity3d static ref

我正在研究一些Unity C#脚本。

public class SomeClass {    
     public static float radius;
}    

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

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

SomeClass.radius = val

这似乎微不足道,但无法弄清楚如何使其工作(我是C#的新手)。我是否需要一个函数来返回包含SomeFunction(string name) { theVariableCorespondingToTheName = val } 字段的class变量的ref?

2 个答案:

答案 0 :(得分:1)

如果你真的无法改变设计,你必须使用反射。但是,编译器将不再知道所有字段都被键入为浮点数,并且您将获得大量样板代码并且会失去很多性能。 根据您使用的.NET版本,Reflection的确切语法是不同的。

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

答案 1 :(得分:1)

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

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