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);