Guest User

Untitled

a guest
May 24th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.93 KB | None | 0 0
  1. public static void Swap<T>(Expression<Func<T>> left, Expression<Func<T>> right)
  2. {
  3. var lexpr = (MemberExpression) left.Body;
  4. var rexpr = (MemberExpression) right.Body;
  5. var lvalue = left.Compile()();
  6. Set(lexpr.Member, lexpr.Expression != null ? Expression.Lambda(lexpr.Expression).Compile().DynamicInvoke() : null, right.Compile()());
  7. Set(rexpr.Member, rexpr.Expression != null ? Expression.Lambda(rexpr.Expression).Compile().DynamicInvoke() : null, lvalue);
  8. }
  9.  
  10. private static void Set(MemberInfo member, Object self, Object value)
  11. {
  12. if (member is FieldInfo)
  13. {
  14. ((FieldInfo) member).SetValue(self, value);
  15. }
  16. else // PropertyInfo
  17. {
  18. ((PropertyInfo) member).SetValue(self, value, null);
  19. }
  20. }
  21.  
  22. public static int X { get; set; }
  23. public static int Y { get; set; }
  24.  
  25. static void Main(string[] args)
  26. {
  27. X = 123;
  28. Y = 456;
  29. Swap(() => X, () => Y);
  30. Console.WriteLine("X = {0}, Y = {1}", X, Y);
  31. }
Add Comment
Please, Sign In to add comment