gpt4 book ai didi

c# - 使用数组初始值设定项

转载 作者:行者123 更新时间:2023-12-02 21:57:26 25 4
gpt4 key购买 nike

我有一个名为 Matrix : IEnumerable<double> 的类(class),(经典的数学矩阵。它基本上是一个带有一些好处的二维数组)。

该类是不可变的,因此在实例创建后无法更改其值。

如果想创建一个具有预先存在的值的矩阵,我必须将一个数组传递给构造函数,如下所示:

double[,] arr = new double[,]
{
{1,2,3}, {4,5,6}, {7,8,9}
};
Matrix m = new Matrix(arr);

有没有办法把它变成这样:(?)

Matrix m = new Matrix
{
{1,2,3}, {4,5,6}, {7,8,9}
};

更新:

找到了一种让它发挥作用的黑客方式。我不确定这个解决方案是否可取,但它确实有效。

class Matrix : ICloneable, IEnumerable<double>
{
// Height & Width are initialized in a constructor beforehand.
/*
* Usage:
* var mat = new Matrix(3, 4)
* {
* {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}
* };
*/
int rowIndex;
bool allowArrayInitializer;
double[,] tempData;
double[,] data;
public void Add(params double[] args)
{
if(!allowArrayInitializer)
throw new InvalidOperationException("Cannot use array initializer");
if(args.Length != Width || rowIndex >= Height)
throw new InvalidOperationException("Invalid array initializer.");
for(int i = 0; i < Width; i++)
tempData[i, rowIndex] = args[i];
if(++rowIndex == Height)
data = tempData;
}
}

最佳答案

如果它是不可变的,则不会;该语法糖是使用 Add() 实现的。

关于c# - 使用数组初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com