如何使一個變數的名稱等於另一個變數的值?-.net?

遇到了一個問題

id=0;

for(int count = 8; id&{

Panel /*這個地方是變數名稱,或者說控制項id?它的名字等於id的值*/ = new Panel();

}


放進Dictionary&裡面


不明白你要表達啥,但這個循環………………


只贊同輪子哥的答案,這邊寫個完整版的。

(開始第一想法也是用反射,但是後面發現實際上完全不需要用反射。)

using System.Reflection;

namespace abc
{
public class Test
{
public string InstanceName { get; set; }
}

class Program
{
static void Main(string[] args)
{
string[] names = { "a", "b", "c" };
Dictionary& dictionary = new Dictionary&();
//Type type = typeof(Test);
foreach (var name in names)
{
//Test obj = (Test)Assembly.GetExecutingAssembly().CreateInstance("abc.Test"); //type.FullName
//obj.InstanceName = name;
dictionary.Add(name, new Test { InstanceName = name });
}

foreach(var item in dictionary)
{
Console.WriteLine(item.Value.InstanceName);
}
Console.ReadKey();
}
}
}


感覺沒必要這麼整吧?做一個Panel對象的List即可。

看到前面有個人寫了個PHP的,我就順手寫個Python的吧:

In [2]: for i in range(10):
...: vars()["a"+str(i)] = 10 * i
...:

In [3]: a0
Out[3]: 0

In [4]: a9
Out[4]: 90

In [5]: a8
Out[5]: 80


我覺得你可能需要的是這個?

String inputtype = "blablabla";
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(inputtype);


用數組不就行了……另外這for循環的寫法也是骨骼驚奇……_(:з」∠)_


這種需求用「最好的語言」很容易就實現了

&

.net不能實現說明它「不好」


如果你的id是確定從0開始順序增長的,可以用List&來存

list[id]就是引用某一個

遍歷可以用foreach

如果你的id是不確定的int,可以用Directory&


CSharpCodeProvider.CreateCompiler()

C#動態編譯


建議使用集合。比如list&

然後在循環裡面添加每個panel就好了。


不要用反射,或者說不要用顯式的變數名

根據題主的需求,用字典應該是最合適的

面向對象首先要明白這是什麼對象,在這個場景,對象就是一個panel的集合,集合就用集合來表示,而不是聲明集合中的每一個元素


哦哦,我剛開始寫程序的時候也遇到這樣的問題

比如我用班級每個學生創建一個變數,希望學生的名字就是這個變數的名稱。

後來發現,這種思路完全是錯的。


不是很確定你的需求,如果你真的只是需要動態的創建一個對象的話,可能需要反射實現。

如果你只是需要創建count-8個Panel對象,可以直接將這些新建的對象放到一個List&中,在使用的時候從這個List裡面取出來就行了。真的不是很明白,這個對象名稱要這樣搞的意義。

var listPanel = new List&();
for(int id= 0; id &< 8; id++) { listPanel.Add(new Panel(){ Name = $"panel{id}"}); }

在使用的時候,如果需要對list裡面的每個對象都操作就直接foreach這個list:

foreach(var panel in listPanel)
{
//panel
}

如果只針對定的對象操作,只需要先查找出來:

var panel = listPanel.FirstOrDefault(p =&> p.Name == "panel8");


Instantiating Classes through reflection using C# – Dynamic Object Creation

把你的代碼做些改動然後寫進一個字元串,最後編譯你這段代碼後做反射。

是不是很智障的解法?


這個需求有什麼用?如果是動態添加類成員變數的話,用反射就好。


應該是你解決問題的思路不對。即使可以那樣做,退出for循環之後,那些變數也會退出作用域,那麼那些變數名有什麼意義呢?


推薦閱讀:

.NET Core是否會取代.NET Framework?
為什麼沒有新的支持底層達到類似C++這種程度,而易用性達到C#的語言出現?
.NET Core 開源對移動開發有什麼意義?
C#的開發,什麼時候用到了棧的先進後出機制?
如何評價.NET Core 1.0稱使用.NET Core運行速度是Node.js的八倍,Go的三倍?

TAG:NET | 程序 | ASPNET | C# |