<#@ 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(); } #>