相关疑难解决方法(0)

复制时创建类的新实例

我有一个这样的课:

Public Class Dog{
   public Dog(string name, int age){
      Name = name;
      Age = age;
   }

   public string Name { get; set; }
   public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后我创建了这个类的实例

Dog jake = new Dog("Jake", 3);
Run Code Online (Sandbox Code Playgroud)

当我尝试复制类并更改其属性时

Dog buster = jake;
buster.Name = "Buster";
Run Code Online (Sandbox Code Playgroud)

当我这样做时,杰克的名字也会改变

我怎么能避免这个?

请注意,我正在使用的类包含如此多的属性,如果我可以复制类并更改我想要的属性,它将使我更容易.

c# clone class

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

使用C#在struct中定义Dictionary

我有结构

    struct User
    {
        public int id;
        public Dictionary<int, double> neg;         
    }
    List<User> TempUsers=new List<users>();
    List<User> users = new List<User>();
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我运行此代码时

TempUsers=users.ToList();
TempUsers[1].neg.Remove(16);
Run Code Online (Sandbox Code Playgroud)

用户的否定字典aslo删除值为16的键

c#

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

将ObservableCollection复制到另一个ObservableCollection

如何在 没有第一次收藏的情况下将ObservableCollection物品复制到另一个ObservableCollection?此处ObservableCollection项目值更改会影响两个集合.

private ObservableCollection<RateModel> _AllMetalRate = new ObservableCollection<RateModel>();
private ObservableCollection<RateModel> _MetalRateOnDate = new ObservableCollection<RateModel>();

public ObservableCollection<RateModel> AllMetalRate
{
    get { return this._AllMetalRate; }
    set
    {
        this._AllMetalRate = value;
        NotifyPropertyChanged("MetalRate");
    }
}

public ObservableCollection<RateModel> MetalRateOnDate
{
    get { return this._MetalRateOnDate; }
    set
    {
        this._MetalRateOnDate = value;
        NotifyPropertyChanged("MetalRateOnDate");
    }
}

foreach (var item in MetalRateOnDate)
    AllMetalRate.Add(item);
Run Code Online (Sandbox Code Playgroud)

造成这种情况的原因是什么?如何解决?

c# mvvm

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

传递类的副本正在改变原始副本

我有一些代码将数据下载到类中进行存储,然后创建该类的副本以传递给改变数据的方法.不知怎的,我原来的课程也被改变了,我不确定我做错了什么.

Calculations calc = new Calculations(Symbol, Market);
calc.stockData = loadData(Symbol, Market);
for (int j = calc.stockData.Count - 8; j >= 0; j--)
                    {
                        highPrice = 0;

                        // 0 newest
                        // as you go higher in the index, it is older
                        for (int k = j + 1; k < j + 8; k++)
                        {
                            kIndex = k;
                            jIndex = j;
                            decimal highRiskCurrentHigh = Calculations.calculateReturnPercentageStatic(calc.stockData.ElementAtOrDefault(k).Close,
                                calc.stockData.ElementAtOrDefault(j).High);

                            if (highRiskCurrentHigh > highPrice)
                            {
                                highPrice = highRiskCurrentHigh;
                                highIndex = k;
                            }
                        }

                        Test test …
Run Code Online (Sandbox Code Playgroud)

c# class

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

在选择现有列表的一部分的IEnumerable上调用.ToList()时,为什么在修改新列表时更新原始列表?

我有一个列表apples,我发现那些是红色的:

var redApples = apples.Where(a => a.colour == "red");
Run Code Online (Sandbox Code Playgroud)

redApples是一个IEnumerable在这里,所以如果我将其转换为列表:

var redApplesList = redApples.ToList();
Run Code Online (Sandbox Code Playgroud)

这给了我一个新对象列表.所以,如果我修改这些对象:

redApplesList.ForEach(a => a.color = "blue");
Run Code Online (Sandbox Code Playgroud)

我不希望原始apples列表中的项目根本改变颜色.但这不是发生的事情,我原来列表中的苹果"red"现在都是"blue".

这里有什么误会?

我在印象中ToList()创建了一个独立于现有列表的全新项目列表,但这表明原始列表中的指针已更新为指向新创建的对象?这是发生在引擎盖下的事情吗?

许多开发人员似乎都倾向于将事物分离成单独的列表(甚至是克隆对象),因为他们从不100%确定他们正在使用什么.了解这一领域将是有益的.

c#

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

标签 统计

c# ×5

class ×2

clone ×1

mvvm ×1