2013-07-18 57 views
1

我在想,如果我可以在陣列中增加一些變數,根本方法一樣訪問它們的:製作混合數組變量?

string[] ArrayName = { 
    string abc; 
    string varName; 
} 

//and later access them like: 
Console.WriteLine(ArrayName[ab+"c"]); 
+2

查看「Dictionary」類。 – Matthew

+1

使用泛型集合來實現這樣的事情。 – RahulD

回答

5

我認爲你只是在找一個詞典:

var ArrayName = new Dictionary<string, string> { 
    { "abc", "something" }, 
    { "varName", "something" }, 
}; 

Console.WriteLine(ArrayName["ab"+"c"]); 

首先編輯

或者,你可能知道,C#,您可以overload operators像索引 - 所以如果你想,你可以寫一個類來定義它自己的特殊行爲obj["string"](返回一個同名的成員,或其他任何東西)。

public class IndexableClass 
{ 
    private string _abc = "hello world"; 

    public string VarName { get; set; } 

    public string this[string name] 
    { 
     get 
     { 
     switch (name) 
     { 
      // return known names 
      case "abc" : return _abc; 

      // by default, use reflection to check for any named properties 
      default : 
       PropertyInfo pi = typeof(IndexableClass).GetProperty(name); 
       if (pi != null) 
       { 
        object value = pi.GetValue(this, null); 
        if (value is string) return value as string; 
        else if (value == null) return null; 
        else return value.ToString(); 
       } 

       // if all else fails, throw exception 
       throw new InvalidOperationException("Property " + name + " does not exist!"); 
     } 
     } 
    } 
} 

static void Main() 
{ 
    var ArrayName = new IndexableClass(); 
    Console.WriteLine(ArrayName["ab" + "c"]); 
} 

第二個編輯

也有匿名類型var ArrayName = new { abc = "something" };)和dynamic types,這可能對你有用。

+0

初始化是否需要括號? ''(){' –

+2

@AustinBrunkhorst實際上當你有內聯初始化'{}'時,括號是可選的。 – McGarnagle

+0

很高興知道,對此並不積極。 –