2010-04-19 111 views
1

我相信这对你们来说是一个简单的问题,但我不知道这个开发人员在做什么。将C#格式转换为VB

name = String.Format(MyStringBuilder + ""); 

如果我将它转换为VB我得到的消息,“运营商+不是为类型system.text.stringbuilder和字符串定义”。同样的事情,如果我使用&。

+3

是谁写的代码现在解雇? – 2010-04-19 15:04:24

+0

规则#1用于在任何两种语言之间转换代码:首先将任何不明确的片段转换为更明智的变体,然后转换本身会更容易。 – 2010-04-19 15:10:19

+0

现在编写代码的人是谁? ;) – Guffa 2010-04-19 15:13:12

回答

5

从最严格的意义上讲,原始代码中的MyStringBuilder可能是一个空实例,在此时对.ToString()进行显式调用会引发异常。但是,提供的代码示例将正确执行。在VB中,你可能想说

Dim name As String 
If MyStringBuilder Is Nothing Then 
    name = String.Empty 
Else 
    name = MyStringBuilder.ToString() 
End If 
+1

+1 - 好。 – RobS 2010-04-19 15:28:55

+0

为什么不减少冗余? dim name as string = string.empty if mystringbuider isnot nothing然后name = mystringbuilder.tostring() – Jim 2010-04-19 18:39:50

+0

感谢Anthony和其他人。它看起来像一个旧的VB技巧来解决数据库查询中的空值问题,我从来没有想过我会在C#中看到这一点。我只是不相信我的直觉。 Bill Bill – Bill 2010-04-19 19:37:23

2

这对我来说没有意义,因为AFAICT只传递一个参数给string.format不会执行任何操作。

将“”添加到stringbuilder只是强制它为一个字符串。

name = MyStringBuilder.ToString();将是我如何在C#中做到这一点。将该语句转换为VB应该更容易。

11

它看起来好像是谁写的试图迫使MyStringBuilder的隐式转换使用中的一起选择+运算符与空字符串的字符串的人。

在VB中执行此任务只需要:

name = MyStringBuilder.ToString() 
1

使用MyStringBuilder.ToString()。这将解决问题。

0

你试图连接一StringBuilder对象和字符串一起 - 那就没办法了:)

name = String.Format(MyStringBuilder.ToString() + ""); 

这应该正确编译。

0

在VB.NET你可以使用一个 “&” 而不是一个 “+”

这行:

name = String.Format(MyStringBuilder + ""); 

是造成MyStringBuilder的隐式转换为字符串(使用ToString()方法)以便使用“+”运算符。这是一样的:

name = String.Format(MyStringBuilder.ToString() + ""); 

这是一样的

name = MyStringBuilder.ToString(); 

成为这个在VB.NET:

name = MyStringBuilder.ToString()