相关疑难解决方法(0)

深度复制树视图节点

我正在尝试将树视图节点复制到treenodecollection以进行其他处理.当我执行treeview.nodes.clear()下一行时,我的treenodecollection变为null.您能告诉我如何将树视图节点复制到treenodecollection并保留节点的副本,即使在调用实际树视图节点的Clear方法之后也是如此?

TreeNodeCollection tnc = null;
private TypeIn()
{
      tnc = treeView1.Nodes;
      treeView1.Nodes.Clear();
      //Now my tnc becomes null, but I want the tnc for future use.
}
Run Code Online (Sandbox Code Playgroud)

c#

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

结构或深层副本 - C#

我终于设法复制了我的对象的值类型,一个使用字典来存储动态属性的类.我想知道两件事,单声道兼容性和效率.我是C#的新手,一般都有很多关于编程的知识,所以如果我滥用了几个短语就道歉:P

我用过这个方法你如何在.NET中做一个对象的深层复制(特别是C#)?...复制我的对象 我也会有数百个这样的对象,并且想知道以这种方式复制它们是非常低效的吗?结构会是更好的选择吗?但我不确定何时使用结构.它可以用单声道移植吗?一些谷歌搜索表明这种序列化可能会引发一个问题.

c# mono performance struct

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

System.Random的深层克隆

我正在尝试深度克隆包含System.Random变量的对象.我的应用程序必须是确定性的,因此我需要捕获随机对象状态.我的项目基于.Net Core 2.0.

我在这里使用了一些深度克隆代码(你如何在.NET(特别是C#)中对对象进行深度复制?)使用序列化.

System.Random的文档是混合的:

序列化

不可序列化

我收到以下错误.

System.Runtime.Serialization.SerializationException HResult = 0x8013150C Message =在程序集'System.Private.CoreLib中输入'System.Random',Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 7cec85d7bea7798e'未标记为可序列化.来源= System.Runtime.Serialization.Formatters

System.Random可以按我想要的方式克隆吗?

我创建了一个小程序来说明.

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace RandomTest
{
    class Program
    {
        static void Main(string[] args)
        {
            Container C = new Container();
            Container CopyC = DeepClone(C);
        }

        public static T DeepClone<T>(T obj)
        {
            using(var ms = new MemoryStream())
            {
                var formatter = new BinaryFormatter();
                formatter.Serialize(ms, obj); //<-- error here
                ms.Position …
Run Code Online (Sandbox Code Playgroud)

.net c# random serialization

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

枚举并将属性从一个对象复制到另一个相同类型的对象

我使用第三方控件将一些数据导出为不同的格式.该控件有一个属性ExportSettings.但它是只读的.

我要手动设置它的属性,如

ctrl.ExportSettings.Paging = false;
ctr.ExportSettings.Background = Color.Red;
Run Code Online (Sandbox Code Playgroud)

所以我从用户那里得到了ExportSettings对象,我想把它设置为控件.

如何将其所有成员值复制到用户控件?

.net c# copy object

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

会员副本会员

在一个应用程序中,我们有一组ORM对象和一组业务对象.大多数时候我们只是通过会员副本来做会员.其他时候我们稍微处理数据.例如:

tEmployee emp = new tEmployee();
emp.Name = obj.Name;
emp.LastName = obj.LastName;
emp.Age = obj.Age;
emp.LastEdited = obj.LastEdited.ToGMT();
Run Code Online (Sandbox Code Playgroud)

现在这个工作得很好,并且速度很快,但在编码方面并不完全简洁.我们的一些对象有多达40个成员,所以做这样的副本可能会变得相当繁琐.当然,你只需要两种方法来进行转换,但是我想找到一种更好的方法来实现这一点.

反射是一种自然的选择,但在基准测试中,我发现使用反射时执行时间大约慢了100倍.

有没有更好的方法来解决这个问题?

澄清:我正在从一种类型转换为另一种类型.在上面的例子中,obj的类型为BLogicEmployee,emp的类型为tEmployee.他们共享成员名称,但就是这样.

c#

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

如何停止引用其他类对象?

我有 2 个与 C# 中的类相同的对象。

Myclass obj1 = new Myclass();
Myclass obj2 = null;
obj2 = obj1;
obj1.Name = "abc";     //"abc" will also assign to obj2.Name. 
Run Code Online (Sandbox Code Playgroud)

当我分配时obj1.Name="abc",它也会分配给obj2.Name. 我想阻止这一切。我已经尝试过 const, seal 但没有得到结果。有人能建议我如何停止对obj1on的引用obj2吗?

c#

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

C# 核心 3.1 ByRef 和 ByVal

我想在 C# 核心中设置一个等于其他对象值的对象,而不是通过引用!

x.len=10;
val y=x;
y.len=x.len*2;
Run Code Online (Sandbox Code Playgroud)

我希望y.len设置为20,并x.len保持不变,但两者y.lenx.len20,我正在寻找一种方式来断开xy

我记得在VB6 中我们有像ByRefByVal这样的东西,它们使我们能够控制这个东西,C# Core 3.x 中是否有类似的东西?

c# pass-by-reference pass-by-value asp.net-core

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

列出持有参考

我有一个对象的List(在C#中)(我创建的类).我能够使用列表,但问题是我只创建(实例化我认为是正确的术语)我的一个对象类,并且我继续将它添加到列表中,即使该对象的属性随着代码的迭代而改变.我希望能够将硬编码对象添加到我的列表而不是参考对象.

这是我目前正在做的事情:

public class SaveData
{
    public double save_property1;
    public double save_property2;    
}

in the application

SaveData newSaveData = new SaveData();
List<SaveData> newSaveDataList = new List<SaveData>;

if ( some condition)
{
    newSaveData.save_property1 = x
}

if (some condition 2) 
{
    newSaveData.save_property2 = y 
    newSaveDataList.Add(SaveData);  // 
}
Run Code Online (Sandbox Code Playgroud)

由于X和Y在迭代中发生变化,我希望SaveDate我添加到列表中的对象不会随着每次迭代而改变(因此我可以保留Data对象的历史记录),即硬编码而不是用作参考.

c#

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

C#复制构造函数

我为问一些对C#伙计来说可能太基本的东西而道歉.我主要用C++编写代码.

所以,如果我想为我的班级编写一个赋值构造函数,我该怎么做?到目前为止,我有这个,但它似乎没有编译:

public class MyClass
{
    public string s1;
    public string s2;
    public int v1;

    public MyClass()
    {
        s1 = "";
        s2 = "";
        v1 = 0;
    }

    public MyClass(MyClass s)
    {
        this = s;    //Error on this line
    }
}


MyClass a = new MyClass();
MyClass b = new MyClass(a);
Run Code Online (Sandbox Code Playgroud)

.net c# constructor

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

是否有更好的深度克隆方法列表?

所以我需要一种深度克隆的方法.我想要一张卡片列表等于另一张卡片列表,但我还想修改其中一个克隆.

我做了一个复制列表的方法,如下所示:

    public List<Card> Copy(List<Card> cards)
    {
        List<Card> clone = new List<Card>();
        foreach (var card in cards)
        {
            clone.Add(card);
        }
        return clone;
    }
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

        _cards = new List<Card>();
        _thrownCards = new List<Card>();

        _cards = Copy(_thrownCards);
        _thrownCards.Clear();
Run Code Online (Sandbox Code Playgroud)

我没有C#的经验,但不知怎的,我的直觉告诉我,我的复制方法可以变得更简单.没有其他方法可以深度复制列表吗?我尝试使用MemberWiseClone,但这只是创建了对同一个对象的引用,而不是克隆它(可能我误解了MemberWiseClone方法).

有没有人有任何提示如何简单地克隆列表对象?

c# deep-copy

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