.NET 本身是否支持类似于 PHP 的变量变量的任何东西?
如果不是,那么如何1这样的功能最容易实现?
1如果您认为可变变量总是不好,请随意陈述您的情况,但主要问题是:如何实现它们?
为什么不只使用 Dictionary ?
Dictionary<string,string> stuffHash = new Dictionary<string,string>();
string varname = "TheNameOfTheVar";
string value = "foo";
stuffHash[varname] = value;
没有必要做这种丑陋的事情。
.Net 本身不支持“变量”——可能主要是因为它是一种[强类型语言][1]。
但是,它确实支持在运行时动态创建类型的实例,这可用于完成与 PHP 变量变量类似的行为。
不,.NET 语言都不支持这样的东西。这可以由一个编译器团队来实现,但我怀疑他们是否会这样做。
至于您(而不是 C# 编译器团队)如何实现这一点,是将所有变量变量存储在 a 中Dictionary<String,Object>
- 这将允许您将字符串与对象相关联。
我从来没有真正理解变量变量解决了什么问题(换句话说,我从来没有听说过需要使用它们的好论据)。我很想看看一个需要它们的例子,因为我想找到一个更好的方法来解决没有可变变量的问题不会太难。
这是一个深深嵌入在动态语言中的特性。C# 起源于静态的、面向对象的语言,直到 C# 3.0 这意味着没有运气以任何适当的方式完成你想要的。但是,C# 4.0/.NET 4.0 引入了dynamic
关键字,它允许动态类型化变量,就像在 PHP 中一样。不幸的是,尽管这是 C# 成为静态/动态混合语言道路上的一次飞跃,但它缺少eval
几乎所有动态语言都具有的关键功能。借助传闻中的 C# 5.0/.NET 5.0 的编译器即服务功能,这将有效地引入(尽管内部行为不会相同)。Dictionary
在那之前,除了使用 a来存储变量名的技巧之外,没有像样的解决方案。