开发者

Linq Expressions does not find a public method... :-/

开发者 https://www.devze.com 2023-04-01 01:11 出处:网络
I write a expression that will test if a property(enum) of a object have, or have not some flags set.

I write a expression that will test if a property(enum) of a object have, or have not some flags set.

The code bellow test if the validity of an object "contains" or not Monday, using the HasFlag function of an Enum.

Actually, the Call method seems do not find a corresponding "HasFlag"... What I do wrong in 开发者_JAVA百科the bellow code?

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);

Are you looking for this? HasFlag wants an Enum as the parameter, so I downcasted myVal.

0

精彩评论

暂无评论...
验证码 换一张
取 消