2017-12-06 20 views
3

私は次のような場合があります。親子関係

public class ParentObject 
{ 
public int id {get;set;} 
public string parent_object_name {get;set;} 
public List<ChildObject> child_objects {get;set;} 
} 

public class ChildObject 
{ 
public int id {get;set;} 
public string child_object_name {get;set;} 
} 

ParentObject parent_object = new ParentObject() 
{ 
    id = 1, 
    parent_object_name = "test name", 
    child_objects = new List<ChildObject>(){ new ChildObject(){ id = 1, child_object_name = "test name"}; 
} 

を私はparent_object.child_objectsを参照するために完全に有効であることを承知していますが、私はどのように私はこのような基準を持っている私のクラスをコーディングすることができますかわかりませんすなわち、child_objects.First().parent_objectとなります。 Entity Frameworkのナビゲーションプロパティと同様です。

+1

@Fildor編集しました。 – mko

答えて

3

一つの方法は、パラメータとして親を受け取るコンストラクタを定義することです。

public class ChildObject 
{ 
    public ChildObject(ParentObject aParent) 
    { 
    parent = aParent 
    } 

    public ParentObject parent { get; private set; } 
    public int id {get;set;} 
    public string child_object_name {get;set;} 
} 
2

はこれを試してみてください:

public class ChildObject 
{ 
    public int id { get; set; } 
    public string child_object_name { get; set; } 
    public ParentObject parent_object { get; set; } 
} 
+1

WeakReferenceを使用することをお勧めしますか? – Fildor

+0

@Fildor - なぜですか?どのような目的のために?親はGCedでも子供はいけないと思う? – Enigmativity

+1

それは私の考えでした。しかし、それが必要かどうかはわかりません。あなたのコメントを読んだので、それは悪い考えかもしれません。 – Fildor

1

ChildObjectParentObjectを追加することにより、あなたは子から親を使用することができます。

Try it online

public class ParentObject 
{ 
    public int id {get;set;} 
    public string parent_object_name {get;set;} 
    public List<ChildObject> child_objects {get;set;} 
} 

public class ChildObject 
{ 
    public int id {get;set;} 
    public string child_object_name {get;set;} 

    // add a parent 
    public ParentObject parent_object {get;set;} 
} 


public static void Main() 
{ 
    var parent_object = new ParentObject 
    { 
     id = 1, 
     parent_object_name = "test name" 
    }; 
    parent_object.child_objects = new List<ChildObject> 
    { 
     new ChildObject {id = 1, child_object_name = "test name", parent_object = parent_object} 
    }; 
    Console.WriteLine(parent_object.child_objects.First().parent_object.parent_object_name); 
}