相关疑难解决方法(0)

克隆列表<T>

我想要克隆一个List你只需要调用:

List<int> cloneList = new List<int>(originalList);
Run Code Online (Sandbox Code Playgroud)

但是我在我的代码中尝试了这一点,我似乎得到的效果暗示上面只是在做:

cloneList = originalList ...因为对cloneList的更改似乎正在影响originalList.

那么克隆List的方法是什么?

编辑:

我在考虑做这样的事情:

public static List<T> Clone<T>(this List<T> originalList) where T : ICloneable
{
    return originalList.ConvertAll(x => (T) x.Clone());
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:

我拿了Binoj Antony建议的深拷贝代码并创建了这个扩展方法:

public static T DeepCopy<T>(this T original) where T : class
{
    using (MemoryStream memoryStream = new MemoryStream())
    {
        BinaryFormatter binaryFormatter = new BinaryFormatter();
        binaryFormatter.Serialize(memoryStream, original);
        memoryStream.Seek(0, SeekOrigin.Begin);
        return (T)binaryFormatter.Deserialize(memoryStream);
    }
}
Run Code Online (Sandbox Code Playgroud)

EDIT3:

现在,假设列表中的项目是结构.如果我打电话会怎么样?:

List<StructType> cloneList = new List<StructType>(originalList);
Run Code Online (Sandbox Code Playgroud)

我非常肯定,我会得到一个填充了新的独特项目的列表,对吗?

.net c#

23
推荐指数
3
解决办法
3万
查看次数

更快的克隆方式

我正在尝试优化克隆对象的一段代码:

#region ICloneable
public object Clone()
{
    MemoryStream buffer = new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();

    formatter.Serialize(buffer, this);     // takes 3.2 seconds
    buffer.Position = 0;
    return formatter.Deserialize(buffer);  // takes 2.1 seconds
}
#endregion
Run Code Online (Sandbox Code Playgroud)

很标准的东西.问题是该对象非常强大,需要5.4秒(根据ANTS Profiler - 我确信有探测器开销,但仍然).

是否有更好,更快的克隆方式?

.net c# performance cloning .net-2.0

4
推荐指数
1
解决办法
3473
查看次数

提高代码序列化速度的更好方法

我有以下代码将List序列化为字节数组,以通过Web服务进行传输。该代码在较小的实体上工作相对较快,但这是一个大约60,000个项目的列表。执行formatter.Serialize方法需要几秒钟。无论如何要加快速度?

public static byte[] ToBinary(Object objToBinary)
{
    using (MemoryStream memStream = new MemoryStream())
    {
        BinaryFormatter formatter = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone));
        formatter.Serialize(memStream, objToBinary);
        memStream.Seek(0, SeekOrigin.Begin);
        return memStream.ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# performance serialization visual-studio-2005

3
推荐指数
1
解决办法
3346
查看次数

c#中的对象克隆

请考虑以下相关问题:深度克隆对象

这真的是克隆对象的最佳方法吗?化(serialize /反序列化).序列化对我来说似乎有点贵.

我的想法是创建第二个构造函数并只分配所有变量.这种方法会更快吗?

class Test
{

public Test(Test clone)
{
// clone ....
}
}
Run Code Online (Sandbox Code Playgroud)

c# clone object

3
推荐指数
1
解决办法
7272
查看次数