#@ template language="C#" debug="true" hostSpecific="true" #>
<#@ output extension=".cs" #>
<#@ import namespace="System.Text" #>
// Attention : ce fichier a été automatiquement généré par un
// template T4. Toute modification manuelle sera écrasée !!!
using System;
using System.Linq.Expressions;
namespace Developpez.Dotnet.Linq
{
public static partial class LinqHelper
{
<#
// In .NET 3.5 there are predefined Func delegates for up to 4 arguments
int maxArgs = 4;
// Expr methods
for (int n = 2; n <= maxArgs; n++)
{
string typeArgList = MakeList("T{0}", n);
string dummyArgList = MakeList("T{0} dummyArg{0}", n);
string delegateName = string.Format("Func<{0}, TResult>", typeArgList);
string expressionTypeName = string.Format("Expression<{0}>", delegateName);
string methodName = string.Format("Expr<{0}, TResult>", typeArgList);
#>
///
/// Renvoie l'expression passée en paramètre, de façon à profiter de l'inférence de type
///
<# for (int i = 1; i <= n; i++) { #>
/// Le type du paramètre <#= i #>
<# } #>
/// Le type de retour de l'expression
/// L'expression dont on veut inférer le type
/// L'expression passée en paramètre
public static <#= expressionTypeName #> <#= methodName #>(<#= expressionTypeName #> expr)
{
return expr;
}
///
/// Renvoie l'expression passée en paramètre, de façon à profiter de l'inférence de type
///
<# for (int i = 1; i <= n; i++) { #>
/// Le type du paramètre <#= i #>
<# } #>
<# for (int i = 1; i <= n; i++) { #>
/// Objet utilisé comme modèle pour déterminer le type du paramètre <#= i #>
<# } #>
/// Le type de retour de l'expression
/// L'expression dont on veut inférer le type
/// L'expression passée en paramètre
public static <#= expressionTypeName #> <#= methodName #>(<#= dummyArgList #>, <#= expressionTypeName #> expr)
{
return expr;
}
<#
}
#>
<#
// Func methods
for (int n = 2; n <= maxArgs; n++)
{
string typeArgList = MakeList("T{0}", n);
string dummyArgList = MakeList("T{0} dummyArg{0}", n);
string delegateName = string.Format("Func<{0}, TResult>", typeArgList);
#>
///
/// Renvoie la fonction passée en paramètre, de façon à profiter de l'inférence de type
///
<# for (int i = 1; i <= n; i++) { #>
/// Le type du paramètre <#= i #>
<# } #>
/// Le type de retour de la fonction
/// La fonction dont on veut inférer le type
/// La fonction passée en paramètre
public static <#= delegateName #> <#= delegateName #>(<#= delegateName #> func)
{
return func;
}
///
/// Renvoie la fonction passée en paramètre, de façon à profiter de l'inférence de type
///
<# for (int i = 1; i <= n; i++) { #>
/// Le type du paramètre <#= i #>
<# } #>
<# for (int i = 1; i <= n; i++) { #>
/// Objet utilisé comme modèle pour déterminer le type du paramètre <#= i #>
<# } #>
/// Le type de retour de la fonction
/// La fonction dont on veut inférer le type
/// La fonction passée en paramètre
public static <#= delegateName #> <#= delegateName #>(<#= dummyArgList #>, <#= delegateName #> func)
{
return func;
}
<#
}
#>
}
}
<#+
string MakeList(string format, int n)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++)
{
if (i > 0)
sb.Append(", ");
sb.AppendFormat(format, i + 1);
}
return sb.ToString();
}
#>