我正在使用SharpDevelop的v4.4转换工具自动将用VB.NET编写的代码转换为C#。用于表单上某些拖放的VB.NET代码是:
Private Sub me_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
If e.Data.GetDataPresent(DataFormats.FileDrop) Then
Dim MyFiles() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
If MyFiles.Length > 0 Then...
转换后的C#代码是这样的:
private void me_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
string[] MyFiles = Convert.ToString(e.Data.GetData(DataFormats.FileDrop));
if (MyFiles.Length > 0)
{...
在C#IDE中,此行Convert.ToString(e.Data.GetData(DataFormats.FileDrop))带有红色和错误的下划线。无法隐式将类型'string'转换为'string []。
用于转换.NET语言的Telerik工具在此处进行SAME转换。
这里有什么意义,如何在C#中工作甚至更好:如何编写可以正确翻译的VB.NET代码?
答案 0 :(得分:2)
你想......
string[] MyFiles = (string[])e.Data.GetData(DataFormats.FileDrop);
..实际上......按照大多数编码标准......
string[] myFiles = (string[])e.Data.GetData(DataFormats.FileDrop);
至于为什么它没有正确转换,可能要求工具供应商提供支持。我只能建议尝试使用DirectCast而不是CType在VB.NET中进行转换,看看他们是否能更好地转换代码。
答案 1 :(得分:2)
你错了。请看以下行:
Dim MyFiles() As String = CType(e.Data.GetData(DataFormats.FileDrop), String())
最重要的是String()
。这是一个数组定义。
所以e.Data.GetData(DataFormats.FileDrop)
返回一个数组。
所以它不起作用的原因是Convert.ToString()
返回一个字符串。所以有你的铸造问题。你想要做的是:
string[] myFiles = (string[])e.Data.GetData(DataFormats.FileDrop);