使用对通用对象的引用作为参数

Cou*_*y D 4 .net c# generics

我有一些麻烦传递对一般类型的对象的引用.我找到了一种方法,创建一个'对象'并传递一个引用而不是原始的 - 但它似乎闻到了一点我.这里有更好的方式,还是我必须忍受它?

我理解第一个错误,但第二个错误让我失望.

public static T Foo<T>(ref T Bar)
{
    T Result;

    // Next line gives
    // cannot convert from 'ref T' to 'ref object'
    Result = (T)ModifyObject (ref Bar);

    // Next line gives
    // A ref or out argument must be an assignable variable
    Result = (T)ModifyObject (ref ((Object)Bar) );

    // Works
    Object Tmp = Bar;
    Result = (T)ModifyObject (ref Tmp) );

    return Result;

}

public static Object DoSomthing(ref Object Obj) {
    Object Result = Activator.CreateInstance (Obj.GetType ())
    //...
}
Run Code Online (Sandbox Code Playgroud)

DoSomething不是通用的,因为它使用Obj类型可以改变的递归.我试图坚持使用反射来调用它的通用版本,虽然在发布时可能会更好吗?

Meh*_*ari 5

该类型的ref参数应该匹配参数的类型.您不能在此处依赖隐式转换.Eric Lippert有一篇相关的博客文章:为什么ref和out参数不允许类型变化?