Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# 带数组字段的结构有意义吗?_C#_Arrays_Struct - Fatal编程技术网

C# 带数组字段的结构有意义吗?

C# 带数组字段的结构有意义吗?,c#,arrays,struct,C#,Arrays,Struct,我有一个数组作为第二个字段的以下结构: public struct UncNumber { private double _value; private DependsOn[] _dependencies; public double Value { get { return _value; } } public DependsOn[] Dependencies { get { return _dependencies; } } public UncN

我有一个数组作为第二个字段的以下结构:

public struct UncNumber
{
    private double _value;
    private DependsOn[] _dependencies;

    public double Value { get { return _value; } }
    public DependsOn[] Dependencies { get { return _dependencies; } }

    public UncNumber(double value, DependsOn[] dependencies)
    {
        _value = value;
        _dependencies = dependencies;
    }
}
顺便说一下,
DependsOn
struct如下所示:

public struct DependsOn
{
    private int _input;
    private double _jacobi;

    public int Input { get { return _input; } }
    public double Jacobi { get { return _jacobi; } }

    public DependsOn(int input, double jacobi)
    {
        _input = input;
        _jacobi = jacobi;
    }
}
我查看了以下资源:

但是我还没有得出结论,是否应该为
UncNumber
使用结构或类。我有以下补充意见,为什么我认为在这种情况下结构是更好的选择:

  • 我正在使用上面的
    UncNumber
    结构进行数学计算,类似于我可以使用
  • 我有很多方法使用
    UncNumber
    struct的数组。例如:矩阵乘法
    UncNumber[,]Dot(UncNumber[,]a,UncNumber[,]b)
  • UncNumber
    struct的许多实例将是非常短暂且不可变的
  • UncNumber
    结构的实例大小为16字节(双精度值为8字节,引用类型/数组依赖项为8字节)

或者一个带有数组字段的结构根本没有意义

UncNumber结构的许多实例将是非常短暂且不可变的。
该类型肯定不是不可变的。您有公共字段。它们可以变异。@Servy I可以有私有字段、只读属性和构造函数
UncNumber(双值,DependsOn[]依赖项)
。所以它应该是不可变的。是的,你可以通过这样做使它不可变。请注意,
DependsOn
当前也是可变的,而实际上不应该是可变的。还要注意的是,如果从
UncNumber
返回数组,即使不让数组变量发生变异,返回的数组也是可变的,可以进行变异。要使类型正确不可变,您需要返回某种类型的只读集合(即
IEnumerable
IReadOnlyList
,具体取决于您需要什么)。@Sery我知道不可变的内容。为了简化起见,我只是在帖子中这样写代码。我应该编辑问题中的代码吗?如果您的实际结构是不可变的,那么是的,您应该编辑问题以反映这一点,因为这是一个高度相关的差异。