Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Array change event

Tags:

arrays

c#

I've an array property called Value:

public string[,] Value { get; set; }

I want to call the Save() method when any value of the array (not the entire array) has changed.

Is there an easy way to implement it?

like image 262
Jaime Oro Avatar asked Dec 28 '22 23:12

Jaime Oro


2 Answers

Not really. Arrays are very primitive types and do not notify you when things change.

The best you can do is create a custom type that acts like a 2D array, but in addition it raises an event when an element has changed. Your current class would then subscribe to this event and call Save().

Some additional comments:

  • You probably do not want to expose the setter, this allows people to change which array you are pointing to. You probably want to expose only the getter, so they can change values, but not the whole array.
  • There might already be a type for what I mentioned, I do not know of one.
  • If you are going to change the APIs anyways, it might make more sense to expose an indexer on your class, then call Save() when the indexer's setter is called. See below.
    public string this[int x, int y] 
    { 
        get { return this.localArray[x,y]; }
        set 
        { 
            this.localArray[x,y] = value;
            this.Save();
        }
    }
like image 136
earlNameless Avatar answered Dec 30 '22 13:12

earlNameless


Don't use an array. Think ObservableCollection<>, make your own if the one in the box doesn't fit your needs. And drop the setter, you don't want the client code to break your notifications.

like image 31
Hans Passant Avatar answered Dec 30 '22 12:12

Hans Passant