通过名称访问静态变量
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);
我正在编写一些 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);