相关疑难解决方法(0)

克隆没有序列化的对象

我在SO处找到了许多解决方案,而且是通过序列化/反序列化(进入内存和后退)来处理对象的深层克隆.

它要求克隆的类标记为[Serializable].我碰巧把我的类(大部分都是)标记为[DataContract]因为我使用DataContractSerializer序列化为XML.

我只介绍了[Serializable]属性,因为需要对其中一些类实例进行深度克隆.但是,现在通过DCS进行序列化/反序列化的事情发生了,因为它不再起作用了 - 关于在反序列化时期望不同的XML元素的错误.如果我删除了[Serializable]错误消失了.

我有什么选择?我只想尽可能简单地深入克隆我的对象.

c# clone xml-serialization datacontractserializer

6
推荐指数
1
解决办法
5686
查看次数

将List传递给方法而不修改原始列表

这是将List传递给方法并编辑该List而不修改原始List的唯一方法吗?

class CopyTest1
{
    List<int> _myList = new List<int>();
    public CopyTest1(List<int> l)
    {
        foreach (int num in l)
        {
            _myList.Add(num);
        }
        _myList.RemoveAt(0); // no effect on original List
    }
}
Run Code Online (Sandbox Code Playgroud)

c# list pass-by-reference

5
推荐指数
2
解决办法
1万
查看次数

将所有值从列表复制/克隆到C#中的另一个列表

我有一堂课

public class Car()
{
    public string Name;
    public string Model;
}
Run Code Online (Sandbox Code Playgroud)

而且我有财产

List<Car> CarsA = new List<Car>();
CarsA.Add(new Car(){Name = "Verna",Model="Hyundai"});
CarsA.Add(new Car(){Name = "X1",Model="Bmw"});
Run Code Online (Sandbox Code Playgroud)

我还有另一个财产

List<Car> CarsB = new List<Car>();
Run Code Online (Sandbox Code Playgroud)

现在,我想将所有条目从CarsA添加到克隆/复制到CarsB,而不用将CarsA属性作为当前实例

(即我想为每个条目创建一个新对象并添加它)。

就像是

foreach(var car in CarsA)
{
    Car newCar =new Car();
    newCar.Name = car.Name;
    newCar.Model = car.Model;
    CarsB.Add(newCar);
}
Run Code Online (Sandbox Code Playgroud)

如果我不想实现ICloneable并且没有复制构造器怎么办?

c# clone list

5
推荐指数
2
解决办法
3549
查看次数

通用列表复制引用而不是创建copiedList

当我尝试在列表中运行枚举器然后执行一些操作时,我正在开发一个小函数.(下面是我想要做的事情的想法.

当我试图删除时,我得到了一个"收藏无法修改",在我实际醒来之后,我意识到tempList必须刚刚被分配了myLists引用而不是myLists的副本.在那之后我试图找到一种说法

tempList = myList.copy

但似乎没有什么?我最后编写了一个小的for循环,然后将myLsit中的每个项目添加到tempList中,但我原以为会有另一种机制(如clone?)

所以我的问题:

  • 我的假设是关于tempList接收对myList的引用是正确的
  • 如何将列表复制到另一个列表?

        private myList as List (Of something)
    
    sub new()
        myList.add(new Something)
    end sub
    
    sub myCalledFunction()
        dim tempList as new List (Of Something)
        tempList = myList
        Using i as IEnumerator = myList.getEnumarator
           while i.moveNext
               'if some critria is met then 
               tempList.remove(i.current)
           end
        end using
    
    end sub
    
    Run Code Online (Sandbox Code Playgroud)

vb.net generics reference

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

如何克隆从 C# 中的抽象类派生的类实例的通用列表?

我有一个基类:abstract class Base和一些派生类:class Derived: Base,所有数据成员都在基类中。我有另一个通用列表:List<Base> list。现在我想Clone()对列表进行操作。我读过这篇文章,但发现我的情况有点复杂。由于基类是抽象的,因此不能通过复制构造函数或实现接口来克隆列表的元素ICloneable。但由于所有数据成员都在基类中,因此在派生类中一次又一次地编写相同的代码进行克隆是多余的。完成这项工作的最佳方法是什么?感谢您提供提示。

更新:附简化源代码

public class Point : ICloneable
{
    public int X { get; set; }
    public int Y { get; set; }

    public Point(int x, int y)
    { X = x; Y = y; }

    public Point(Point p)
    {
        X = p.X; Y = p.Y;
    }

    public object Clone()
    {
        return MemberwiseClone();
    }
}

public abstract class ObjectThatHasPosition : ICloneable
{
    public Point …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class clone generic-list

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

创建List <t>的副本,而不参考原始文件

我知道这已经被覆盖了,但从我在帖子中理解的这应该有效.

示例代码:

我有一个自定义类型:

public class MyType
{
    public List<MySubType> Movie { get; set; }
    public List<int> Ranks { get; set; }
    public string Location { get; set; }
    public string Released { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个这种类型的List

List<MyType> myMovies = new List<MyType>();
Run Code Online (Sandbox Code Playgroud)

稍后在代码中我需要创建此列表的副本并更改它而不影响原始列表.

List<MyType> copyMovies = new List<MyType>(myMovies);
Run Code Online (Sandbox Code Playgroud)

但现在如果我从copyMovies中的列表中删除

copyMovies.Movie.RemoveAt(x);
Run Code Online (Sandbox Code Playgroud)

它从两个列表中删除

除非我完全遗漏了这篇文章,否则我应该能够更改副本列表,而不会影响原始文件.

c# reference

2
推荐指数
1
解决办法
2万
查看次数

C# 如何模拟对象列表

在 C# 中,如何模拟对象列表?

我正在尝试进行练习,它指定在单元测试的排列部分中我需要“模拟Book对象列表”。

创建 Book 对象的模拟列表的语法是什么?我尝试创建模拟 Book 对象并将它们添加到书籍列表中,但这不起作用。

public void Test_GetAllBooks_ReturnsListOfBooksItReceivesFromReadAllMethodOfReadItemCommand_WhenCalled()
{
    //Arrange
    Mock<ReadItemCommand> mockReadItemCommand = new Mock<ReadItemCommand>();
    Catalogue catalogue = new Catalogue(mockReadItemCommand.Object);

    Mock<Book> mockBook1 = new Mock<Book>();
    Mock<Book> mockBook2 = new Mock<Book>();
    List<Book> mockBookList = new List<Book>();
    mockBookList.Add(mockBook1);
    mockBookList.Add(mockBook2);

    mockReadItemCommand.Setup(r => r.ReadAll()).Returns(mockBookList);

    //Act
    List<Book> actual = catalogue.GetAllBooks();

    //Assert
    Assert.AreSame(mockBookList, actual);

}
Run Code Online (Sandbox Code Playgroud)

这给我带来了 2 个编译错误,都是 CS1503,在我尝试将模拟书籍添加到我的书籍类型列表的两行中。

c# unit-testing moq mocking stubbing

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

克隆C#中的列表

可能重复:
如何在C#中克隆通用列表?

嘿,我一直在尝试克隆一个列表,到目前为止,我发现了函数addRange,但我很确定它不克隆列表中的对象,但做一个浅的副本列表我想知道如何克隆列表谢谢提前.

c# clone list

1
推荐指数
1
解决办法
2万
查看次数

克隆扩展无效

我在下面想念的是什么?当我尝试list.Clone()克隆没有显示在列表中.

/sf/answers/15584831/

class Program
{
    static void Main(string[] args)
    {
        List<Customer> list = new List<Customer>();
        list.Clone() //There is no Clone method in the list
    }
}

public static class Extensions
{
    public static IList<T> Clone<T>(this IList<T> listToClone) where T : ICloneable
    {
        return listToClone.Select(item => (T)item.Clone()).ToList();
    }
}

public class Customer
{
    public string ContactName { get; set; }
    public string City { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c#

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

将列表复制到另一个列表(新列表不应引用旧列表)

可能重复:
如何在C#中克隆通用列表?

我想在C#中将列表复制到另一个列表.问题是现有方法如copyto从另一个列表创建新列表.但是,如果我对新列表进行一些更改,旧列表也会发生变化.它因为它们的引用类型行为.如果有任何方法(除了foreach循环)从另一个列表创建一个新列表,它不会引用同一个对象

c#

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

在 C# 中生成列表的新实例

我有一个问题,使用C#,如果我初始化一定名单,可以说List<T> exampleList使用其他预先存在的列表,可以说toModify这样的:List<T> exampleList = new List<T>(toModify)。当我稍后修改toModify列表时,新创建的列表也会修改自身。如果通过由基准的值不应该的值exampleList保持不变,因为它是从其他的一个产生的?

TLDR:当我更改第二个列表时,我使用另一个列表(第二个列表)初始化的列表的值会发生变化。我来自 Java 背景,无法理解为什么会发生这种情况。我总是必须使用克隆吗?

c# clone reference list

0
推荐指数
1
解决办法
1万
查看次数

两个c#列表都被修改

我的两个列表都被修改,我试图避免这种行为......

这里有什么问题?

我有一个'大'列表,我想删除itemsToRemoveList中存在的所有项目,但没有修改原始列表.

我简化了示例代码..

List<string> aList = new List<string>(){"My","name","is", "jeff"}; // cached full list

List<string> bList = aList; // initial copy

List<string> itemsToRemoveList = new List<string>(){"jeff"};

bList.RemoveAll(itemsToRemoveList.Contains); // remove only from copy

foreach (string s in aList)
{
    Console.Write(s + " "); // expect "my name is jeff"
}
Console.WriteLine();
foreach (string s in bList)
{
    Console.Write(s + " "); // expect "my name is"
}
// however this modifies both collections. 

        Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

c# data-structures

-1
推荐指数
1
解决办法
105
查看次数