我有一個double[]
帶有公共 get 和 set 訪問器的型別的屬性。每當更改陣列的一個元素時,我想呼叫一些輸入檢查。
我嘗試了以下方法:
private double[] myArray;
public double[] MyArray
{
get { return myArray; }
set
{
CheckInput(value);
myArray = value;
}
}
但是,例如,當我運行classInstance.MyArray[3] = 5;
該CheckInput
方法時,不會呼叫該方法(這是有道理的,因為該陣列僅被修改但未重新設定為新物件)。
uj5u.com熱心網友回復:
無法截獲原始陣列。但是,您可以添加自己的索引器而不是公開原始陣列:
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]
與索引器交談。
uj5u.com熱心網友回復:
也許創建自己的 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
}
}
}
uj5u.com熱心網友回復:
考慮到您在嘗試設定陣列的任何時候都會知道索引和值,您可以使用一個方法來代替:
public void UpdateMyArray(int index, double value){
MyArray[index] = value;
// Do other things here
}
如果這對您不起作用,則可以創建自己的陣列型別并將索引器附加到該新陣列類,但實作ObservableCollection
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/488885.html