在泛型方法中调用重载方法

Lai*_*aie 5 c#

class Test
{
    public BinaryWriter Content { get; private set; }
    public Test Write<T> (T data)
    {
        Content.Write(data);
        return this;
    }
}
Run Code Online (Sandbox Code Playgroud)

它不会编译.

1. The best overloaded method match for 'System.IO.BinaryWriter.Write(bool)' has some invalid arguments
2. Argument 1: cannot convert from 'T' to 'bool'
Run Code Online (Sandbox Code Playgroud)

似乎Test.Write总是试图调用BinaryWriter.Write(bool).有什么建议?

Far*_*yev 5

重载解析发生在编译时,在这种情况下,对 T 一无所知,因此没有重载适用。

   class Test
    {
        public BinaryWriter Content { get; private set; }
        public Test Write<T>(T data)
        {
            Content.Write((dynamic)data);
            return this;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但当然它可能会产生一些问题。例如,如果您将 DateTime 发送到方法,应用程序将可以正常编译。但是,它会抛出异常。

  • 也许它可以解决问题,但这种方式很危险并且容易出现异常。 (4认同)