.NET 中的 PHP 变量变量

PHP variable variables in .NET

提问人:Dinah 提问时间:8/28/2009 更新时间:8/28/2009 访问量:256

问:

.NET 本身是否支持类似于 PHP 的变量变量

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


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

.NET PHP 变量

评论

0赞 Tyler Carter 8/28/2009
我真的不认为有人会说变量不好。不过,使用用户输入来访问变量可能是。

答:

1赞 Andrew Hare 8/28/2009 #1

不,没有一种 .NET 语言支持此类内容。这可以由其中一个编译器团队实现,但我怀疑他们是否会这样做。

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

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

评论

1赞 Vinko Vrsalovic 8/28/2009
他们永远不需要。他们有时只是通过减少输入来使事情变得更容易。对于所有潜在成本来说,这并不是一个很大的好处。
0赞 Dinah 5/24/2012
@VinkoVrsalovic:我把这种评估称为意见问题。在 PHP 中,我发现变量对于创建轻量级的土布 MVC 框架有很大的好处。我没有为我的观点创建另一种模板语法,而是使用 PHP 作为它最初预期的模板语言。我敢肯定,对我的决定有很多合理的批评,但它允许我立即创建一个轻量级且非常强大的 MVC 框架。这对我来说非常有用。
0赞 Vinko Vrsalovic 5/24/2012
@Dinah 你在表达我的观点。它们不是必需的,它们可以很方便,就像它们对你来说一样。您当然可以(几乎同样容易地)在PHP中创建一个PHP模板系统,而无需使用它们。
0赞 Dinah 5/25/2012
@VinkoVrsalovic:当你争论什么是“需要”时,你就踩在危险的土地上。单独查看时,真正需要的语言功能或库组件很少。在收益与潜在成本的问题上,我认为我们应该同意不同意。
6赞 Vinko Vrsalovic 8/28/2009 #2

为什么不直接使用字典呢?

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

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

stuffHash[varname] = value;

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

评论

1赞 Jim W 8/28/2009
同意。使用字典将是最简单的。可能希望将其声明为 Dictionary<string,object>然后将对象转换为您正在使用的任何类型。
0赞 Vinko Vrsalovic 8/28/2009
是的,<string,object> 可能更适合,但具体取决于实际使用情况。
3赞 Mike Dinescu 8/28/2009 #3

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

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

1赞 Noldorin 8/28/2009 #4

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

评论

0赞 Vinko Vrsalovic 8/28/2009
我不会称使用字典为黑客。我会称 $a = “foo”;$$a == $foo黑客攻击。
0赞 Noldorin 8/28/2009
在试图模仿动态语言的背景下,在我看来,这绝对是一种黑客攻击。
0赞 Vinko Vrsalovic 8/29/2009
我想说的是,在动态语言中使用变量充其量是一种黑客攻击,并且对于该用例有更好的解决方案。
0赞 Noldorin 8/29/2009
@Vinok:事实上,即使在动态语言中,它们的使用也经常是一种黑客攻击。我在这里的意思是,实现是一个黑客。