是否可以在C#中使用类似变量名的字符串?
我有一个:
String x = "matrix1_2";
Microsoft.VisualBasic.PowerPacks.RectangleShape y = ???;
??? - 应该有变量的名称... matrix1_2
答案 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;
}
}
上面的 MyType
是matrix1_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”是您要查找的属性名称的字符串。