如何在C# Interactive中自定义泛型类Foo<T>的对象打印格式?
解决C# Interactive中泛型类对象自定义输出格式的问题
这个问题其实很好解决——C# Interactive在输出对象实例时,默认会调用对象的ToString()方法生成显示文本,所以只要给你的Foo<T>类重写这个方法,就能实现你想要的自定义格式。
完整实现代码
public class Foo<T> { private readonly T value; public Foo(T value) { this.value = value; } public override string ToString() { // 处理值的显示逻辑:字符串加引号,null显示"null" string valueDisplay; if (value == null) { valueDisplay = "null"; } else if (typeof(T) == typeof(string)) { valueDisplay = $"\"{value}\""; } else { valueDisplay = value.ToString(); } // 拼接成目标格式 return $"Foo<{typeof(T).Name}> {{ {valueDisplay} }}"; } }
效果测试
在C# Interactive中运行以下代码,就能得到你期望的输出:
> new Foo<string>("bar") Foo<String> { "bar" } > new Foo<int>(42) Foo<Int32> { 42 } > new Foo<string>(null) Foo<String> { null }
扩展说明
如果后续需要支持更多特殊类型的格式化(比如日期、枚举等),可以在ToString()方法里添加对应的判断逻辑。比如针对实现了IFormattable接口的类型,还可以调用带格式参数的ToString方法,让输出更精准适配不同场景。
内容的提问来源于stack exchange,提问作者Mark Seemann
相关产品推荐
相关产品推荐

