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