动态声明方法输出参数的类型

时间:2015-10-26 05:10:38

标签: c# reflection

我正在努力描述我遇到的这个问题,但现在是:

假设我现在在类(实例)的一个成员上具有属性类型:

 Type t = propertyInfo.PropertyType;

如何使用 out 关键字声明或设置某个变量,以便稍后接收方法调用结果?

t value; // Obviously doesn't compile, How do I declare this?

// or this?
//var value = default(t); // doesn't work

someObject.GetData(out value);

这里的前提是我没有拥有someObject,而且我仍然坚持使用这种方法调用签名。

2 个答案:

答案 0 :(得分:0)

如果有例如:

internal class Test
{
    public void GetData(out int value)
    {
        value = 42;
    }
}

可以使用Invoke()传递object []作为参数来调用该方法:

 var obj = new Test();
 var type = obj.GetType();
 var m = type.GetMethod("GetData");

 var pars = new object[] { null };
 m.Invoke(obj, pars);

答案 1 :(得分:0)

我可能在这里误解了问题的复杂性,但是,如果你有一个someObject的编译时实例,你可以像这样包装邪恶:

class OutWrap<T,U> where T : U
{
    private readonly SomeObject<T> obj;

    public OutWrap(SomeObject<T> obj)
    {
        this.obj = obj;
    }

    public T Value
    {
        get
        {
            T t;
            obj.GetData(out t);
            return t;
        }
    }
}

并使用它:

var evil = new SomeObject<int>(); // or however/whereever you get it from 
var wrap = new OutWrap<int, int>(evil);
var output = wrap.Value;