Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#对象列表-.Add()按引用。Add()按值_C#_List - Fatal编程技术网

C#对象列表-.Add()按引用。Add()按值

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; }

我有一个查询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 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中,属性声明为静态,因此每个声明的实例只有一个属性副本谢谢。我一定是盯着显而易见的问题看了这么久,当我发布我的问题时,我甚至都没听清楚。谢谢。我肯定盯着显而易见的问题看了这么久,当我发布我的问题时,我甚至都没听清楚。