正确的C#转换对应VB的CTYPE()

时间:2010-07-12 18:19:53

标签: c# .net vb.net ado.net

以下是VB的一个片段,我正在移植到C#重写。我的问题是作业后receipt_date是什么?它仍然是object还是string

Dim receipt_date As Object
receipt_date = CType(dr.Item("RECTDT"), String)

这是正确的C#对应物吗?

object receipt_date;
receipt_date = dr["RECTDT"].ToString();

在这两个执行后, VB 版本,receipt_date等于 C#版本?如果没有,我需要做些什么才能做到这一点?感谢

2 个答案:

答案 0 :(得分:7)

是的,你最终会得到相同的结果。它在语义上与VB版本不同(你明确地调用ToString()而不是使用CType,这与C#中的强制转换相当,但它在功能上是相同的。它也更安全,因为在数据库中(在运行时中为DBNull)中抛出一个空值会引发异常。

只是为了全面,但实际的C#对应物是:

var receipt_date = (string)dr["RECTDT"];

但是,作为一种风格点,尽量避免使用隐式类型(即使用var关键字而不是简单类型使用stringint)。如果类型可能在将来发生变化(并且不重要),或者类型很长和/或复杂且var使其更具可读性,则var非常有用。在这种情况下,我建议:

string receipt_date = (string)dr["RECTDT"];

答案 1 :(得分:2)

VB的CType关键字或多或少等同于Convert.ToString,但不完全相同。

以下是VB ......

Dim receipt_date As Object 
receipt_date = CType(dr.Item("RECTDT"), String) 

...最好(或最密切)在C#中翻译成以下内容。

object receipt_date;
receipt_date = Convert.ToString(dr.Item["RECTDT"]);

顺便将CType(..., String)编译成Microsoft.VisualBasic.CompilerServices.Conversions.ToString