gpt4 book ai didi

c# - 转换为原始类型并用作参数?

转载 作者:行者123 更新时间:2023-11-30 22:27:17 27 4
gpt4 key购买 nike

我正在尝试编译包含此方法的项目;

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)' 的最佳重载方法匹配有一些无效参数

我试图避免编写包含每个基本类型的长 switch 语句,并向方法添加一个参数来选择类型。这很丑陋,似乎也不对。

这简单而优雅:

  • 发送 (123);
  • 发送 (true);

但为什么它不起作用?正确的做法是什么?

最佳答案

重载决议在编译时执行。因此,编译器试图找到一个带有有效参数的方法*无论 T 是什么类型,(在其约束范围内,这在这里无济于事)。它找不到这样的方法。鉴于唯一的约束是 T 必须是结构,唯一 有效的非泛型参数类型将是 object(通过拳击)。

如果您的目标是根据对象的执行时间类型使用合适的重载,您将需要使用动态类型,如下所示:

public void Send(dynamic d) {
BinaryWriter bw = new BinaryWriter(stream);
bw.Write(d);
}

... 或使用反射获取并执行正确的重载(这是动态类型会做的事情)。

关于c# - 转换为原始类型并用作参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11369487/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com