覆盖一个对象

时间:2011-07-08 10:30:33

标签: .net c#-4.0

我有一种情况,我得到一个对象的引用,我想用另一个相同类型的对象“覆盖”。我在设计上知道对象属于同一类型。我无法访问此函数中的父对象。

dataobject的定义如下:

    Class DataObject
    {
         public List<int> Stuff = new List<int>();
    }

然后有一个方法

    void DoStuff(object obj)
    {
         // At this point I know that obj is List<int>
         // Create new object from some source
         var newList = new List<int>();

         // Here I would like to make the passed object the new object
         (the pointer of obj) = (the pointer of newlist)
    }

我不知道这是否可行。这只是我几个小时以来一直在撞击我的脑袋而且我的大脑似乎停止了工作。

提前致谢

约翰

4 个答案:

答案 0 :(得分:0)

您可以使用克隆功能,但请查看以下Stackoverflow链接,该链接有一个很好的克隆对象的方法。

答案 1 :(得分:0)

传递对象by reference

void DoStuff(ref DataObject dataObject)
{
    dataObject = ...;
}
但是,

ref object不允许在此处使用。

答案 2 :(得分:0)

不,使用当前代码是不可能的 - 引用按值传递,因此完全独立于您最初访问它的方式。即使您将obj更改为ref参数,也无法使用ref Stuff调用该方法,因为类型不正确。您可以使用通用参数潜在来执行此操作:

void DoStuff<T>(ref T obj)
{
    object newList = new List<int>();
    obj = (T) newList;
}

但这太可怕了。

这通常是想要这样做的设计气味 - 如果你能解释更多关于更大的图片,我们可以提供更多帮助。

答案 3 :(得分:0)

obj = newList如果将obj的指针更改为newList或将newList的指针更改为obj,它会有什么不同?