代码之家  ›  专栏  ›  技术社区  ›  hectorsq

有没有更好的方法来初始化.NET中的Hastable而不使用Add方法?

c#
  •  16
  • hectorsq  · 技术社区  · 18 年前

    Hashtable filter = new Hashtable();
    filter.Add("building", "A-51");
    filter.Add("apartment", "210");
    

    我正在寻找一个更好的方法来做到这一点。

    Hashtable filter2 = new Hashtable() {
        {"building", "A-51"},
        {"apartment", "210"}
    };
    

    5 回复  |  直到 18 年前
        1
  •  36
  •   Paul Batum    18 年前

            Hashtable filter2 = new Hashtable()
            {
                {"building", "A-51"},
                {"apartment", "210"}
            };
    

    在C#3中编译得非常完美。鉴于您报告的编译问题,我猜您正在使用C#2?在这种情况下,您至少可以这样做:

            Hashtable filter2 = new Hashtable();
            filter2["building"] = "A-51";
            filter2["apartment"] = "210";
    
        2
  •  9
  •   Cristian Ciupitu    10 年前

    在C#3中,它应该像这样编译:

    Hashtable table = new Hashtable {{1, 1}, {2, 2}};
    
        3
  •  0
  •   JeeBee    18 年前

    Hashtable filter2 = new Hashtable() { "building" => "A-51", "apartment" => "210"};
    
    

    然而,我并不认为有必要这样做,在初始化后只需调用add并没有什么错。

    (我知道有人在过去使用Java编译器来实现Java的类似功能(几年后导致主要问题转移到Java 5),但我认为这不是C的选项!)

        4
  •  0
  •   Ta01    18 年前

    我对C#3.0一无所知 Hashtable table = new Hashtable {{1, 1}, {2, 2}};

    不管怎样,可怜人的实现:

    嗯,您可以扩展Hashtable类:

    class MyHashTable : System.Collections.Hashtable    
    {
        public MyHashTable(string [,] values)
        {
            for (int i = 0; i < (values.Length)/2; i++)
            {
                this.Add(values[i,0], values[i,1]);
            }
        }
    }
    

    然后从控制台应用程序:

        class Program
    {
        static void Main(string[] args)
        {
            string[,] initialize = { { "building", "A-51" }, { "apartment", "210" }, {"wow", "nerf Druids"}};
    
    
    
            MyHashTable myhashTable = new MyHashTable(initialize);
            Console.WriteLine(myhashTable["building"].ToString());
            Console.WriteLine(myhashTable["apartment"].ToString());
            Console.WriteLine(myhashTable["wow"].ToString());
            Console.ReadKey();
    
    
        }
    }
    

    将导致:

    210

    这件事做得很快,所以在某些情况下它可能会爆炸,但再次。。

        5
  •  -1
  •   SeaDrive    18 年前

    我认为真正被问到的问题可能是关于可想象的构造器,例如:

    HashTable ht=新的HashTable(MyArray);//从数组填充

    HashTable ht=新的HashTable(MyDataTable);//从数据表填充

    好吧,答案是“不”,但你可以自己写。我假设这些方法不在库中的原因是数组或数据表必须正确形成。这并不是什么大损失,因为这些方法的任何实现都可能在循环中使用Add方法。