Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static IEnumerable<Expression> GetSetProps<TSelf>(
- Expression self, Expression other, bool copy)
- {
- PropertyInfo info = typeof(TSelf).GetProperty(nameof(Loaded));
- var iloaded = Expression.Property(self, info);
- var uloaded = Expression.Property(other, info);
- MethodInfo add = typeof(HashSet<string>).GetMethod(nameof(Add));
- foreach (info in GetValidProps(typeof(TSelf)))
- {
- var iprop = Expression.Property(self, info);
- var uprop = Expression.Property(other, info);
- var assign = Expression.Assign(iprop, uprop);
- var name = Expression.Constant(info.Name);
- var call = Expression.Call(iloaded, add, name);
- var block = Expression.Block(assign, call);
- var cond = MakeCond(iloaded, uloaded, name, copy);
- var ifthen = Expression.IfThen(cond, block);
- yield return ifthen;
- }
- }
- static Expression MakeCond(
- Expression iloaded, Expression uloaded, Expression name, bool copy)
- {
- MethodInfo contains = typeof(HashSet<string>).GetMethod(nameof(Contains));
- var icall = Expression.Call(iloaded, contains, name);
- var ucall = Expression.Call(uloaded, contains, name);
- var lnot = Expression.Not(icall);
- var land = Expression.AndAlso(lnot, ucall);
- return copy ? land : ucall;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement