【问题标题】:Make mixed array variables?制作混合数组变量?
【发布时间】:2013-07-18 23:22:21
【问题描述】:

我想知道是否可以在数组中添加一些变量,并以简单的方式访问它们:

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

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

【问题讨论】:

  • 查看Dictionary 类。
  • 使用通用集合来实现这样的目标。

标签: c# arrays variables


【解决方案1】:

我认为您只是在寻找字典:

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,您可能会发现它们很有用。

【讨论】:

  • 初始化不需要括号吗? &lt;string, string&gt;() {
  • @AustinBrunkhorst 实际上,当您进行内联初始化 { } 时,括号是可选的。
  • 很高兴知道,对此并不积极。
猜你喜欢
  • 2013-12-22
  • 1970-01-01
  • 2021-12-25
  • 1970-01-01
  • 2018-11-03
  • 2013-06-22
  • 2019-06-05
  • 2013-09-14
  • 2014-11-01
相关资源
最近更新 更多