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");
            }
        }