当前位置:  开发笔记 > 编程语言 > 正文

C#使自动ToString转换无效

如何解决《C#使自动ToString转换无效》经验,为你挑选了1个好方法。

在C#中,我有一个类:

public class Person
{
    public string name;
    public int id;
}

目前,当我这样做时:

Person person = new Person
{
    name = "John",
    id = 3
}
// Will be converted Console.Writeline("Person = " + person.ToString()); by the compiler
Console.Writeline("Person = " + person); 

我可以在类中做什么来使从人到人的自动转换无效.ToString()并使编译器给出一个错误来指示Person对象不能隐式转换为字符串?



1> Yuval Itzcha..:

我可以在类中做什么来使从人到人的自动转换无效.ToString()并使编译器给出一个错误来指示Person对象不能隐式转换为字符串?

你不能,至少不是一个简单的方法.string+ 的重载object将是发出ToStringon的object那个,你无法控制.这在规范的附加算子(7.7.4)部分中指定(强调我的):

当一个或两个操作数的类型为字符串时,binary +运算符执行字符串连接.如果字符串连接的操作数为null,则替换空字符串.否则,通过调用从类型对象继承的虚拟ToString方法,将任何非字符串参数转换为其字符串表示形式.如果ToString返回null,则替换空字符串.

你可以做的,不是编译时警告,是从重载中抛出异常ToString.我肯定会建议不这样做.您可以编写一个Roslyn分析器,它可以查找传递给它的任何对象,Console.WriteLine而不会覆盖该ToString方法并发出警告.


实际上它是`+`运算符的重载接受`string`和`object`,而不是`Console.WriteLine`的重载,在所示的例子中.
推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有