我正在使用Visual Studio 2013和C#
我希望能够将字符串变量的名称与我创建的字符串进行比较。
字符串变量名为print1(例如)
public string print1;
然后我创建一个字符串,如下所示:
foreach (int number in orderOfNumber)
{
string printNumber = String.Format("print{0}", number-1);
}
如果'number'= 1,我会丢弃这个,所以我不关心这个数字是0
我想要做的是在带有几行的MessageBox中打印一个字符串。 一行将在屏幕上单击两张图片之间花费时间。 基本上格式如下:
//所用时间:
1和2 - > 1.234秒
到目前为止我所拥有的是:
orderBuilder.Append(String.Format("{0} and {1}\t\t", orderOfNumber[number-1], orderOfPicturesNumber[number])).Append("" + printNumber + "\n");
无论我如何尝试,我总是以
结束1和2 print1
这接近我想要的,因为print1的值实际上是1.234
有没有办法用原始变量print1替换'string'print1?
答案 0 :(得分:1)
我会创建一个值数组:
public string[] prints;
当然,您必须使用要保留的值的数量对其进行初始化:
prints = new string[5]; // Holds five strings
然后,你可以循环遍历它们:
foreach (var number in prints) // Loop through each string in prints
{
string printNumber = String.Format("print{0}", number);
}
如果您希望能够为prints
动态添加或删除字符串,则应该使用List<string>
代替string[]
答案 1 :(得分:0)
尝试使用此代码:
PropertyInfo pi = this.GetType().GetProperty(printNumber);
string value = (string)(pi.GetValue(null, null));
您唯一必须做的就是将变量声明为属性。
来源:http://www.karpach.com/Reflection-Property-Value.htm
- 编辑 -
我找到了一个我不知道的方法... GetField可以返回字段值,这样您就不需要将变量声明为属性,可以直接使用它们。
public class SomeClass
{
public int a0 = 1;
public int a1 = 2;
public int a2 = 3;
public void DoSomething()
{
int result = 1;
for (int index = 0; index < 3; index++)
{
string fieldName = "a" + index;
var field = typeof(SomeClass).GetField(fieldName);
int fieldValue = (int)field.GetValue(this);
result *= fieldValue;
}
Debug.Assert(result == 6);
}
}