我正在努力描述我遇到的这个问题,但现在是:
假设我现在在类(实例)的一个成员上具有属性类型:
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,而且我仍然坚持使用这种方法调用签名。
答案 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;