Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#CS0029无法隐式转换类型';char';至';字符串';_C#_String_Char_Implicit Conversion - Fatal编程技术网

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