将变量名称与字符串进行比较

时间:2014-01-28 23:36:19

标签: c# string stringbuilder string.format

我正在使用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?

2 个答案:

答案 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);
    }
}