2

.NETは、PHPの変数変数に類似したものをネイティブにサポートしていますか?

そうでない場合、そのような機能を最も簡単に実装するにはどうすればよいでしょうか


1変数変数が常に悪いと思う場合は、自由にケースを述べてください。ただし、主な質問は、変数をどのように実装できるかということです。

4

4 に答える 4

6

辞書を使ってみませんか?

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言語もこのようなものをサポートしていません。これはコンパイラチームの1つによって実装される可能性がありますが、彼らがそれを実行することはないと思います。

これを(C#コンパイラチームではなく)ユーザーがどのように実装できるかについては、すべての変数変数をに格納Dictionary<String,Object>することです。これにより、文字列をオブジェクトに関連付けることができます。

変数変数によってどのような問題が解決されるかを実際に理解したことはありません(言い換えると、変数を使用する必要があるという良い議論を聞いたことがありません)。変数変数なしで問題を解決するためのより良いアプローチを見つけるのはそれほど難しくないと思うので、それらが必要とされた例を見たいと思います。

于 2009-08-28T15:19:54.773 に答える
1

これは、動的言語に深く組み込まれている機能です。C#は静的なオブジェクト指向言語としてのルーツを持っており、C#3.0までは、これはあなたが望むことを適切な方法で達成する運がないことを意味します。ただし、C#4.0 / .NET 4.0では、PHPの場合と同様に、変数を動的に入力できるdynamicキーワードが導入されています。残念ながら、これはC#が静的/動的ハイブリッド言語になる道のりの飛躍ですが、evalほとんどすべての動的言語が持つ重要な機能が欠けています。噂されているC#5.0 / .NET 5.0のサービスとしてのコンパイラ機能により、これが効果的に導入されます(ただし、内部の動作は同じではありません)。Dictionaryそれまでは、変数名を格納するためにを使用するというハック以外に適切な解決策はありません。

于 2009-08-28T15:29:01.273 に答える