如何调用一个方法每当一个数组类型的属性的条目被改变?



我有一个带有公共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可能会更容易。

相关内容

  • 没有找到相关文章

最新更新