2014-01-28 102 views
-1

我使用Visual Studio 2013和C#比較變量名字符串

我希望能夠給一個字符串變量的名字與我創建一個字符串比較。

該字符串變量稱爲PRINT1(例如)

public string print1; 

然後創建一個字符串,象這樣:

foreach (int number in orderOfNumber) 
{ 
    string printNumber = String.Format("print{0}", number-1); 
} 

我捨棄此如果「編號」 = 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打印1

這是接近我想要的作爲print1的值實際上是1.234

有沒有辦法用原始變量print1替換'字符串'print1?

+1

解釋原始任務。你試圖做的事情看起來像是一個糟糕的設計決定。 – zerkms

+1

請改爲創建一個數組,而不要使用多個變量。 –

+2

爲什麼沒有'string []打印'(或其他[collection](http://msdn.microsoft.com/zh-cn/library/) ybcx56wz.aspx))?然後,您可以執行'打印[編號]'以獲得期望值,而不用擔心「print1」,「print2」,...「printN」變量。 – user2864740

回答

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[]

+0

啊。代碼支持什麼@ user2864740說。這正是我之後的做法。自從您將其寫爲答案之後,您就可以獲得接受的答案。 – smokeAndMirrors

+0

我覺得我的評論在技術上也是第一次:) –

+0

啊所以它是:) – smokeAndMirrors

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); 
    } 
} 
+0

這是一個解決方案..但對於一個不同的問題。 – user2864740

+0

我不認爲這是OP想要做的。他們想要在一個字符串中建立一個變量的名字,然後獲取該變量的值。據我所知,這是不可能的.. –

+0

@MikeChristensen肯定這是可能的 –