字符串作为变量名称

时间:2012-02-07 20:02:45

标签: c#

是否可以在C#中使用类似变量名的字符串?
我有一个:

String x = "matrix1_2";
Microsoft.VisualBasic.PowerPacks.RectangleShape y = ???;


??? - 应该有变量的名称... matrix1_2

7 个答案:

答案 0 :(得分:9)

不,你做不到,老实说拥有这样的功能毫无意义。

如果您需要使用键和值动态分配一些数据,可以使用字典:

Dictionary<string, RectangleShape> shapes = new Dictionary<string, RectangleShape>();
shapes.Add("matrix1_2", new RectangleShape( ... ));

然后你可以简单地阅读“变量”,如

shapes["matrix1_2"]

答案 1 :(得分:2)

不,不是。如果“matrix1_2”是一个局部变量,那么你不能这样做,因为变量在编译完成后可能不会存在,如果它实际上是一个实例字段,那么反射可能会有所帮助: / p>

object value = obj.GetType().GetField(fieldName).GetValue(obj);

答案 2 :(得分:1)

这是不可能的。

您不能在C#,VB.NET或任何.NET语言中拥有动态变量名称。没有这种功能的支持。

答案 3 :(得分:0)

似乎是一个坏主意。尝试使用枚举或自己的数据类型/类

答案 4 :(得分:0)

你可以用反射,但我怀疑在这种情况下,你可以实现一个比使用反射更好的设计。如果您提供更多信息,我们中的一个人可能会帮助您。

声明字典变量:

Dictionary<string, RectangleShape> rectangleDictionary = new Dictionary<string, RectangleShape>();

然后,您将在normallay中写入“matrix1_2 = somevalue;”,而不是写:

rectangleDictionary.add("matrix1_2", somevalue)

然后,您将能够使用变量名称:

rectangleDictionary["matrix1_2"] = someothervalue;
rectangleDictionary["matrix1_2"].someproperty = something;

Microsoft.VisualBasic.PowerPacks.RectangleShape y = rectangleDictionary["matrix1_2"]; 

答案 5 :(得分:0)

“matrix1_2”是否已存在?换句话说,当你说y = ???您是尝试访问现有变量还是创建变量。

据我所知,没有办法在运行时创建一个新的“命名”实例。但是,您可以检索现有字段的名称,并使用System.Reflection选择它们。

String x = "matrix1_2";
Microsoft.VisualBasic.PowerPacks.RectangleShape y;
Type type = typeof(MyType); // Get type pointer
FieldInfo[] fields = type.GetFields();
foreach (var field in fields)
{
        if (field.Name == "matrix1_2")
        {
            y = field;
        }
}
上面的

MyTypematrix1_2所有类的名称。

答案 6 :(得分:0)

您可以通过这种方式从动态类型中获取字段值(在Silverlight 5项目中使用C#)。

Type itemType = item.GetType();
try
{
    PropertyInfo field = itemType.GetProperty(fieldName);
    object val = field.GetValue(item, null);
}
catch (Exception ex)
{
    // field doesn't exist, do something else
}

*其中“item”是在运行时生成的动态类型(但不一定是),“fieldName”是您要查找的属性名称的字符串。