我在将以下代码片段从C#转换为VB.Net时遇到问题:
if ((currentItem.Tag as FileSystemKind?) != FileSystemKind.File)
{
if (currentFileName == GOBACK)
currentPath = currentPath.Substring(0, currentPath.Length - Path.GetFileName(currentPath).Length - 1);
else
currentPath = Path.Combine(currentPath, currentFileName);
UpdateControls();
}
else
{
//If it's a file, we should return the selected filename
fileName = Path.Combine(currentPath, currentFileName);
EndOk();
}
问题在于以下几行:
if ((currentItem.Tag as FileSystemKind?) != FileSystemKind.File)
我尝试了两种不同的在线转换器,这些转换器建议我进行以下转换(对于上面一行):
第一名:
If (TryCast(currentItem.Tag, FileSystemKind)?) <> FileSystemKind.File Then
第二个:
If TryCast(currentItem.Tag, System.Nullable(Of FileSystemKind)) <> FileSystemKind.File Then
我在VB.Net中遇到的错误是:
TryCast'操作数必须是引用类型,但'FileSystemKind?'是一种价值类型。
代码来自针对Net.Compact Framework 2.0的项目,但我认为大多数应该与普通的Compact Framework兼容。
我迷路了。谁可以帮助我?
PS:我很抱歉问题中的代码布局。有没有办法将字体大小更改为较小的字体?
谢谢!
答案 0 :(得分:3)
在Reflector中加载已编译的.dll,然后将视图语言更改为VB,并为您翻译。
If (DirectCast(TryCast(currentItem.Tag,FileSystemKind?), FileSystemKind) <> FileSystemKind.File) Then
End If
答案 1 :(得分:2)
如果currentItem.Tag始终是FileSystemKind类型,您可以尝试
If (DirectCast(currentItem.Tag, FileSystemKind) <> FileSystemKind.File) Then
如果currentItem.Tag 不总是类型为FileSystemKind,你可以尝试
If TypeOf (currentItem.Tag) Is FileSystemKind Then
If (DirectCast(currentItem.Tag, FileSystemKind) <> FileSystemKind.File) Then
End If
Else
' handle different types
End If
您也可以使用“CType”将变体对象“currentItem.Tag”的类型转换或强制转换为FileSystemKind
If (CType(currentItem.Tag, FileSystemKind) <> FileSystemKind.File) Then
答案 2 :(得分:1)
If TypeOf(currentItem.Tag) Is FileSystemKind AndAlso CType(currentItem.Tag, FileSystemKind) = FileSystemKind.File Then