gpt4 book ai didi

c# - 为什么有必要对 'manually' 求值或强制转换对象的类型?

转载 作者:太空宇宙 更新时间:2023-11-03 17:31:37 25 4
gpt4 key购买 nike

手动,我的意思是代码好像我需要迎合,就好像对象不是我期望的那样。

例如,我正在使用中继器。作为其中的一部分,我正在操纵 DataSource 属性。为此,我必须先检查以下内容:

this.DataSource as List<MyObject>

如果它不是 MyObject 对象的列表,这将返回 null。如果我转换它,但它不是 MyObject 对象的列表,它会抛出异常。

这意味着此时已知它是否是 MyObject 对象的列表。

问题

那么,为什么不让我使用 this.DataSource 进行编码,因为它已经是已知的类型了?喜欢:

this.DataSource.First().Member

这个问题显然没有花言巧语,我并不是在暗示我应该能够做到这一点,我真的很想知道答案。

最佳答案

C# 是一种静态类型语言。这是故意的。静态类型在可维护性、工具、性能和可能还有其他方面都有好处。

在动态类型语言中,您确实可以编写这样的代码。 C# 语言确实可以这样定义,但选择不这样定义。

静态类型和动态类型之间的权衡很复杂,我无法在这个答案中详细说明。它已在网络上的许多地方进行了广泛讨论。

从 C# 4 开始,您也可以强制使用动态语义:

dynamic ds = this.DataSource;
Console.WriteLine(ds.First().Member); //compiles and works or fails at runtime

我建议您尽可能利用静态类型的力量。 dynamic 更像是特殊情况下的逃生舱口。

关于c# - 为什么有必要对 'manually' 求值或强制转换对象的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19907685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com