不懂0和1 2024-04-29 13:32 采纳率: 41.2%
浏览 1

double不能用作泛型类型或方法

img

如图,出现图中错误的原因是什么?该如何解决。没有从double到icloneable的装箱转换。

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-29 13:32
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,看起来你在尝试使用一个名为DeepCopy2DList<T>的方法,但是编译器报了一个错误,提示类型double不能作为泛型类型或方法的参数。这个错误是因为C#的泛型要求类型参数必须是引用类型(Reference Type),或者是实现了System.ICloneable接口的值类型(Value Type)。double是一个内置的值类型,并未实现ICloneable接口,所以它不能直接作为泛型类型参数。

    要解决这个问题,你可以创建一个新的类来包装double,使其成为可以被复制的对象。下面是如何操作的一个例子:

    首先,创建一个新的类来包装double

    public class Doubled : ICloneable
    {
        public double Value { get; set; }
    
        public object Clone()
        {
            return new Doubled { Value = this.Value };
        }
    }
    

    然后,在需要使用的地方,将原来的double数组替换为Doubled对象的数组。例如,将List<List<double>>替换为List<List<Doubled>>

    为了适应这些更改,你需要修改相关代码,比如DeepCopy2DList方法的定义以及所有使用到double的地方。以下是修改后的DeepCopy2DList方法:

    public static List<List<Doubled>> DeepCopy2DList(List<List<Doubled>> original)
    {
        if (original == null)
            return null;
    
        var copied = new List<List<Doubled>>(original.Count);
        for (int i = 0; i < original.Count; i++)
        {
            copied.Add(original[i].Select(x => (Doubled)x.Clone()).ToList());
        }
        return copied;
    }
    

    接下来,你需要在代码中的相应位置,将double替换为Doubled。例如:

    var b = Enumerable.Repeat(new Doubled { Value = Math.Ceiling(3 / 2.0) }, subrows.Count).ToArray();
    

    以及

    List<List<Doubled>> dataBox = DeepCopy2DList(original as List<List<Doubled>> ?? new List<List<Doubled>>());
    

    这样,你就可以正确地使用泛型方法了,而不会收到关于double不能作为泛型类型的错误。记住,每次你想处理一个double时,都要通过Doubled类进行操作。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月29日

悬赏问题

  • ¥15 esp32驱动GC9A01循环播放视频
  • ¥15 惠普360g9的最新bios
  • ¥15 配置hadoop时start-all.sh老是启动失败
  • ¥30 这个功能用什么软件发合适?
  • ¥60 微信小程序,取消订单,偶尔订单没有改变状态
  • ¥15 用pytorch实现PPO算法
  • ¥15 关于调制信号的星座图?
  • ¥30 前端传参时,后端接收不到参数
  • ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
  • ¥15 机器学习预测遇到的目标函数问题