using System.Linq.Expressions;
public interface IExtraBar : IBar
public IBar Bar { get; set; }
public static void Main(string[] args)
Expression<Func<IFoo, string>> expr = t => ((t as IFoo).Bar as IExtraBar).Baz;
var visitor = new CastRemoverVisitor();
var expr1 = visitor.Visit(expr);
Console.WriteLine(expr1.ToString());
public class CastRemoverVisitor : ExpressionVisitor
public override Expression Visit(Expression node)
protected override Expression VisitUnary(UnaryExpression node)
return Visit(node.Operand);