我正在编写一个通用的模板,适用于除 bool 以外的所有基本类型。具体来说,它将向不支持 Write(bool) 的 BinaryWriter 写入。
public void Write<T>(T val) where T : struct
{
if (binWriter != null)
{
binWriter.Write(val);
}
}
C#编译器给我错误提示:
error CS1502: The best overloaded method match for 'System.IO.BinaryWriter.Write(bool)' has some invalid arguments
我假设,如果我可以使用“where”将模板限制在非布尔值上,那么我就可以摆脱它。有没有办法做到这一点?或者有没有其他的解决方案来解决这个限制?
BinaryWriter.Write
确实有一个bool
的重载。关于你的问题,不,没有办法做到这一点。此外,请注意C#泛型与C++模板非常不同,你不会得到对Write
的调用针对你提供给Write
的每个具体类型进行专门化的情况。 - LeeT
设置任何限制,以限制它只能是“不是布尔值的东西”。这里是允许的约束条件列表。 - RB.Write
写一个重载函数,实现binWriter.Write
支持的每种类型。只需花费不到5分钟,稍微复制粘贴一下即可。 - Scott Chamberlain