#c# #c -cli #literals
Вопрос:
Я работаю над проектом C#, который зависит от проекта C /CLI. Я использую несколько литеральных членов (которые являются константами в C#), используя такие типы, как int
или unsigned short
, к которым мой проект C# может получить доступ в качестве константы. Я хотел сделать то же самое со струнами. Поскольку это возможно в C#, я попытался сделать это на C …и затем столкнулся с проблемой.
using namespace System; namespace TestNamespace { static ref class TestClass { literal char* TestString = "fish"; }; }
IntelliSense не выдает мне ошибок, но при создании этого кода появляется эта ошибка: «‘TestNamespace::TestClass::testString’: не может быть литеральным элементом данных»
Я изменил символ* на const символ*, std::строка и указатели на другие типы символов. Я много копался в Интернете по этому поводу и кое-что понял, но понятия не имею, почему это не работает. Я также читал о строковых литералах и подумал, что это мне поможет. Приятно знать такие вещи, но не обязательно в этой ситуации.
Ответ №1:
Строки в .NET являются System::String^
типом данных, поэтому вам нужно объявить их как этот тип, а не char*
как .
using namespace System; namespace TestNamespace { static ref class TestClass { literal String^ TestString = "fish"; }; }
Теперь TestString
будет видно из C# как TestNamespace.TestClass.TestString
.