2

.NET 本身是否支持类似于 PHP 的变量变量的任何东西?

如果不是,那么如何1这样的功能最容易实现?


1如果您认为可变变量总是不好,请随意陈述您的情况,但主要问题是:如何实现它们?

4

4 回答 4

6

为什么不只使用 Dictionary ?

Dictionary<string,string> stuffHash = new Dictionary<string,string>();

string varname = "TheNameOfTheVar";
string value = "foo";

stuffHash[varname] = value;

没有必要做这种丑陋的事情。

于 2009-08-28T15:20:34.863 回答
3

.Net 本身不支持“变量”——可能主要是因为它是一种[强类型语言][1]。

但是,它确实支持在运行时动态创建类型的实例,这可用于完成与 PHP 变量变量类似的行为。

于 2009-08-28T15:21:14.347 回答
1

不,.NET 语言都不支持这样的东西。这可以由一个编译器团队来实现,但我怀疑他们是否会这样做。

至于您(而不是 C# 编译器团队)如何实现这一点,是将所有变量变量存储在 a 中Dictionary<String,Object>- 这将允许您将字符串与对象相关联。

我从来没有真正理解变量变量解决了什么问题(换句话说,我从来没有听说过需要使用它们的好论据)。我很想看看一个需要它们的例子,因为我想找到一个更好的方法来解决没有可变变量的问题不会太难。

于 2009-08-28T15:19:54.773 回答
1

这是一个深深嵌入在动态语言中的特性。C# 起源于静态的、面向对象的语言,直到 C# 3.0 这意味着没有运气以任何适当的方式完成你想要的。但是,C# 4.0/.NET 4.0 引入了dynamic关键字,它允许动态类型化变量,就像在 PHP 中一样。不幸的是,尽管这是 C# 成为静态/动态混合语言道路上的一次飞跃,但它缺少eval几乎所有动态语言都具有的关键功能。借助传闻中的 C# 5.0/.NET 5.0 的编译器即服务功能,这将有效地引入(尽管内部行为不会相同)。Dictionary在那之前,除了使用 a来存储变量名的技巧之外,没有像样的解决方案。

于 2009-08-28T15:29:01.273 回答