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