以下是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#版本?如果没有,我需要做些什么才能做到这一点?感谢
答案 0 :(得分:7)
是的,你最终会得到相同的结果。它在语义上与VB版本不同(你明确地调用ToString()
而不是使用CType
,这与C#中的强制转换相当,但它在功能上是相同的。它也更安全,因为在数据库中(在运行时中为DBNull
)中抛出一个空值会引发异常。
只是为了全面,但实际的C#对应物是:
var receipt_date = (string)dr["RECTDT"];
但是,作为一种风格点,尽量避免使用隐式类型(即使用var
关键字而不是简单类型使用string
或int
)。如果类型可能在将来发生变化(并且不重要),或者类型很长和/或复杂且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
。