不能隐式转换类型'string'转换为'string[]'

本文关键字:string 转换 类型 不能 | 更新日期: 2023-09-27 18:18:30

我正在做VB编写的代码的自动转换。使用SharpDevelop的v4.4转换工具。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工具使这里的翻译相同。

这里的重点是,如何在c#中工作,甚至更好:如何编写VB。NET代码,这将被正确翻译?

不能隐式转换类型'string'转换为'string[]'

你想…

string[] MyFiles = (string[])e.Data.GetData(DataFormats.FileDrop);

. .其实…按照大多数编码标准…

string[] myFiles = (string[])e.Data.GetData(DataFormats.FileDrop);

至于为什么它不能正确转换,可能需要向工具供应商寻求支持。我只能建议在VB中尝试铸造。. NET使用DirectCast代替CType,看看它们是否能更好地转换代码。

你错了。看下面这行:

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