我有某人的 F# 库,里面有一个类型:
module HisModule
type hisType {
a : float;
b : float;
c : float;
}
我在C#中使用它,我想给它添加一个“ToString()”方法,以方便调试。
但以下似乎不起作用:
public static class MyExtensions
{
public static string ToString(this HisModule.hisType h)
{
return String.Format("a={0},b={1},c={2}", h.a, h.b, h.c);
}
}
....
var h = new hisType();
Console.WriteLine(h.ToString()); // prints "HisModule+hisType"
为什么不呢?
最佳答案
正如其他人所指出的,对象上的 ToString 始终比您的扩展方法更匹配。您可能应该更改扩展方法的签名;更改名称可能是正确的方法。
另外:你说这个东西的目的是方便调试。在那里覆盖 ToString 可能是错误的事情; ToString 可能用于除调试之外的其他用途。我会倾向于制作我自己的特别命名的方法,其名称清楚地反射(reflect)了该方法的目的。
如果您正在创建一个新类型并希望在调试器中有特殊的显示行为,最简单的方法是使用 Debugger Display Attributes .
如果你真的想以一种有趣的方式显示复杂的数据结构,考虑写一个 Debugger Visualizer .
关于c# - 可以将 C# 扩展方法添加到 F# 类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8333212/