字符串插值可避免装箱

时间:2016-02-02 03:10:18

标签: c# .net string string-interpolation

使用字符串插值使我的字符串格式看起来更清晰,但如果我的数据是值类型,我必须添加.ToString()次调用。

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

var person = new Person { Name = "Tom", Age = 10 };
var displayText = $"Name: {person.Name}, Age: {person.Age.ToString()}";

.ToString()使格式变得更长,更丑陋。我试图摆脱它,但string.Format是一个内置的静态方法,我无法注入它。你有什么想法吗?由于字符串插值是string.Format的语法糖,为什么他们在生成语法糖背后的代码时不会添加.ToString()调用?我认为这是可行的。

1 个答案:

答案 0 :(得分:3)

我看不出你怎么能避免编译器的拳击。 string.Format的行为不是C#规范的一部分。你不能依赖它会调用Object.ToString()。事实上它没有:

using System;
public static class Test {
    public struct ValueType : IFormattable {
        public override string ToString() => "Object.ToString";
        public string ToString(string format, IFormatProvider formatProvider) => "IFormattable.ToString";
    }
    public static void Main() {
        ValueType vt = new ValueType();
        Console.WriteLine($"{vt}");
        Console.WriteLine($"{vt.ToString()}");
    }
}