#c# #string
#c# #строка
Вопрос:
Учитывая public String(char*)
, почему мы не можем использовать следующий оператор?
string str = new string("aaa");
Ошибка 1
Наилучший перегруженный метод подходит для ‘string.Строка(char*)’ имеет некоторые недопустимые аргументы C:tempConsoleApplication2ConsoleApplication2Program.cs 19 26 Консольное применение2
Ошибка 2
Аргумент 1: не удается преобразовать из ‘string’ в ‘char *’ C:tempConsoleApplication2ConsoleApplication2Program.cs 19 37 Консольное применение2
Ответ №1:
Просто используйте:
string str = "aaa";
Вам не нужна new
строка.
«aaa» — это строка. Это не char *
.
char *
используется с unsafe
кодом.
Ответ №2:
Потому что это не предназначено для использования в безопасном коде…
В C # этот конструктор определяется только в контексте небезопасного кода.
откуда:http://msdn.microsoft.com/en-us/library/6y4za026.aspx
Если вам нужно создать строку, вы могли бы просто использовать буквенное обозначение..
string str = "aaa";
Ответ №3:
Вы пытаетесь вызвать конструктор со строкой в качестве параметра.
Компилятор сообщает вам, что не существует строкового конструктора с одной строкой в качестве параметра.
Комментарии:
1. значит, в C # «aaa» не означает тип char *?
2. @g0987 нет, это всегда система. Строка в кодировке UTF-16
Ответ №4:
Тип char*
предназначен для небезопасного указателя — на объект, не являющийся частью .Платформа, управляемая сетью. Когда вы помещаете литеральную строку "aaa"
в свой код, это управляемый объект. string
этого char*
нет в C #.
Ответ №5:
посмотрите на это, возможно, это разрешит ваши сомнения C # New String Constructor
unsafe public String(char*);
public String(char[]);
unsafe public String(sbyte*);
public String(char, int);
unsafe public String(char*, int, int);
public String(char[], int, int);
unsafe public String(sbyte*, int, int);
unsafe public String(sbyte*, int, int, Encoding);
Комментарии:
1. Я проверил эту информацию, прежде чем опубликовать свой вопрос. Прочитав сообщение из этой темы, я понял основную идею. — спасибо
2. @q0987 — как вы видите в документе, вам нужно передать массив char, вы не можете передать строковое значение … я не совсем понимаю, вы передали строку, если у вас уже есть информация о ней….