Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.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# 字符串插值中可避免的装箱_C#_.net_String_String Interpolation - Fatal编程技术网

C# 字符串插值中可避免的装箱

C# 字符串插值中可避免的装箱,c#,.net,string,string-interpolation,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.Ag

使用字符串插值使我的字符串格式看起来更清晰,但是如果我的数据是值类型,我必须添加
.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()
调用呢?我认为这是可行的。

我不知道如何避免编译器的装箱。
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()}");
    }
}
你试过了吗?