Ошибка компиляции .NET?

Я пишу библиотеку для личного пользования, чтобы быстрее и удобнее создавать другие проекты. Большая часть библиотеки написана на 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:

Dim myInt As Integer = ValueToValueBitwise(Of Single, Integer)(13.5!)

Когда я пытаюсь скомпилировать эту функцию с помощью компилятора VB.NET, она терпит неудачу, предоставляя довольно неинформативное оправдание "'' является неподдерживаемым типом". Обычно, когда я получаю такого рода ошибку "''недопустимо", это происходит потому, что я не указал имя или параметр типа для объявления или аргумента типа соответственно. Однако это явно не так, поскольку вызов эквивалентной функции безупречно работает в C#. Когда вы наводите курсор на имя функции, Visual Studio отображает всплывающее окно с синтаксисом для вызова функции. Интересно, что когда я навожу курсор на имя функции, появляется следующее: Всплывающее окно Visual Studio

В настоящее время мое лучшее предположение состоит в том, что VB.NET не имеет эквивалента ключевому слову C# «unmanaged», и в результате компилятор VB.NET умирает жалкой смертью. Я ищу либо патч, обходной путь, либо какое-то другое решение. Я использую Visual Studio 2022 версии 17.6.3 с платформой .NET в обоих проектах, установленной на версию 4.8. Будем очень благодарны любой помощи. Спасибо!

Я не знаю, что происходит с кодом vb.net, но подозреваю, что Unsafe.As<TFrom,TTo>(TFrom) может делать то, что вам нужно.

dbc 27.06.2023 23:26

Вот старая проблема 2018 года, в которой говорится, что мы не поддерживаем неуправляемые типы в Visual Basic, даже если тип используется в C#: Невозможно вызвать метод C# 7.3 с параметром неуправляемого типа #300.

dbc 27.06.2023 23:28

learn.microsoft.com/en-us/dotnet/api/…

Hans Passant 27.06.2023 23:29

VB .Net ни при каких обстоятельствах не разрешает код unsafe. см. Как я могу использовать небезопасный код в VB.Net?

Talkhak1313 28.06.2023 04:18
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
4
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как объяснил пользователь dbc, VB.NET не поддерживает неуправляемые типы. В результате типы не соответствовали требованиям, так как они должны были наследовать от типа, не существовавшего в VB.NET. Это заставляло компилятор выдавать ошибку при попытке компиляции.

Спасибо за помощь!

Другие вопросы по теме