C#对象列表-.Add()按引用。Add()按值
我有一个查询XML(文件)然后将值存储在列表中的应用程序。我在不同的文件中以相同的方式定义了两个类:C#对象列表-.Add()按引用。Add()按值,c#,list,C#,List,我有一个查询XML(文件)然后将值存储在列表中的应用程序。我在不同的文件中以相同的方式定义了两个类: namespace Cnc11Info { public class AxisInfo { public char V300_Label { get; set; } public double V300_SlowJog { get; set; } public double V300_FastJog { get; set; }
namespace Cnc11Info
{
public class AxisInfo
{
public char V300_Label { get; set; }
public double V300_SlowJog { get; set; }
public double V300_FastJog { get; set; }
}
}
namespace Cnc11Info
{
public class DriveInfo
{
public static double DriveIndex { get; set; }
public static string DriveType { get; set; }
public static double DriveVersion { get; set;
}
}
声明列表相同:
public static List<AxisInfo> axesInfo = new List<AxisInfo>();
public static List<DriveInfo> driveInfo = new List<DriveInfo>();
MainWindow.axesInfo.Add(new AxisInfo());
MainWindow.driveInfo.Add(new DriveInfo());
MainWindow.axesInfo[index].GetType().GetProperty(propertyName.ToString()).SetValue(MainWindow.axesInfo[index], value);
MainWindow.driveInfo[index].GetType().GetProperty(propertyName.ToString()).SetValue(MainWindow.driveInfo[index], value);
并将相同的数据插入每个对象的属性中:
public static List<AxisInfo> axesInfo = new List<AxisInfo>();
public static List<DriveInfo> driveInfo = new List<DriveInfo>();
MainWindow.axesInfo.Add(new AxisInfo());
MainWindow.driveInfo.Add(new DriveInfo());
MainWindow.axesInfo[index].GetType().GetProperty(propertyName.ToString()).SetValue(MainWindow.axesInfo[index], value);
MainWindow.driveInfo[index].GetType().GetProperty(propertyName.ToString()).SetValue(MainWindow.driveInfo[index], value);
其中索引=0-7。在每次迭代中,为项目中的每个属性正确设置值,对于列表axesInfo,为axesInfo[i]正确设置每个项目,但对于driveInfo-为列表中的所有8个项目将每个属性设置为相同的值。我假设简单的答案是driveInfo中的所有对象都是引用,但为什么?如何修复
DriveInfo
不是静态的,但其属性是静态的。这与分配单个全局变量是一样的<代码>公共静态对象与C#中的全局
声明最接近
由于属性是静态的,DriveInfo
的所有实例的属性值都相同。您可以通过添加一个非静态公共
属性并将其设置为循环变量i
作为值来测试这一点(因此它会随着时间的推移而计数)。您将看到它随着每次迭代而变化,但其他值保持不变
编辑:总的来说,即使有20个对象具有静态属性MyProp,更改MyProp的值也会在对象的每个实例中更改它
DriveInfo
不是静态的,但其属性是静态的。这与分配单个全局变量是一样的<代码>公共静态对象与C#中的全局
声明最接近
由于属性是静态的,DriveInfo
的所有实例的属性值都相同。您可以通过添加一个非静态公共
属性并将其设置为循环变量i
作为值来测试这一点(因此它会随着时间的推移而计数)。您将看到它随着每次迭代而变化,但其他值保持不变
编辑:总的来说,即使有20个对象具有静态属性MyProp,更改MyProp的值也会在对象的每个实例中更改它 不确定您在问什么。在DriverInfo中,属性声明为静态,因此每个声明的实例只有一个属性副本不确定您在问什么。在DriverInfo中,属性声明为静态,因此每个声明的实例只有一个属性副本谢谢。我一定是盯着显而易见的问题看了这么久,当我发布我的问题时,我甚至都没听清楚。谢谢。我肯定盯着显而易见的问题看了这么久,当我发布我的问题时,我甚至都没听清楚。