![]() |
1
14
或者,即使它与VB不同,也可以这样称呼它:
|
![]() |
2
8
:
好的,这里有一个C方法,据说它基本上是
这个方法真的可以重写,以提供与
下面是一个例子
VB语言:
C#:
这有什么意义
VB语言:
所以我认为
编辑 :好吧,我真遗憾发布了一些没有编译的VB代码。在重新考虑我说的话之后,我收回了我的话 第二 回答,但保持第一。
C#:
这是因为,如果
注:以下不准确,因为
另一方面,在处理加宽与缩小转换时,使用
VB语言:
|
![]() |
3
1
您可以自己实现:
可用性如下:
这是可行的,并且不涉及用户定义的转换器,因为泛型在运行时被“解析”,而类型转换在编译时被解析-框架实际上不会为每个泛型生成不同的实现
|
![]() |
4
1
实际上,如果编译器推断类型化变量无法转换为其他类型,那么它只会捕获DirectCast冲突
注意这个构造的危险性,当您在VB.NET中仅仅将double赋值给integer时,double会意外地缩小为integer。
[编辑]
在C#中不需要使用DirectCast,运行时还可以防止长整型值的加载。这就是csauve所争论的,即C#没有DirectCast,DirectCast可以阻止分配不同类型的变量,而“因为”C#没有这个DirectCast,它将在分配不同类型时自动出错。但正如你所见,事实并非如此,C#的角色是 确切地 与DirectCast相同。这将导致 无效例外 运行时错误:
运行时错误 如上所述:
现在,这就是“有趣”的部分,在VB.NET中,你必须记住许多关键字才能完成一些事情。在C语言中,如果一个给定的关键字可以在另一个场景中使用(比如在这个变量的向下转换中),他们不会发明另一个关键字来实现它。
在VB.NET中,如果确实要向下转换变量,并希望采用正交方式进行转换,即只记住一个关键字,则必须执行以下操作:
但那是不会编译的,那么如何实现长到整数的向下转换呢?你必须记住VB.NET的其他关键字。而在C#中,它是正交的,可以使用这个构造来取消对变量的装箱
隐马尔可夫模型。。我认为这种混乱源于对
这是一个低沉的声音。。。
…不等于:
如果要执行向下投射,必须执行以下操作:
现在,如果一个VB.NET程序员是通过意图编程的,并且在编码时不困倦,那么当他完全意识到DirectCast不能分配不同的类型时,为什么他会使用DirectCast呢?如果VB.NET程序员真正想要的是向下转换,那么他首先就不应该尝试DirectCast。现在,VB.NET程序员在发现DirectCast不能用于向下转换时,必须将他编写的内容退格,并用CInt(或CType)替换它 |
![]() |
5
1
VB.NET版本:
C#:
|
![]() |
6
0
关于。。。
|
![]() |
7
0
让我试试这个。 首先,让我澄清一下。这个 不会 编译:
VB的CType在VB中,可以使用:
VB的DirectCast
从这个解释来看,这将是一个直接相当于C#演员阵容。但是,在C#中,您只需要为强制转换指定强制转换运算符。铸造是完全可选的。例子:
VB的TryCast您已经正确理解了这相当于C#as关键字。 |
![]() |
8
0
我认为这个场景最好地概括了为什么DirectCast对非对象(object关键字)类型的编译时类型检查安全性有错误的感觉,并且只是为了退格。
C#编码器在发现float不能直接赋值给long并且不会编译时,将执行以下操作:
这是正确的。
VB.Net程序员:“请让我做我的投标,请编译,请……”
这就是我所说的DirectCast具有错误的编译时类型检查安全性。如果程序员不知道何时何地应该使用DirectCast,那么DirectCast就意味着要退格。DirectCast是一个安全毯 不是一直穿的。 如果DirectCast最终不被使用,它在这种情况下有多有用?
@朱尔斯 我并不是说所有的VB.NET程序员都不知道DirectCast的真正用途是什么,他们中的一些人确实知道DirectCast只用于对象类型(以及装箱在对象中的基本类型)。 有一种情况是,VB.NET程序员将现有的C代码重新编码到VB.NET中,会得出错误的结论,即预期(无论正确与否)语言之间是对称的。 当他在代码中看到这个结构。。。
现在,因为我们程序员喜欢对称,我们中的一些人(如果我不知道CLng的话,我可能也会这样)会倾向于转换这些代码。。。
…对此:
如果一个C#人将C#代码转换成VB.NET,他会因为这里明显缺乏对称性而感到沮丧。
但是要避免VB.NET程序员犯错误地推断出第一个代码的意图。上面的C#代码片段
不兼容的类型分配,与等效的VB.NET
现在把一个变量类型转换成另一个兼容的类型,就像我们转换这段代码一样。。。
…此代码:
我们必须转换这个代码。。。
…此代码:
铸造 在我看来,DirectCast应该被命名为 铸件
|
![]() |
9
0
在C#中有两种类型的强制转换。如果没有额外的代码,就没有与C#中的DirectCast关键字等价的东西。如果你没有自己创建它,最接近的方法就是使用
您有:
和
在第二阶段,
What is the difference between explicit and implicit type casts? |
![]() |
10
0
AFAICT,引用类型使用
在C#中,从
有趣的是,如果你用一种中间物
|
![]() |
11
-1
铸件应相同;它抛出了一个InvalidCastException。试试这个C#:
|
![]() |
Karl · 如何引发PrintPage的事件? 2 年前 |
![]() |
Daniel · LINQ从列表的dataTable中提取部分匹配 2 年前 |
![]() |
limelatte · 如何在datagridview中屏蔽特定列? 2 年前 |
![]() |
Orsi · 选择嵌套列表的最大值和最小值。网 2 年前 |
![]() |
D T · 如何为Excel Com设置公式? 2 年前 |
![]() |
Lenin · 将数组中的每个元素与另一个数组中的相应元素相乘 2 年前 |