2011-07-08 207 views
0

我有一种情况,我得到一个对象的引用,我想用另一个相同类型的对象“覆盖”它。我通过设计知道这些物体是同一类型的。我无法访问此函数中的父对象。覆盖对象

的数据对象是定义为这样的:

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

我不知道这是可能的。这只是我现在头撞我头几个小时,我的大脑似乎已停止工作。

在此先感谢

约翰

+0

你是不是很努力地只是试图替换东西的内容是你?例如'void DoStuff(){this.Stuff = new List ; } –

回答

0

通行证对象by reference

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

ref object这里将不再允许然而,。

0

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

0

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

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

这是相当可怕的,虽然。

这通常是设计的气味要做到这一点 - 如果你能解释更多关于更大的图片,我们可能会帮助更多。

+0

我有一个命令对象模型,允许一起管道命令。命令的类型是CommandBase ,其中T:s是模型。如果命令的签名不匹配,我使用委托来将命令传递给模型的不同部分。也就是说,如果A - > B与数据A.Outdata.List - > B.Indata I映射它们使用CommandA.PipeResultTo ().MapInput(e => e.Outdata.List)。在编写该语句时,由于上一个命令尚未执行,因此e.Outdata为空。 –

0

obj = newList如果将obj的指针改为newList或newList的指针,它将会使它变为obj?

+0

因为obj是主DTO的成员。如果你这样做了,主对象仍然会引用旧对象,而obj只是对新对象的引用。 –