相关疑难解决方法(0)

深度克隆对象

我想做的事情如下:

MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)

然后更改未在原始对象中反映的新对象.

我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.

如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?

.net c# clone

2135
推荐指数
34
解决办法
77万
查看次数

如何在.NET中执行对象的深层复制(特别是C#)?

我想要一个真正的深拷贝.在Java中,这很容易,但是你如何在C#中做到这一点?

.net c# serialization clone

560
推荐指数
6
解决办法
42万
查看次数

如何回滚对绑定的DataGridView所做的更改?

我有一个DataGridView,其数据源设置为自定义对象的通用列表.当用户更改值(在这种情况下检查/取消选中复选框)时,对象中的基础布尔字段会发生变化.

我是否应该创建List的"副本"进行绑定,然后在用户提交时手动更新(如果是这样,如何创建此副本),或者是否有一种简单的方法来回滚对数据源所做的更改.

(我正在使用C#)

c# data-binding

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

在不参考原件的情况下复制对象

我有一个函数,它从列表中获取一个对象作为参数。我创建了这个对象的一个​​新实例,并使它等于传递给函数的对象。我更改了新对象的一些属性,但这些更改也会应用于列表中的原始对象。例子:

public void myFunction(Object original)
{
    var copyOfObject = original;

    copyOfObject.SomeProperty = 'a';
}
Run Code Online (Sandbox Code Playgroud)

从阅读中,我想我正在创建原始对象的浅表副本,因此当我更新新对象的属性时,这会导致原始对象的属性更改为?我见过一些复制整个对象列表以创建深层副本的示例,但我只想创建这个单个对象的深层副本,而不是整个列表。我可以这样做而不必做:

  copyOfObject = new Object();
  copyOfObject.someProperty = original.someProperty;
Run Code Online (Sandbox Code Playgroud)

在进行更改之前?

c#

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

是否有可能通过修改其副本来更改数组元素?

我正在开展一个相当复杂的项目,并且在过去一小时内一直在努力调试一个问题.我找到了看起来或多或少像这样的麻烦代码:

Client ClientToChange = Clients[index];
ClientToChange.Rank = 80;
Run Code Online (Sandbox Code Playgroud)

客户端是Client类的静态数组,在同一个类中声明.

由于某种原因改变ClientToChange的等级会改变数组的内容,即

Console.WriteLine(Clients[index].Rank)
Run Code Online (Sandbox Code Playgroud)

返回80(而在它之前是100),当然index没有改变.

这对我来说似乎很奇怪,但这就是发生的事情.

我写了一个小的虚拟程序来测试它,只是为了确保:

    static string[] foo = new string[10];
    static void Main(string[] args)
    {

        foo[3] = "bar";

        string test = "";
        test = foo[3];

        test = "fb";

        Console.Write(foo[3]);
        Console.Write(test);
Run Code Online (Sandbox Code Playgroud)

当然,这应该像它应该的那样:打印barfb.

我在做一些我看不到的事情,或者我不知道应该做些什么?

c# arrays

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

更改参考类型的值

请考虑此代码

some v1=new some();
v1.x=10;
some v2=v1;
v1.x=15;
Console.Write(v2.x);//Show 15
Run Code Online (Sandbox Code Playgroud)

当我在v1上更改x属性时为什么要在v2上更改x的值?

c#

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

如何从列表中分离一个变量,它从 C# 获取它的值

所以我有一个清单:

List<Class> myList = new List<Class>
Run Code Online (Sandbox Code Playgroud)

我创建了一个等于其中一个项目的对象,以便我可以更新它:

Class item = myList[0]
Run Code Online (Sandbox Code Playgroud)

我还有该项目的副本(以便我可以在需要时恢复任何更改):

Class copyItem = myList[0]
Run Code Online (Sandbox Code Playgroud)

当我更新item项目时myList也会更新,这就是我想要的。

但是我不希望 . 发生这种情况,copyItem我该如何制作才能使副本不引用myList

c# list

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

如何在C#中复制一个类对象

根据我在C#中的理解,当一个对象被分配给另一个相同类型的对象时,它的引用被复制而不是值.所以我想知道如何将一个对象分配给另一个对象,使其值被复制而不被引用到第二个对象.

c# object

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

标签 统计

c# ×8

.net ×2

clone ×2

arrays ×1

data-binding ×1

list ×1

object ×1

serialization ×1