gpt4 book ai didi

c# - 如何编写一个可以为相同输入返回不同类型的扩展方法?

转载 作者:行者123 更新时间:2023-12-04 18:19:59 24 4
gpt4 key购买 nike

我想写这样的东西:

    public static Int16 Parse(this byte[] buffer, int index)
{
var v = buffer[index++] << 8;
v += buffer[index++];
return (Int16)v;
}

public static Int32 Parse(this byte[] buffer, int index)
{
var v = buffer[index++] << 24;
v += buffer[index++] << 16;
v += buffer[index++] << 8;
v += buffer[index++];
return (Int16)v;
}

但这无效。我想我可以使用泛型:

    public static Int16 <Int16>Parse(this byte[] buffer, int index)
{
var v = buffer[index++] << 8;
v += buffer[index++];
return (Int16)v;
}

但这会做奇怪的事情:

  • 正如所写,VS 说“冗余 Actor ”并要求我删除它
  • 如果我删除强制转换,它会显示“无法将 int 隐式转换为 Int32”

有没有办法使用显式通用参数来完成我想要的操作?

在完美的世界中,我会向 Int16Int32 添加扩展,但必须在对象实例上调用扩展方法,而不是像 Int32.Parse( )

最佳答案

Is there a way to do what I want with explicit generic parameters?

没有。

我的意思是,您可以将该方法声明为 T Parse<T>(this byte[] buffer, int index) ,这将解决返回值问题。但是,在该方法中,您仍然会遇到一般处理输入的问题。您需要检查T只是为了弄清楚要“解析”多少字节(并且您并不是真正解析......它更多的是字节转换/重新解释转换操作,而“解析”通常指将文本转换为数据)。

按照 Convert 的示例进行操作会效果更好, BitConverter ,和BinaryReader类,其中方法名称本身包含类型名称。无论如何,每个方法都需要不同的实现,并且您知道无论如何都需要显式指定类型名称,因此请保持简单。

关于c# - 如何编写一个可以为相同输入返回不同类型的扩展方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59774481/

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