C# 字典或哈希表作为类中的参数化构造函数
我正在处理wpf应用程序,我必须将一些全局对象从一个类传递到另一个类,因此我要为该类声明一个参数化构造函数, 我关心的是哪一个作为参数、字典或哈希表性能更好。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
我读了这篇文章
下面的代码正在使用哈希表
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,因为您现在知道了设置是什么,所以可以为它们声明一个类型。通过使用较弱的类型或不必要的序列化,您可以省去运行时的麻烦。定义的编译类型也更快,没有查找时间。