Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static void Swap<T>(Expression<Func<T>> left, Expression<Func<T>> right)
- {
- var lexpr = (MemberExpression) left.Body;
- var rexpr = (MemberExpression) right.Body;
- var lvalue = left.Compile()();
- Set(lexpr.Member, lexpr.Expression != null ? Expression.Lambda(lexpr.Expression).Compile().DynamicInvoke() : null, right.Compile()());
- Set(rexpr.Member, rexpr.Expression != null ? Expression.Lambda(rexpr.Expression).Compile().DynamicInvoke() : null, lvalue);
- }
- private static void Set(MemberInfo member, Object self, Object value)
- {
- if (member is FieldInfo)
- {
- ((FieldInfo) member).SetValue(self, value);
- }
- else // PropertyInfo
- {
- ((PropertyInfo) member).SetValue(self, value, null);
- }
- }
- public static int X { get; set; }
- public static int Y { get; set; }
- static void Main(string[] args)
- {
- X = 123;
- Y = 456;
- Swap(() => X, () => Y);
- Console.WriteLine("X = {0}, Y = {1}", X, Y);
- }
Add Comment
Please, Sign In to add comment