我有一个带有公共get和set访问器的类型为double[]
的属性。当数组中的一个元素被改变时,我想调用一些输入检查。
我已经试过了:
private double[] myArray;
public double[] MyArray
{
get { return myArray; }
set
{
CheckInput(value);
myArray = value;
}
}
然而,当我运行例如classInstance.MyArray[3] = 5;
时,CheckInput
方法没有被调用(这是有意义的,因为数组只是修改了,但没有重新设置为新对象)。
不能截取原始数组。但是,您可以添加自己的索引器,而不是暴露原始数组:
private double[] myArray;
public double this[int index]
{
get { return myArray[index]; }
set
{
// your per-element validation here, using 'value' and 'index'
myArray[index] = value;
}
}
调用者将使用yourObj[index]
与索引器对话。
可以创建自己的double[]类并重载索引器:
static void Main(string[] args)
{
var extArray = new ExtendedArray<double>(10);
extArray[0] = 2.5;
}
public class ExtendedArray<T>
{
private T[] _array;
public ExtendedArray(int size)
{
_array = new T[size];
}
public T this[int index]
{
get => _array[index];
set
{
_array[index] = value;
// Do other stuff here
}
}
}
考虑到您在尝试设置数组时随时都知道索引和值,您可以使用一个方法来代替:
public void UpdateMyArray(int index, double value){
MyArray[index] = value;
// Do other things here
}
如果这对你不起作用,可以创建自己的数组类型,并将索引器附加到新的数组类,但实现ObservableCollection
可能会更容易。