如图,出现图中错误的原因是什么?该如何解决。没有从double到icloneable的装箱转换。
5条回答 默认 最新
关注 引自免费微信小程序:皆我百晓生
根据您提供的信息,看起来你在尝试使用一个名为
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
类进行操作。解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 esp32驱动GC9A01循环播放视频
- ¥15 惠普360g9的最新bios
- ¥15 配置hadoop时start-all.sh老是启动失败
- ¥30 这个功能用什么软件发合适?
- ¥60 微信小程序,取消订单,偶尔订单没有改变状态
- ¥15 用pytorch实现PPO算法
- ¥15 关于调制信号的星座图?
- ¥30 前端传参时,后端接收不到参数
- ¥15 这是有什么问题吗,我检查许可证了但是显示有呢
- ¥15 机器学习预测遇到的目标函数问题