1 c# types casting object .net-4.0
通过手动,我的意思是代码,好像我需要迎合,好像对象不是我期望的那样.
例如,我正在使用转发器.作为其中的一部分,我正在操纵DataSource属性.要做到这一点,我必须首先检查以下内容:
this.DataSource as List<MyObject>
Run Code Online (Sandbox Code Playgroud)
如果它不是MyObject对象的List,则返回null.如果我转换它,并且它不是MyObject对象的List,它将抛出异常.
这意味着此时已知它是否是MyObject对象的List.
题
那么为什么不让我用this.DataSource编码,因为它已经知道它已经是那种类型?喜欢:
this.DataSource.First().Member
Run Code Online (Sandbox Code Playgroud)
在这个问题上显然没有任何修辞,我并不是说我应该能够做到这一点,我真的对答案很感兴趣.
C#是一种静态类型语言.这是故意的.静态类型对可维护性,工具,性能以及可能的其他方面都有好处.
在动态类型语言中,您确实可以编写这样的代码.确实可以像这样定义C#语言,但是选择它不是.
静态和动态类型之间的权衡是复杂的,我不能在这个答案中完全阐述它.它已在许多地方在网上广泛讨论过.
从C#4开始,您也可以强制动态语义:
dynamic ds = this.DataSource;
Console.WriteLine(ds.First().Member); //compiles and works or fails at runtime
Run Code Online (Sandbox Code Playgroud)
我建议你尽可能地利用静态打字的力量.dynamic对于特殊情况,它更像是一个逃生舱.