通常のマルチキャストデリゲートでは、一番最後のデリゲートに対する返り値のみ取得可能です。それぞれのデリゲートに対する返り値を取得する方法を調べてみました。

// tFilterがdelegateになります。
Delegate[] tDelegates = tFilter.GetInvocationList();

昨日のメソッドはこうか書き換えることができます。

昨日

    private Filter mFilter;
    public bool Accept(Entity aEntity)
    {
        return this.mFilter(aEntity);
    }

変更後

private Filter mFilter;
public bool Accept(Entity aEntity)
{
	foreach(Filter tFilter in this.mFilter.GetInvocationList())
	{
		if(!tFilter(aEntity))
		{
			return false;
		}
	}
	return true;
}
カテゴリー: 技術情報