我想创建一个由单个字符组成的字符串,例如' \ t'而那就是它,但String类构造函数不会接受它。
String myTab = new String( '\t' );
这给了我:
错误2参数1:无法转换为' char'到#char;'
好吧,我认为从C ++转换后我不需要指针,但我会给你一个:
char oneChar = '\t';
String myTab = new String( &oneChar );
给出:
错误1指针和固定大小的缓冲区只能在不安全的上下文中使用
所以我尝试了这种笨拙的转换而没有成功:
String myTab = new String( ToString('\t') );
我得到的错误是:
错误3参数1:无法转换为' string'到' char []'
这是有史以来最简单的问题,它让我很烦恼。任何人都可以告诉我如何解决它以及为什么字符串类不能接受单个字符?
答案 0 :(得分:7)
char
和string
是不同的数据类型。您无法使用char
预期string
的地方(或者就预期char*
或char[]
而言)。
使用char*
的构造函数只能在unsafe
上下文中使用(请参阅其他答案),但除非您有充分的理由去unsafe
,不要这样做(但是你的C ++背景很诱人。)
'\t'
定义了char
"\t"
定义了一个字符string
因此不会
string myString = "\t";
好吗?
如果您想将char
转换为string
string myString = myChar.ToString();
答案 1 :(得分:2)
您通常不会“实例化”字符串对象,并且您当然不会将字符串分配给字符。
以下将编译:
String test = "\t";
这是做你要求的正常方式。
答案 2 :(得分:1)
虽然花钱的回答解决了你的主要问题,但我想我可能会用指针回答你的问题。
错误Pointers and fixed size buffers may only be used in an unsafe context
意味着您需要告诉编译器您正在使用可能不安全的代码,方法是将其包装在unsafe
块中:
unsafe {
char oneChar = '\t';
String myTab = new String( &oneChar );
}
..那就没事了。
但是,您还需要让编译器知道您将通过在项目设置中启用它来使用不安全的代码:
答案 3 :(得分:0)
你可以通过多种方式做你想做的事。在我的头顶,包括(但可能不限于):
string s1 = '\t'.ToString() ;
string s2 = new string( new char[]{'\t'} ) ;
string s3 = new string( '\t' , 1 ) ;
string s4 = new StringBuilder().Append('\t').ToString() ;
或者,因为您已经知道有问题的角色:
string s5 = "\t" ;
我怀疑所有前4名都可能会被优化为第5种形式。