1

タイプの引数を持つメソッドがあります

Func<Color, Double, Color> colorFunc

これは、いくつかの関数のいずれかを指定して、その場で新しい関数を発明できるので便利です。私の難しさは、ほとんどすべての関数が追加のパラメーター(この場合はDouble)を取りますが、そうでないものもあることです。これらの関数に使用されることのない「ダミー」オプションパラメータを追加することで、これを解決しました。

これが最善の解決策ですか?パラメータの数が異なる複数の関数がある場合はどうなりますか?それらすべてをダミーパラメータで処理する必要がありますか?

4

1 に答える 1

3

Func<t>この場合、いくつかの理由から、デリゲートからカスタム デリゲート タイプに移行することをお勧めします。

まず、デフォルト

    public delegate Color HerpinateColor(Color initial, double count = double.NaN);

オプションのパラメーターを識別し、それらのデフォルトを設定できます。しかし、デフォルト値が渡されたものである場合はどうすればよいでしょうか? これにより、2 番目の利点であるドキュメントが得られます。

    /// <summary>
    /// A method to reherpinate colors or something lol
    /// </summary>
    /// <param name="initial">An initial value for the <see cref="Color"/>
    /// to apply the reherpenation algorithm on.</param>
    /// <param name="count">(optional)The average herp of the derp.</param>
    /// <returns>A reherpenated <see cref="Color"/></returns>
    /// <remarks>Implementations should avoid fooing the bar if <paramref name="count"/>
    /// is <see cref="double.NaN"/>.</remarks>
    public delegate Color HerpinateColor(Color initial, double count = double.NaN);

カスタム デリゲートは文書化できます。確かに、それをメソッド シグネチャに詰め込むことはできますが、インテリセンスでは表示されません (または、大幅に制限されます)。

Funcs/actions は非常に便利ですが、カスタム デリゲートを使用すると、いくつかの利点があります。


ああ、まだラムダを使用できます。これは、API が実装者に同じ感覚を与えることを意味します。

HerpinateColor derp = (initial, count) => double.IsNaN(count) ? 
                                                 Color.Multiply(initial, .5f) : 
                                                 Color.Multiply(initial, (float)count);
于 2012-09-04T13:53:41.847 に答える