c# - 使用非字符串作为字符串时如何显示错误(而不是自动使用 ToString)?

标签 c# .net visual-studio

建议的重复项确实是一个类似的问题。但是,那里的答案只涵盖一个选项——禁用 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/

已安装的分析器可以在引用下找到

enter image description here

默认情况下,此分析器将生成警告,如带有 ! 的三角形所示,但右键单击规则,您可以将任何规则提升为错误,或将其降低为信息性。

潜在问题

Console.WriteConsole.WriteLine 有几个重载,包括 Console.Write(object value),所以如果你正在打印一些对象没有像 Console.Write(myCustomObject) 那样重写 ToString() 分析器不会捕捉到它,因为没有进行隐式转换(至少在代码中你已经写了)

关于c# - 使用非字符串作为字符串时如何显示错误(而不是自动使用 ToString)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54354342/

相关文章:

c# - 命名空间 'Azure' 中不存在类型或命名空间 'Microsoft' - Visual Studio 2022

c# - 在 TabControl 中预加载选项卡以加快选项卡切换

c# - 如何打开浏览器PDF格式的数据?

visual-studio - 使用带有指针的 symstore.exe 和 compress.exe 的符号服务器不起作用

c# - AudioGraph可以播放流吗?

.net - 无法访问已处置的对象。导致此错误的一个常见原因是处置上下文

c# - 如何让我的 Visual Studio 看起来像这样?

c# - 动态选择实体属性?

c# - DataGridView 导航到下一行

c# - Discord.NET 获取特定 react 的 react 计数