不能隐式转换类型'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[] 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);