2015-04-14 149 views
2

我正在研究一些Unity C#脚本。通过名称访问静态变量

public class SomeClass {  
    public static float radius; 
}  

我有一个class有很多static变量(我知道static变量可能是一个不好的做法,但我不是一个谁执行的那些static变量之一,我需要使用它们)的。

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

SomeFunction(string name) { theVariableCorespondingToTheName = val } 

这似乎微不足道,但无法弄清楚如何使它工作(我是新的C#)。我是否需要一个函数返回包含我的static字段的我的class中的变量的引用?

+2

使用一个'词典<字符串,浮>'来代替。然后添加像'dict.Add(“radius”,defaultValue)''的值。稍后,您可以通过'dict [name] = val;'来更新它们。 –

+0

没有看到您的帖子,谢谢我会尝试。 – Helixb

回答

1

显然,可以改进大量静力学设计。但是,看来,你有没有对其进行直接控制,所以这里使用反射来完成你所需要的一种方式:

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

你是否经常在代码中使用反射?大多数没有经验的用户要求反思,因为他们不知道其他方法来解决他们的要求。所以在大多数情况下,这些都是XY问题。 –

+0

对于便携式库,它看起来略有不同,但足够接近猜测。 – Georg

+1

@TimSchmelter看起来OP想要解决别人的代码。他不在寻找设计建议。 – dasblinkenlight

1

如果你真的不能改变设计,你必须使用反射。然而,那么编译器将不再知道所有的字段都被作为浮点类型输入,你会得到很多样板代码并失去很多性能。 根据您使用的.NET版本,反射的确切语法不同。

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