我正在尝试编译包含此方法的项目;
public void Send<T>(object o) where T : struct {
BinaryWriter bw = new BinaryWriter(stream);
bw.Write((T)o);
}
我从这种方法(工作)中获得灵感;
public static T Cast<T>(object o) {
return (T)o;
}
BinaryWriter.Write函数支持参数的基本类型,所以我想我可以这样使用它。但是,Visual Studio说“最好的重载方法匹配'System.IO.BinaryWriter.Write(bool)'有一些无效的参数”
我正在尝试避免编写包含每种基本类型的long switch语句,并在方法中添加一个参数来选择类型。这很难看,似乎不对。
这很简单而优雅:
但为什么它不起作用?什么是正确的方法呢?
答案 0 :(得分:3)
重载分辨率在编译时执行。因此,编译器试图找到一个参数,该参数将是有效的* T
类型的任何类型,(在其约束条件下,这对此没有帮助)。它找不到这样的方法。鉴于唯一的约束是T
必须是结构,只有的非泛型参数类型才有效object
(通过装箱)。
如果您的目标是根据对象的执行时间类型使用适当的重载,则需要使用动态类型,如下所示:
public void Send(dynamic d) {
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(d);
}
...或者使用反射获取并执行正确的重载(这是动态类型将要执行的操作)。