C#CS0029无法隐式转换类型';char';至';字符串';
有人能解释为什么我不能在没有显式转换的情况下为字符串赋值吗?大概是这样的:C#CS0029无法隐式转换类型';char';至';字符串';,c#,string,char,implicit-conversion,C#,String,Char,Implicit Conversion,有人能解释为什么我不能在没有显式转换的情况下为字符串赋值吗?大概是这样的: char c = 'a'; string s; s = c; 错误CS0029无法将类型“char”隐式转换为“string” 我知道如何将字符转换为字符串,我的问题是为什么编译器不能隐式执行此操作 这是因为char是值类型和字符串引用,还是其他原因 答复: 同事们,谢谢大家的帮助,经过一些研究,我在这里找到了非常明确的答案:您需要将char转换为string char c = 'a'; string s = c.To
char c = 'a';
string s;
s = c;
错误CS0029无法将类型“char”隐式转换为“string”
我知道如何将字符转换为字符串,我的问题是为什么编译器不能隐式执行此操作
这是因为char是值类型和字符串引用,还是其他原因
答复:
同事们,谢谢大家的帮助,经过一些研究,我在这里找到了非常明确的答案:您需要将char转换为string
char c = 'a';
string s = c.ToString();
或:
它们是不同的类型,char是值类型,string是引用类型,所以在C#中不能轻松地将char转换为字符串
字符串是一个连续的字符集合,用于
表示文本。字符串
对象是
System.Char
表示字符串的对象;一个System.Char
对象
对应于UTF-16代码单元。字符串对象的值为
System.Char
对象的顺序集合的内容,
这个值是不可变的(也就是说,它是只读的)
char
和string
类型之间没有强制转换。描述了实例化字符串的可能方法string
是一个char
元素的序列,您不能直接将简单项分配给序列实例,您应该使用string
ctor或调用ToString()
方法
charc='a';
字符串s;
s=新字符串(c,1)
在char
和string
类型之间也没有隐式转换,正如您在C#中看到的,我知道如何将聊天转换为字符串,我的问题是为什么编译器不能隐式执行此操作
因为在char
类型中没有定义隐式运算符字符串
我修改了使用类
而不是结构
,并且它也适用于引用类型
顺便说一句,string是引用类型,char是结构
public class Digit
{
private readonly byte digit;
public Digit(byte digit)
{
if (digit > 9)
{
throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
}
this.digit = digit;
}
public static implicit operator byte(Digit d) => d.digit;
public static explicit operator Digit(byte b) => new Digit(b);
public override string ToString() => $"{digit}";
}
然后您可以直接将数字
实例转换为字节
:
var d = new Digit(7);
byte number = d; // here is Digit converted to the byte
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7
字符的PS因为它们实际上是不同的类型,看看>是因为char是值类型和字符串引用还是其他原因?仅仅因为他们是不同的type@AleksandrBeliavski这些类型之间没有隐式转换,正如您在附加的链接中所看到的。我更新了一个答案是的,我看到char结构没有隐式转换操作符来执行到字符串的转换,但我仍然不明白这是什么原因?正如msdn中提到的:字符串对象是System.Char对象的顺序集合。所以,似乎没有理由说char struct不能隐式转换为字符串。@AleksandrBeliavski我想这是为了避免潜在的问题。将字符
分配给字符串
可能意味着您希望创建一个单字符字符串,或者可能是打字错误/错误。因此,最好是明确地避免潜在的问题,这不是演员阵容。问题不在于如何将字符
转换为字符串
,而是为什么不能隐式转换。
var d = new Digit(7);
byte number = d; // here is Digit converted to the byte
Console.WriteLine(number); // output: 7
Digit digit = (Digit)number;
Console.WriteLine(digit); // output: 7