2013-12-16 168 views
3

是否有一種方便的方法來獲取變量並將其轉換爲代碼可讀的內容?我現在所擁有的有點像這樣寫着:將字符串轉換爲命令?

int buttonNumber = 3; 
int buttonShow = 0; 
ButtonChanger bC; 

void Update() { 
    if(buttonNumber == 1) { 
     buttonShow = bC.Change1; 
    } 
    if(buttonNumber == 2) { 
     buttonShow = bC.Change2; 
    } 
    if(buttonNumber == 3) { 
     buttonShow = bC.Change3; 
    } 

我想做什麼就能做的是更多這樣的:

int buttonNumber = 3; 
int buttonShow = 0; 
ButtonChanger bC; 

void Update() { 
    buttonShow = ("bC.Change" + buttonNumber).toCode(); 
} 

回答

1

像這樣的事情retrive關鍵?

using System; 

namespace ConsoleApplication1 
{ 
    enum ButtonChanger 
    { 
     Change1 = 1, 
     Change2 = 2, 
     Change3 = 3 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      var changer = GetButtonChanger(2); 

      Console.WriteLine(changer); 
      Console.WriteLine((int)changer); 
     } 

     private static ButtonChanger GetButtonChanger(int i) 
     { 
      return (ButtonChanger)Enum.Parse(typeof(ButtonChanger), string.Format("Change{0}", i)); 
     } 
    } 
} 
1

嘗試使用字典<>。它可以讓你有關鍵的價值對。所以你的重點將是bC.Change,您可以使用密鑰()方法

Dictionary<string, int> data = new Dictionary<string, int>(); 
data.Add("Change1", 123); 
data.Add("Change2", 456); 
foreach (string key in data.Keys) 
{ 
    Console.WriteLine(key); 
} 
0

我不知道如果我理解你的權利,但鑑於你的標題...到我假定你正在尋找執行在ButtonChanger方法的一般方法的命令

如果您ButtonChanger類是Component類型或GameObject,你可以使用SendMessage方法:

MyClass.cs

const string ButtonShowPrefix = "Change"; 
ButtonChanger bC; 

void Update() { 
    bC.SendMessage (ButtonShowPrefix + buttonNumber, SendMessageOptions.DontRequireReceiver); 
} 

ButtonChanger.cs

void Change1() { 
    // do stuff for button 1 
} 

void Change2() { 
    // do stuff for button 2 
} 

請注意,可以將參數傳遞給被調用的方法,但無法返回值。因此,如果您需要國家信息,則必須使用ButtonChanger中的公共成員解決此問題。

由於SendMessage被認爲有點貴,您應該避免不必要的調用,以免不採取任何措施。

如果事情變得越來越複雜,我會建議將其與gulshanm01方法結合使用字典將標識符映射到方法。