J'écris une expression qui testera si une propriété (énumération) d'un objet a ou non des drapeaux.
Le code ci-dessous teste si la validité d'un objet "contient" ou non lundi, en utilisant la fonction HasFlag d'un Enum.
En fait, la méthode Call ne semble pas trouver un "HasFlag" correspondant ... Qu'est-ce que je fais de mal dans le code ci-dessous?
using System;
using System.Linq.Expressions;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Expression exp = null;
var myValParam = Expression.Parameter(typeof(TestHehe), "val");
var myValTestValidityParam = Expression.Property(myValParam, "TestValidity");
Validity myVal = Validity.Monday;
// Gives 'True'
Console.WriteLine(myVal.HasFlag(myVal));
// test it
var myConst = Expression.Constant(myVal, myVal.GetType());
// here!!!!!!!!!!!!!!!!!!!!!!!!!!
exp = Expression.Call(myValTestValidityParam, "HasFlag", null, myConst);
// No method 'HasFlag' on type 'ConsoleApplication3.Validity'
// is compatible with the supplied arguments.
// just to be
Console.WriteLine(exp.ToString());
}
}
public class TestHehe
{
public Validity TestValidity { get; set; }
}
[Flags]
public enum Validity
{
Monday = 0,
Tuesday = 1,
Wednesday = 2,
Thursday = 4,
Friday = 8,
Saturday = 16,
Sunday = 32
}
}
var myConst = Expression.Constant(myVal, typeof(Enum));
// here!
exp = Expression.Call(myValTestValidityParam, "HasFlag", null, myConst);
Vous cherchez cela? HasFlag
veut un Enum
comme paramètre, j'ai donc myVal
.