Почему строка str = new string(«abc») не проходит компилятор?

#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, вы не можете передать строковое значение … я не совсем понимаю, вы передали строку, если у вас уже есть информация о ней….