不清楚你想得到什么,但是,用一点
Expression
树:
public static class Or<T>
{
public static readonly Func<T, T, T> Do;
static Or()
{
var par1 = Expression.Parameter(typeof(T));
var par2 = Expression.Parameter(typeof(T));
Expression or;
if (typeof(T).IsEnum)
{
Type type = Enum.GetUnderlyingType(typeof(T));
or = Expression.Convert(
Expression.Or(
Expression.Convert(par1, type),
Expression.Convert(par2, type)),
typeof(T));
}
else
{
or = Expression.Or(par1, par2);
}
Do = Expression.Lambda<Func<T, T, T>>(or, par1, par2).Compile();
}
}
您使用的代码如下:
[Flags]
public enum MyEnum
{
Val1 = 1,
Val2 = 2,
Val3 = 4,
}
public static T OrTogether<T>()
{
T ret = default(T);
foreach (T val in (T[])Enum.GetValues(typeof(T)))
{
ret = Or<T>.Do(ret, val);
}
return ret;
}