建议的重复项确实是一个类似的问题。但是,那里的答案只涵盖一个选项——禁用 ToString() 本身。还有其他可能的解决方案,例如让 Visual Studio 警告我,或者不调用 ToString()(仔细阅读那里的答案,他假设它被调用,并且只是解释无法“删除”ToString()。),或使用较低版本的 C#(它总是这样工作吗?),等等...
当我在代码需要字符串的地方有一个非字符串时,我不希望它自动转换为字符串。我想要一个错误。例如:
public string Stringify()
{
return Data + Environment.NewLine;
}
Data
是一个 byte[]
我不想得到:
System.Byte[]
我想得到一个错误,所以我知道我需要修复它。 (强类型是有原因的。)
那么,有没有办法让 Visual-Studio/C#/.Net 在将非字符串用作字符串时向我显示错误/抛出异常?
最佳答案
可以使用 Visual Studio 2017 中的 Nuget 在您的项目中安装 Rosyln 分析器。
特别是有一个 Rosyln 分析器,如果 ToString()
在类中没有被覆盖,它会检查对 ToString()
的隐式和显式调用。 https://www.nuget.org/packages/ToStringWithoutOverrideAnalyzer/
已安装的分析器可以在引用下找到
默认情况下,此分析器将生成警告,如带有 !
的三角形所示,但右键单击规则,您可以将任何规则提升为错误,或将其降低为信息性。
潜在问题
Console.Write
和 Console.WriteLine
有几个重载,包括 Console.Write(object value)
,所以如果你正在打印一些对象没有像 Console.Write(myCustomObject)
那样重写 ToString()
分析器不会捕捉到它,因为没有进行隐式转换(至少在代码中你已经写了)
关于c# - 使用非字符串作为字符串时如何显示错误(而不是自动使用 ToString)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54354342/