2010-01-13 3 views
4

Как я могу преобразовать char в char * в C#?Как я могу преобразовать char в char * в C#?

Я initializeing объект String, как это:

String test=new String('c'); 

, и я получаю эту ошибку:

Argument '1': cannot convert from 'char' to 'char*'

+0

Кажется, что Unice не знает C#, и вопрос не страшен, но сколько способов инициализировать строку из char (не очень частой необходимости в .NET), которую мы выяснили. – serhio

ответ

15

Это немного странно, чтобы инициализировать строку , если вы заранее знаете, что хотите сохранить в нем.

Вы можете просто использовать:

String test="c"; 

Если у вас есть конкретные потребности, чтобы преобразовать переменную обугленного в строку, вы можете использовать встроенный в ToString() функции:

String test = myCharVariable.ToString(); 
1

String класса имеет много конструкторов, если все, что вам нужно, это создать строку, содержащую один символ, вы можете использовать следующее:

String test = new String(new char[] { 'c' }); 
6
string myString1 = new string(new char[] {'a'}); 
string myString2 = 'a'.ToString(); 
string myString3 = "a"; 
string myString4 = new string('a', 1); 
unsafe { 
    char a = 'a'; 
    string myString5 = new string(&a); 
} 
12
unsafe 
{ 
    char c = 'c'; 
    char *ch = &c; 
} 

Ваш пример имеет String и ошибка компиляции с помощью одного из конструктора String перегрузок, поэтому я предполагаю, что вы на самом деле просто хочешь массив символов, иначе a String и, возможно, не char*.

В этом случае:

char c = 'c'; 
string s = c.ToString(); // or... 
string s1 = "" +c; 

Также в наличии:

unsafe 
{ 
    char c = 'c'; 
    char* ch = &c; 
    string s1 = new string(ch); 
    string s2 = new string(c, 0); 
} 
+3

Это действительно ответ на вопрос, но я считаю, что автор действительно не хочет преобразовывать 'char' в' char * ':) – serhio

+2

+1, потому что он отвечает на вопрос, не требуя, чтобы ОП оправдывал их потребность в этом подходе сначала , – BenAlabaster

+0

Хотя это синтаксически неверно. Я думаю, вы имеете в виду 'char * ch = & c;' * ch используется для изменения значения в ссылке ... – BenAlabaster

0

тест String = новая строка (новый символ [] { 'с'});

1

Если вы жесткое кодирование это, есть причина, вы не можете просто использовать:

String test = "c"; 
1

Как насчет:

var test = 'c'.ToString() 
0

Самый простой способ сделать это преобразование из вашего примера просто изменить тип котировок, которые вы используете из одинарных котировок

String test = new String('c'); 

удвоить кавычки и удалить вызов конструктора:

String test = "c"; 
2

не помешает иметь еще один ответ:

string test = string.Empty + 'c'; 
+1

Я не считаю это очень изящным решением .. Почему бы не использовать 'c'.ToString(), что является самым коротким, самым элегантным и наиболее логичным решением? Очень интересно видеть, сколько здесь разных способов. Здесь можно найти разные варианты. – eWolf

+1

Я собираюсь отбросить это голосование, чтобы вернуть его обратно. Это не так, это просто неэлегантно. Заставляет вас задаться вопросом, почему конструктор String не примет символ. –

+0

@John Ferguson: Спасибо, что голосовали за это. Я знаю, что это не самый эффективный и очень неэлегантный, но суть ответа заключалась в том, чтобы показать еще одну вариацию. Я думал, что downvotes были за * неправильные * ответы, но, похоже, люди не согласны. – Codesleuth

1

При использовании полукокса в конструкторе Строка, вы должны также дать параметр счетчика, чтобы указать, сколько раз следует добавить, что характер к строке:

String test=new String('c', 1); 

См. также here.

3

Там нет перегрузки общественного конструктора String, который принимает один char в качестве параметра. Ближайший матч

public String(char c, int count) 

, который создает новый String, повторяющий char c count раз. Таким образом, вы можете сказать

string s = new string('c', 1); 

Есть другие варианты. Существует общественный конструктор String, который принимает char[] в качестве параметра:

public String(char[] value) 

Это создаст String, который инициализируется с символами Unicode в value. Таким образом, можно сказать, что

char c = 'c'; 
string s = new String(new char[] { c }); 

Другой вариант сказать

char c = 'c' 
string s = c.ToString(); 

Но самый простой подход, что большинство будет ожидать, чтобы увидеть это

string s = "c"; 

Что касается преобразования char в char * вы не можете безопасно это сделать.Если вы хотите использовать перегрузку общественного конструктора для String, который принимает char * в качестве параметра, вы можете сделать это:

unsafe { 
    char c = 'c'; 
    char *p = &c; 
    string s = new string(p); 
} 
+1

Не эти «небезопасные» версии предполагают, что байт после & c - нуль? – 2010-01-13 14:22:45

0

Используя одиночные кавычки (как в вашем вопросе: 'c') означает, что вы создаете char. Использование двойных кавычек, например. "c", означает, что вы создаете string. Они не являются взаимозаменяемыми типами в C#.

А char*, как вам известно, это то, как строки в некоторой степени представлены в C++, а C# поддерживает некоторые из соглашений C++. Это означает, что char* может легко (для программиста, как минимум) быть преобразован в string в C#. К сожалению, char не является неотъемлемым символом char *, поэтому то же самое нельзя сделать.