Reactive Extensionを使用して、ボタンリストの何番目のボタンが押されたかを知るには


UniRx(Unity用Reactive Extension)を使用して、  
カードリストのような画面を作成しようとしています。

個別のボタンであれば、ボタンと対になる処理を書けば良いので、  
クリック通知があったらSubscribeに〜する。といった書き方ができますが  
リスト構造の場合、ボタンが押されただけではどこのインデックスのボタンが  
押されかがわかりません。

.netの新しいバージョンであればObeservableCollectionなどが使えそうなのですが、  
Unityでは使用できませんでした。

MVPパターンで作成しているので、  
データのやり取りはあくまでModel側がおこない  
イベントやアクションなどはView側が受け持って  
Model側とView側のやり取りは、Presenter側に書きます。

ですので、どこのインデックスのボタンが押されたかは  
View側に書きたいのですが、どのように関連付ければ良いのかがわかりません。

考え方やサンプルソースなどを教えていただけないでしょうか？

追記：IndexOfを使って自分自身を検索するようにしようとしたのですが、  
ラムダ式の中で自分自身を渡す方法がわからず。  
IObservable`<Unit>`のUnitではなく、IObservable`<Unit>`を渡したい

[code]

    /// <summary>
    /// ボタンのリスト
    /// </summary>
    public List<Button> ButtonList = new List<Button>();
    /// <summary>
    /// ボタンイベント通知リスト
    /// </summary>
    List<IObservable<Unit>> abc = new List<IObservable<Unit>>();
    /// <summary>
    /// ボタン通知のハッシュリスト
    /// </summary>
    List<int> abcHash = new List<int>();
    
    void Start () 
    {
        abc.Add(ButtonList[0].OnClickAsObservable());
        abcHash.Add(abc[0].GetHashCode());
    
        abc.Add(ButtonList[1].OnClickAsObservable());
        abcHash.Add(abc[1].GetHashCode());
    
        abc.Add(ButtonList[2].OnClickAsObservable());
        abcHash.Add(abc[2].GetHashCode());
    
        abc.Add(ButtonList[3].OnClickAsObservable());
        abcHash.Add(abc[3].GetHashCode());
    
        foreach(IObservable<Unit> test in abc)
        {
            test.Subscribe(
                _ => ButtonClicked(abcHash.IndexOf(test自身のハッシュ値を取得したい)))
                );
        }
    }
    
    private void ButtonClicked(int index)
    {
        Debug.Log("index=" + index.ToString());
    }
    
[/code]




各ループ中の変数に`i`の値を代入しておけばラムダ式から参照できます。

[code]

    for(int i = 0; i < abc.Count; i++)
    {
        int n = i; // ループ内の変数に代入
        abc[i].Subscribe(
            _ => ButtonClicked(n)
            );
    
    }
    
[/code]

なお`i`のスコープは各ループの外であるため最終的に値が`abc.Count`となり、参照すると意図した動作にはなりません。

