无法隐式转换类型'字符串'将CType转换为C#时,将字符串[]'转换为#

时间:2014-08-18 06:51:28

标签: c# sharpdevelop

我正在使用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代码?

2 个答案:

答案 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);