有人可以解释为什么我不能在没有显式转换的情况下将 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
对象的顺序集合的内容, 并且该值是不可变的(即,它是只读的(。
char
和string
类型之间没有强制转换。此处介绍了实例化字符串的可能方法。string
是char
元素序列,您不能直接将简单项目分配给序列实例,您应该使用string
ctor 或调用ToString()
方法
char c = 'a';
string s;
s = new string(c, 1)
char
和string
类型之间也没有隐式转换,如 C# 规范所示
您需要将字符转换为字符串
char c = 'a';
string s = c.ToString();
或:
string s = $"{c}";
它们是差异类型,并且char 是值类型,字符串是引用类型,因此在 C# 中无法轻松地将 char 转换为字符串的原因