Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET';除了[联合国]装箱,字典还是哈希表?_C#_Data Structures_Migration_.net 1.1 - Fatal编程技术网

C# 在.NET';除了[联合国]装箱,字典还是哈希表?

C# 在.NET';除了[联合国]装箱,字典还是哈希表?,c#,data-structures,migration,.net-1.1,C#,Data Structures,Migration,.net 1.1,试图说服某人从.NET1.1转换 我看到有人说,在post.NET1.1中使用Dictionary类的一个优点是性能提高,因为不必取消对对象的绑定/强制转换。除此之外还有其他改进吗 或者任何其他离开.NET 1.1的一般优势?假设您已经意识到使用强类型集合的一般优势,null现在是一个有效值。如果旧哈希表为键查找返回了null,则可能意味着该键不存在,或者可能意味着该键引用了值null。你真的不知道 对于字典,如果直接查找,并且密钥不存在,则会引发异常 另外,.Net 2.0集合利用泛型来支持强

试图说服某人从.NET1.1转换

我看到有人说,在post.NET1.1中使用Dictionary类的一个优点是性能提高,因为不必取消对对象的绑定/强制转换。除此之外还有其他改进吗


或者任何其他离开.NET 1.1的一般优势?

假设您已经意识到使用强类型集合的一般优势,
null
现在是一个有效值。如果旧哈希表为键查找返回了
null
,则可能意味着该键不存在,或者可能意味着该键引用了值
null
。你真的不知道

对于字典,如果直接查找,并且密钥不存在,则会引发异常

另外,.Net 2.0集合利用泛型来支持强类型枚举(
IEnumerable
)。Net中IEnumerable的实现使用了惰性评估,这使得以前几乎不可能完成的所有有趣的事情变得简单(而且性能也很好!)。如果通过一个函数传递或返回数组或ArrayList,则可能有9次可以使用IEnumerable。我可以用两个词来回答这个问题:

类型安全

现在我要扩展。迁移到.NET2.0的最大好处可能是泛型和泛型集合。IMO比不必对值类型进行装箱和取消装箱的性能改进更大的好处(这其实没什么大不了的,除非您连续处理大量的整数数组列表)是不必对对象进行强制转换。或者,用两个词来说,“类型安全”。在编译时,您知道集合的底层类型是什么,并且不能偏离这一点。对于非泛型集合,您可以在其中抛出任何旧的东西,除非您在抛出之前反思类型(这是比拳击更大的性能打击),否则您可能会在不合适的时候抛出InvalidCastException

也就是说,为什么要停在2.0。NET3.0有WCF和WPF,它们是交流和展示的新方式。NET3.5具有LINQ和lambda表达式,这将改变处理集合的方式


告诉你的朋友停止生活在黑暗时代。是时候更新了

由于是强类型的,
字典
在编译时受到限制,因此是类型安全的。尝试添加不适当的值将导致编译错误。

使用泛型可以使字典类型安全,因此在编译时,您会发现可能试图添加错误对象的代码。这比由于意外数据类型导致的运行时崩溃要好。此外,还为数据键入了枚举数,使其更易于使用。不再需要强制转换当前属性。

如果您将主题仅限于通用容器,则不需要。但是,.NET 2.0在其他方面也引入了许多改进。请参阅以获得更完整的改进列表。

这并不是一个与性能相关的问题,但是IDE如何?VS2008 IDE从稳定性到功能,再到附加组件,都非常出色。。。winForm设计器使用起来非常简单。

其他优点:

GridView、母版页、网站地图、LINQ!!!!(3.5框架)

没有理由让任何开发人员(或公司)继续在VS2003中编写新的代码,至少我可以这样认为


现在,如果它是一个在1.1框架上编写的旧项目,那么这完全是另一回事……

对.NET1.1的支持何时停止?它已经不受支持了吗?您看到错误修复的机会有多大


此外,了解.NET1.1的人数每年都在减少。不久,了解VB6的人将比了解.NET1.1的人多


现在是升级的时候了。除非您仍然需要支持Windows 2000或更低版本,否则您没有太多理由不这样做。

从VS2003和.NET 1.1跃升到至少VS2005和.NET 2.0是物有所值的。2.0之后的.NET Framework的更高版本似乎都是附加的。没有或没有太多破坏性的.NET类库。他们只是添加了新的名称空间和类。据我所知,VS2008和即将发布的更高版本都支持向后兼容.NET2.0。这使得升级IDE几乎变得微不足道(我认为您必须将项目转换为VS2008项目类型),并且您可以在仍然使用旧版本的框架的同时获得新IDE增强的好处。我记得在VS2008 IDE中我喜欢的一些更大的东西是在ASP.NET中工作时的分割视图、新的CSS窗口和javascript intellisense(我相信这个特性是VS2008 SP1)

仅从个人经验来看,我们在使用活动报告时确实存在一些问题。为了使用新的IDE/框架,我们必须升级其版本。当我们从VS2008从VS2005迁移到VS2008时,我们的一些SSIS包项目没有正确打开,因为我们仍然使用SQL Server 2005,因此请务必检查您的2003 IDE与您可能正在运行的任何第三方应用之间的依赖关系


Ralphondo是正确的,如果我有代表的话,我会投他的票。泛型确实是一个游戏规则的改变者,它可以防止你必须自己创建类型集合来保证类型安全。认真地谷歌搜索你在.NET1.1和更高版本中需要做什么。区别在于白天和黑夜。

I(+1)我看到“现在我要扩展”的那一刻。非常好的措辞,我的朋友。不幸的是,我被困在黑暗时代有一段时间了。我继承了一个1.1项目,该项目与第三方组件相关联,这是2.0所没有的。(这实际上是这个项目的最小问题)。我一完成就要迁移它