C# 字典或哈希表作为类中的参数化构造函数

C# 字典或哈希表作为类中的参数化构造函数,c#,wpf,dictionary,constructor,hashtable,C#,Wpf,Dictionary,Constructor,Hashtable,我正在处理wpf应用程序,我必须将一些全局对象从一个类传递到另一个类,因此我要为该类声明一个参数化构造函数, 我关心的是哪一个作为参数、字典或哈希表性能更好。 我读了这篇文章 下面的代码正在使用哈希表 public partial class Sample: Window { Hashtable session = new Hashtable(); string Path= string.Empty; string PathID= string.Em

我正在处理wpf应用程序,我必须将一些全局对象从一个类传递到另一个类,因此我要为该类声明一个参数化构造函数, 我关心的是哪一个作为参数、字典或哈希表性能更好。
我读了这篇文章

下面的代码正在使用哈希表

      public partial class Sample: Window
        {
      Hashtable session = new Hashtable();

 string Path= string.Empty;
 string PathID= string.Empty;

           public Sample(Hashtable hashtable)
            {
                if (session != null)
                {
                    this.session = hashtable;
                    Path= session["Path"].ToString()
                    PathID= session["MainID"].ToString();
                }
                InitializeComponent();
            }
     private void Window_Loaded(object sender, RoutedEventArgs e)
            {
            }
    }
不会的

public Sample(string path, string mainId)
{
    this.Path = path;
    this.PathID = mainId;

    InitializeComponent();
}
更简单、更快、更容易阅读,给编译时带来错误等等


如果要传递的值太多

class NumerousSettings
{
    public string Path {get; set;};
    public string MainId  {get; set;};
    ...
}

public Sample(NumerousSettings settings)
{
    if (settings == null)
    {
        throw new CallTheDefaultContructorException();
    }

    this.Path = settings.Path;
    this.PathID = settings.MainId;
    ...

    InitializeComponent();
}
不会的

public Sample(string path, string mainId)
{
    this.Path = path;
    this.PathID = mainId;

    InitializeComponent();
}
更简单、更快、更容易阅读,给编译时带来错误等等


如果要传递的值太多

class NumerousSettings
{
    public string Path {get; set;};
    public string MainId  {get; set;};
    ...
}

public Sample(NumerousSettings settings)
{
    if (settings == null)
    {
        throw new CallTheDefaultContructorException();
    }

    this.Path = settings.Path;
    this.PathID = settings.MainId;
    ...

    InitializeComponent();
}
我读了这篇文章

好吧,马克的回答似乎很清楚

“如果您是.NET 2.0或更高版本,您应该更喜欢字典(和其他通用集合)

一个微妙但重要的区别是Hashtable支持多个读线程和一个写线程,而Dictionary不提供线程安全。如果您需要通用字典的线程安全,则必须实现自己的同步或(在.NET 4.0中)使用ConcurrentDictionary。“

如果不需要线程安全,那么字典是类型安全和性能的首选方法

我读了这篇文章

好吧,马克的回答似乎很清楚

“如果您是.NET 2.0或更高版本,您应该更喜欢字典(和其他通用集合)

一个微妙但重要的区别是Hashtable支持多个读线程和一个写线程,而Dictionary不提供线程安全。如果您需要通用字典的线程安全,则必须实现自己的同步或(在.NET 4.0中)使用ConcurrentDictionary。“


如果您不需要线程安全,那么字典是类型安全和性能的首选方法。

哈希表
是非类型的,在我看来您需要一个
IDictionary
,或者更好的是,定义一个实际代表您的设置的类。根据我的经验,字典速度更快,但只读。。。你可以指定一本字典,但只能从中阅读。如果要编辑其中的数据,就必须使用哈希表。@newargument:为什么是只读的?从来没有。。@O.R.Mapper;只读,因为您只能在开始时定义它,然后在整个应用程序中从中读取。字典的目的是使用关键字或值快速查找其中的数据。在定义一个键/值之后,我从未能够编辑它。我可能大错特错了。@newagrition:您可以在字典上使用或随时使用方法,也可以使用哈希表设置或覆盖项。
哈希表是非类型的,在我看来,您似乎想要一个
IDictionary
,或者更好的是,定义一个实际表示您的设置的类。根据我的经验,字典,速度更快,但为只读。。。你可以指定一本字典,但只能从中阅读。如果要编辑其中的数据,就必须使用哈希表。@newargument:为什么是只读的?从来没有。。@O.R.Mapper;只读,因为您只能在开始时定义它,然后在整个应用程序中从中读取。字典的目的是使用关键字或值快速查找其中的数据。在定义一个键/值之后,我从未能够编辑它。我可能大错特错了。@newagrition:您可以在字典上使用或在任何时候使用,也可以使用设置或覆盖项。为了简单起见,我展示了对象,其中有两个以上的项hashtable@Buzz,因为您现在知道了设置是什么,所以可以为它们声明一个类型。通过使用较弱的类型或不必要的序列化,您可以省去运行时的麻烦。定义的编译类型也更快,没有查找时间。为了简单起见,我显示了对象,其中可能有2个以上的项hashtable@Buzz,因为您现在知道了设置是什么,所以可以为它们声明一个类型。通过使用较弱的类型或不必要的序列化,您可以省去运行时的麻烦。定义的编译类型也更快,没有查找时间。