我有一个这样的课:
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)
当我这样做时,杰克的名字也会改变
我怎么能避免这个?
请注意,我正在使用的类包含如此多的属性,如果我可以复制类并更改我想要的属性,它将使我更容易.
我有结构
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的键
如何在
没有第一次收藏的情况下将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)
造成这种情况的原因是什么?如何解决?
我有一些代码将数据下载到类中进行存储,然后创建该类的副本以传递给改变数据的方法.不知怎的,我原来的课程也被改变了,我不确定我做错了什么.
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) 我有一个列表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%确定他们正在使用什么.了解这一领域将是有益的.