C# CS0029 无法将类型"char"隐式转换为"字符串"



有人可以解释为什么我不能在没有显式转换的情况下将 char 分配给字符串吗?像这样:

char c = 'a';
string s;
s = c;

错误 CS0029 无法将类型"char"隐式转换为"字符串">

我知道如何将字符转换为字符串,我的问题是为什么编译器不能隐式执行此操作。

是因为 char 是值类型和字符串引用还是还有更多?

答: 同事们,谢谢大家的帮助,经过一些研究,我在这里找到了非常明确的答案:https://stackoverflow.com/a/52280210/12518860

我知道如何将聊天转换为字符串,我的问题是为什么编译器无法隐式执行此操作。

因为在char类型中没有定义implicit operator string

我使用class而不是struct修改了 msdn 中的示例,它也适用于引用类型

顺便说一句,字符串是引用类型,字符是结构。

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}";
}

然后,您可以将Digit实例直接转换为byte

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这里是字符的隐式转换列表

per MSDN

字符串是字符的顺序集合,用于 表示文本。String对象是System.Char表示字符串的对象;System.Char对象 对应于 UTF-16 代码单元。字符串对象的值为System.Char对象的顺序集合的内容, 并且该值是不可变的(即,它是只读的(。

charstring类型之间没有强制转换。此处介绍了实例化字符串的可能方法。stringchar元素序列,您不能直接将简单项目分配给序列实例,您应该使用stringctor 或调用ToString()方法

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

charstring类型之间也没有隐式转换,如 C# 规范所示

您需要将字符转换为字符串

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

或:

string s = $"{c}";

它们是差异类型,并且char 是值类型,字符串是引用类型,因此在 C# 中无法轻松地将 char 转换为字符串的原因

相关内容

  • 没有找到相关文章

最新更新