VB'的正确C#转换对应项;s CTYPE()
下面是我正在移植到C#rewrite的VB代码片段。我的问题是,任务完成后的接收日期是什么?它仍然是VB'的正确C#转换对应项;s CTYPE(),c#,.net,vb.net,ado.net,C#,.net,Vb.net,Ado.net,下面是我正在移植到C#rewrite的VB代码片段。我的问题是,任务完成后的接收日期是什么?它仍然是对象还是字符串 Dim receipt_date As Object receipt_date = CType(dr.Item("RECTDT"), String) 这是正确的C#对应物吗 object receipt_date; receipt_date = dr["RECTDT"].ToString(); 在这两个执行之后,VB版本,receipt\u date是否等于C版本?如果没有,我
对象
还是字符串
Dim receipt_date As Object
receipt_date = CType(dr.Item("RECTDT"), String)
这是正确的C#对应物吗
object receipt_date;
receipt_date = dr["RECTDT"].ToString();
在这两个执行之后,VB版本,
receipt\u date
是否等于C版本?如果没有,我需要做什么才能做到这一点?谢谢是的,你会得到同样的结果。它在语义上与VB版本不同(您显式调用ToString()
而不是使用CType
,后者大致相当于C#中的强制转换),但功能相同。它也更安全,因为在数据库中强制转换null值(在运行时为DBNull
)会引发异常
不过,为了全面起见,实际的C#对等物应该是:
var receipt_date = (string)dr["RECTDT"];
不过,作为一种风格,对于简单类型,尽量避免隐式键入(即使用var
关键字,而不是说string
或int
)<代码>变量在类型将来可能会更改时(并且不重要),或者如果类型很长和/或很复杂并且变量
使其更具可读性时非常有用。在这种情况下,我建议:
string receipt_date = (string)dr["RECTDT"];
VB的
CType
关键字或多或少等同于Convert.ToString
,但并不完全相同
所以下面在VB中
Dim receipt_date As Object
receipt_date = CType(dr.Item("RECTDT"), String)
…最好(或最接近)用C#翻译成以下内容
顺便说一下,
CType(…,String)
被编译成Microsoft.VisualBasic.CompilerServices.Conversions.ToString
,您意识到您的VB.NET代码强制转换为字符串,然后强制转换回对象,对吗?@Randolpho:No,他的VB.NET代码转换为字符串
,并将该值分配给对象
变量;这不是演员阵容。即使我不同意你何时使用var
,我也会+1你。学会爱var
@Randolpho:这是风格的问题;关于这件事已经有很多讨论了。这两种方法在任何技术意义上都是不正确的。@Adam Robinson:请参见编辑我的小姐类型。我没有写VB部分,我正在尝试在给它赋值后找出receipt\u date
是什么类型。它是一根绳子吗?我不熟悉VB,所以我对CTYPE
的操作持谨慎态度。小心该类型转换,它不能替代CTYPE()。CType进行值转换。Convert.ToString()与CType()做了很多事情。大概是你想要的。
object receipt_date;
receipt_date = Convert.ToString(dr.Item["RECTDT"]);