我正在编写一个供我个人使用的库,这样我就可以更快更方便地创建其他项目。这个库的大部分是用VB.NET(C#的简化版本)编写的,但是由于VB.NET不包含不安全编码的功能,我用C#编写了一小部分来处理需要指针的任务。为什么我提到VB.NET库将在这个问题的后面变得显而易见。
我附带的C#库中的一个静态类是一个相对简单的函数,用于在非托管结构之间进行转换。具体如下:
public static unsafe class SurroundingClass
{
public static T1 ValueToValueBitwise<T0, T1>(T0 Value)
where T0 : unmanaged
where T1 : unmanaged
{
if (sizeof(T0) != sizeof(T1)) throw new ArgumentException();
return *(T1*)&Value;
}
}
如果我的编码风格不合常规,我向你道歉;我是自学的。
该函数在C#中不会产生编译器错误,并且在其他C#函数使用时工作得非常出色。但是,当我从VB.NET项目中引用该函数时,事件的进展并不顺利。下面是一个在VB.NET中调用my函数的例子:
Dim myInt As Integer = ValueToValueBitwise(Of Single, Integer)(13.5!)
当我试图用VB.NET编译器编译这个函数时,它失败了,提供了相当不翔实的借口“'' is an unsupported type.”通常,当我得到这种“'' is invalid”错误时,这是因为我没有分别为声明或类型参数指定名称或类型参数。然而,显然不是这样的,因为等效的函数调用在C#中可以完美地工作。当您将光标悬停在函数名称上时,VisualStudio会弹出一个窗口,其中包含调用该函数的语法。有趣的是,当我将光标悬停在函数名上时,它会弹出以下内容:Visual Studio Popup
目前,我最好的猜测是VB.NET没有C#的“unmanaged”关键字,因此,VB.NET编译器死得很惨。我正在寻找一个补丁,一个变通办法,或一些其他的解决方案。我使用Visual Studio 2022版本17.6.3,两个项目中的.NET框架都设置为版本4.8。如有任何协助,将不胜感激。谢谢你!
1条答案
按热度按时间xpcnnkqh1#
正如用户dbc所解释的,VB.NET不支持非托管类型。因此,这些类型不合格,因为它们需要从VB.NET中不存在的类型继承。这导致编译器在尝试编译时引发错误。
谢谢你的帮助!