2011-07-08 30 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

いいえ、現在のコードでは不可能です。参照は値渡しであり、元のアクセス方法とは完全に独立しています。 objrefパラメータに変更した場合でも、タイプが正しくないため、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です。CommandA.PipeResultTo ().MapInput(e => e.Outdata.List)を使用してそれらをマップします。その文を書く時点で、前のコマンドがまだ実行されていないため、e.Outdataはnullです。 –

0

obj = newList objのポインタをnewListに変更した場合や、newListのポインタをobjに変更した場合の違いは?

+0

objはメインDTOのメンバーです。上記を行うと、主オブジェクトは古いオブジェクトを参照し、objは新しいオブジェクトへの参照になります。 –

関連する問題