<#@ template language="C#" debug="true" hostSpecific="true" #> <#@ output extension=".cs" #> <#@ Assembly Name="System.Core.dll" #> <#@ import namespace="System" #> <#@ import namespace="System.Linq" #> <#@ import namespace="System.Linq.Expressions" #> <# var binaryOperators = new[] { new { Type = ExpressionType.Add, DocSummary = "Calcule la somme de deux valeurs", DocReturn = "La somme des deux valeurs" }, new { Type = ExpressionType.Subtract, DocSummary = "Calcule la différence de deux valeurs", DocReturn = "La différence entre les deux valeurs" }, new { Type = ExpressionType.Multiply, DocSummary = "Calcule le produit de deux valeurs", DocReturn = "Le produit des deux valeurs" }, new { Type = ExpressionType.Divide, DocSummary = "Calcule le quotient de deux valeurs", DocReturn = "Le quotient des deux valeurs" }, new { Type = ExpressionType.Modulo, DocSummary = "Calcule le reste de la division entre deux valeurs", DocReturn = "Le reste de la division de x par y" } }; #> using System; using System.Linq.Expressions; namespace Developpez.Dotnet { /// /// Fournit des opérateurs arithmétiques génériques. /// public static partial class GenericOperators { <# foreach(var op in binaryOperators) { #> /// /// <#= op.DocSummary #> /// /// Premier opérande /// Premier opérande /// <#= op.DocReturn #> public static T <#= op.Type #>(T x, T y) { return OperatorCache.<#= op.Type #>Operator(x, y); } <# } #> private static class OperatorCache { <# foreach(var op in binaryOperators) { #> public static readonly Func <#= op.Type #>Operator = MakeBinaryOperator(ExpressionType.<#= op.Type #>); <# } #> } } }