Skip to content

Instantly share code, notes, and snippets.

@baba-s
Created March 29, 2014 15:27
Show Gist options
  • Select an option

  • Save baba-s/9856506 to your computer and use it in GitHub Desktop.

Select an option

Save baba-s/9856506 to your computer and use it in GitHub Desktop.
using System;
/// <summary>
/// Func型の拡張メソッドを監理するクラス
/// </summary>
public static partial class FuncExtensions
{
/// <summary>
/// パラメーターを受け取らずに戻り値を返す Func デリゲートを実行します
/// </summary>
/// <typeparam name="TResult">Func デリゲートの戻り値の型</typeparam>
/// <param name="func">パラメーターを受け取らずに戻り値を返す Func デリゲート</param>
/// <param name="result">Func デリゲートのデフォルトの戻り値</param>
/// <returns>Func デリゲートの戻り値</returns>
public static TResult Call<TResult>(this Func<TResult> func, TResult result = default(TResult))
{
return func != null ? func() : result;
}
/// <summary>
/// 1 つのパラメーターを受け取って戻り値を返す Func デリゲートを実行します
/// </summary>
/// <typeparam name="T">Func デリゲートのパラメーターの型</typeparam>
/// <typeparam name="TResult">Func デリゲートの戻り値の型</typeparam>
/// <param name="func">1 つのパラメーターを受け取って戻り値を返す Func デリゲート</param>
/// <param name="arg">Func デリゲートのパラメーター</param>
/// <param name="result">Func デリゲートのデフォルトの戻り値</param>
/// <returns>Func デリゲートの戻り値</returns>
public static TResult Call<T, TResult>(this Func<T, TResult> func, T arg, TResult result = default(TResult))
{
return func != null ? func(arg) : result;
}
/// <summary>
/// 2 つのパラメーターを受け取って戻り値を返す Func デリゲートを実行します
/// </summary>
/// <typeparam name="T1">Func デリゲートの第 1 パラメーターの型</typeparam>
/// <typeparam name="T2">Func デリゲートの第 2 パラメーターの型</typeparam>
/// <typeparam name="TResult">Func デリゲートの戻り値の型</typeparam>
/// <param name="func">1 つのパラメーターを受け取って戻り値を返す Func デリゲート</param>
/// <param name="arg1">Func デリゲートの第 1 パラメーター</param>
/// <param name="arg2">Func デリゲートの第 2 パラメーター</param>
/// <param name="result">Func デリゲートのデフォルトの戻り値</param>
/// <returns>Func デリゲートの戻り値</returns>
public static TResult Call<T1, T2, TResult>(this Func<T1, T2, TResult> func, T1 arg1, T2 arg2, TResult result = default(TResult))
{
return func != null ? func(arg1, arg2) : result;
}
/// <summary>
/// 3 つのパラメーターを受け取って戻り値を返す Func デリゲートを実行します
/// </summary>
/// <typeparam name="T1">Func デリゲートの第 1 パラメーターの型</typeparam>
/// <typeparam name="T2">Func デリゲートの第 2 パラメーターの型</typeparam>
/// <typeparam name="T3">Func デリゲートの第 3 パラメーターの型</typeparam>
/// <typeparam name="TResult">Func デリゲートの戻り値の型</typeparam>
/// <param name="func">1 つのパラメーターを受け取って戻り値を返す Func デリゲート</param>
/// <param name="arg1">Func デリゲートの第 1 パラメーター</param>
/// <param name="arg2">Func デリゲートの第 2 パラメーター</param>
/// <param name="arg3">Func デリゲートの第 3 パラメーター</param>
/// <param name="result">Func デリゲートのデフォルトの戻り値</param>
/// <returns>Func デリゲートの戻り値</returns>
public static TResult Call<T1, T2, T3, TResult>(this Func<T1, T2, T3, TResult> func, T1 arg1, T2 arg2, T3 arg3, TResult result = default(TResult))
{
return func != null ? func(arg1, arg2, arg3) : result;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment