public void ConditionalIndex_Compile_Val() { var px = Expression.Parameter(typeof(QuzX?)); var qx = new QuzX(); var ix = typeof(QuzX).GetProperty("Item"); var ax = CSharpExpression.Bind(ix.GetIndexParameters()[0], Expression.Constant(0)); var mx = CSharpExpression.ConditionalIndex(px, ix, ax); var fx = Expression.Lambda <Func <QuzX?, int?> >(mx, px); var dx = fx.Compile(); Assert.AreEqual(42, dx(qx)); Assert.IsNull(dx(null)); var pn = Expression.Parameter(typeof(QuzN?)); var qn = new QuzN(); var jn = typeof(QuzN).GetProperty("Item"); var an = CSharpExpression.Bind(jn.GetIndexParameters()[0], Expression.Constant(0)); var mn = CSharpExpression.ConditionalIndex(pn, jn, an); var fn = Expression.Lambda <Func <QuzN?, int?> >(mn, pn); var dn = fn.Compile(); Assert.AreEqual(42, dn(qn)); Assert.IsNull(dn(null)); var ps = Expression.Parameter(typeof(QuzS?)); var qs = new QuzS(); var js = typeof(QuzS).GetProperty("Item"); var bs = CSharpExpression.Bind(js.GetIndexParameters()[0], Expression.Constant(0)); var ms = CSharpExpression.ConditionalIndex(ps, js, bs); var fs = Expression.Lambda <Func <QuzS?, string> >(ms, ps); var ds = fs.Compile(); Assert.AreEqual("bar", ds(qs)); Assert.IsNull(ds(null)); }
public void ConditionalIndex_Compile_Val() { var px = Expression.Parameter(typeof(QuzX?)); var qx = new QuzX(); var ix = typeof(QuzX).GetProperty("Item"); var ax = CSharpExpression.Bind(ix.GetIndexParameters()[0], Expression.Constant(0)); var mx = CSharpExpression.ConditionalIndex(px, ix, ax); var fx = Expression.Lambda<Func<QuzX?, int?>>(mx, px); var dx = fx.Compile(); Assert.AreEqual(42, dx(qx)); Assert.IsNull(dx(null)); var pn = Expression.Parameter(typeof(QuzN?)); var qn = new QuzN(); var jn = typeof(QuzN).GetProperty("Item"); var an = CSharpExpression.Bind(jn.GetIndexParameters()[0], Expression.Constant(0)); var mn = CSharpExpression.ConditionalIndex(pn, jn, an); var fn = Expression.Lambda<Func<QuzN?, int?>>(mn, pn); var dn = fn.Compile(); Assert.AreEqual(42, dn(qn)); Assert.IsNull(dn(null)); var ps = Expression.Parameter(typeof(QuzS?)); var qs = new QuzS(); var js = typeof(QuzS).GetProperty("Item"); var bs = CSharpExpression.Bind(js.GetIndexParameters()[0], Expression.Constant(0)); var ms = CSharpExpression.ConditionalIndex(ps, js, bs); var fs = Expression.Lambda<Func<QuzS?, string>>(ms, ps); var ds = fs.Compile(); Assert.AreEqual("bar", ds(qs)); Assert.IsNull(ds(null)); }