C#泛型方法中的“方法'ToString'没有重载需要1个参数”

c#

我正在尝试编写一个 C# 通用方法,它接受可为空的十进制和双精度值并将它们转换为字符串表示形式。

尽管我正在访问.Value可空参数,但我收到错误“方法 'ToString' 没有重载需要 1 个参数” 。

这是我的代码。我究竟做错了什么?

public static string ToThousandSeparated<T>(T? value, string naString = "") where T : struct
{
    if (value.HasValue)
    {
        T val = value.Value;
        return val.ToString("N0");
    }

    return naString;
}

回答

object只定义方法string ToString()(不带参数)。对象像Int32定义自己的string ToString(string)方法。

但是,有一个名为 的有用接口IFormattable,它提供了一个string ToString(string, IFormatProvider)方法。因此,您可以将自己限制在所有T实现中IFormattable

public static string ToThousandSeparated<T>(T? value, string naString = "")
    where T : struct, IFormattable
{
    if (value.HasValue)
    {
        T val = value.Value;
        return val.ToString("N0", null);
    }

    return naString;
}

或接受任何东西,但测试它是否IFormattable在运行时实现:

public static string ToThousandSeparated<T>(T? value, string naString = "")
    where T : struct
{
    if (value.HasValue)
    {
        T val = value.Value;
        return val is IFormattable formattable ? formattable.ToString("N0", null) : val.ToString();
    }

    return naString;
}


以上是C#泛型方法中的“方法'ToString'没有重载需要1个参数”的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>