public override object GetValue(object obj, BindingFlags invokeAttr, Binder binder, object[] index, CultureInfo culture) { var indexCnt = index != null ? index.Length : 0; if (getter.ParameterCount <= indexCnt) { using (var ctx = appdomain.BeginInvoke(getter)) { if (!IsStatic) { ctx.PushObject(obj); } for (int i = 0; i < getter.ParameterCount; i++) { ctx.PushObject(index[i], !getter.Parameters[i].IsValueType); } ctx.Invoke(); return(ctx.ReadObject(getter.ReturnType.TypeForCLR)); } } else { throw new ArgumentException("Index count mismatch"); } }