comparison Source/Data/Linq/ReflectionHelper.cs @ 3:1ef98bd70424

!bug 100 +3h Исправление проблемы BLToolkit + mono 3.4
author cin
date Fri, 22 Aug 2014 17:34:46 +0400
parents f990fcb411a9
children f757da6161a1
comparison
equal deleted inserted replaced
2:79a04c6442bf 3:1ef98bd70424
39 ex = ((UnaryExpression)ex).Operand; 39 ex = ((UnaryExpression)ex).Operand;
40 40
41 //if (ex is MemberExpression) 41 //if (ex is MemberExpression)
42 // return ((PropertyInfo)((MemberExpression)ex).Member).GetGetMethod(); 42 // return ((PropertyInfo)((MemberExpression)ex).Member).GetGetMethod();
43 43
44 return ((MethodCallExpression)ex).Method; 44 /// HACK
45 var mce = (MethodCallExpression)ex;
46 var mi = mce.Method;
47 if (mi.IsVirtual && mi.DeclaringType != mce.Object.Type)
48 mi = mce.Object.Type.GetMethod(mi.Name, mi.GetParameters().Select(p => p.ParameterType).ToArray());
49
50 return mi;
45 } 51 }
46 } 52 }
47 53
48 public static MemberInfo MemeberInfo(LambdaExpression func) 54 public static MemberInfo MemeberInfo(LambdaExpression func)
49 { 55 {
52 if (ex is UnaryExpression) 58 if (ex is UnaryExpression)
53 ex = ((UnaryExpression)ex).Operand; 59 ex = ((UnaryExpression)ex).Operand;
54 60
55 return 61 return
56 ex is MemberExpression ? ((MemberExpression) ex).Member : 62 ex is MemberExpression ? ((MemberExpression) ex).Member :
57 ex is MethodCallExpression ? ((MethodCallExpression)ex).Method : 63 ex is MethodCallExpression ? ExtractMethodInfo((MethodCallExpression)ex) :
58 (MemberInfo)((NewExpression) ex).Constructor; 64 (MemberInfo)((NewExpression) ex).Constructor;
65 }
66
67 public static MethodInfo ExtractMethodInfo(MethodCallExpression mce) {
68 var mi = mce.Method;
69 if (mi.IsVirtual && mi.DeclaringType != mce.Object.Type)
70 mi = mce.Object.Type.GetMethod(mi.Name, mi.GetParameters().Select(p => p.ParameterType).ToArray());
71
72 return mi;
59 } 73 }
60 74
61 public class Binary : Expressor<BinaryExpression> 75 public class Binary : Expressor<BinaryExpression>
62 { 76 {
63 public static MethodInfo Conversion = PropertyExpressor(e => e.Conversion); 77 public static MethodInfo Conversion = PropertyExpressor(e => e.Conversion);