C# 传递数据结构

C# 传递数据结构,c#,struct,C#,Struct,我继承了一个带有数据结构的旧程序,基本上是图像读取(x、y和一些属性)。它工作正常,但我现在必须做一个主要的扩展/重构,所以我现在想用我的知识解决一些问题 public struct DataSet { public double X; public double Y; public double A; public double B;

我继承了一个带有
数据结构的旧程序,基本上是图像读取(x、y和一些属性)。它工作正常,但我现在必须做一个主要的扩展/重构,所以我现在想用我的知识解决一些问题

        public struct DataSet          
        {
            public double X;
            public double Y;
            public double A;
            public double B;
            public double C;
        }
        List<List<DataSet>> RasterSet = List<List<DataSet>>();

        //create the structure from the image file using X,Y,A,B,C

        sublist = new List<DataSet>();
        RasterSet.Add(sublist);
公共结构数据集
{
公共双X;
公共双Y;
公共双A;
公共双B;
公共双C;
}
列表光栅集=列表();
//使用X、Y、A、B、C从图像文件创建结构
子列表=新列表();
RasterSet.Add(子列表);
问题是,通过阅读,我一直认为传递一个大的
struct
是昂贵的,所以我一直将
struct
RasterSet
列表作为
公共静态
。我真的很想把它修好,但我不知道怎么做

我只使用了
光栅集列表
;这个struct的全部原因是,我正在谈论的图像软件就是这样给我数据的

更好的办法是理解是否有一种方法可以在不使用
结构(引用而不是值)的情况下保持“结构”(X,Y,a,B,C),但我不知道如何或是否


我在这里缺乏经验,但有关struct的阅读主要集中在“何时使用struct”这一老生常谈上,没有太多实际的例子(我不需要什么是struct以及何时使用它的建议)。

你可以尝试使用
ref
。有关此页面的更多信息。

第一个标记重复的第一个答案最好:如果需要值语义,请使用
struct
,如果需要引用语义,请使用
class
。如果您有可以度量的问题,只需考虑性能。至于您的特定场景,不清楚您是如何使用数据结构的,所以我们不能说什么是最好的。实际上,您有一个这样的数组,所以至少当您传递列表时,您仍然在传递引用类型。Peter,我已经做了编辑,但我对您的上一句话非常感兴趣-列表是否作为引用传递(与普通列表一样,因此成本相同?)。是的
List
是引用类型,因此传递的值始终是引用,即使
T
类型是值类型。@ferday但是,请记住,使用这些列表的某些操作可能会复制值。例如,Where(x=>)可能会在匿名函数(lambda)中将这些项作为值传递。