[英]how can I get instance from the property
在我的應用程序中,我有一個類,它具有用戶定義類型的屬性,如下所示:
class MyType
{
public A MyProperty
{
get;
set;
}
}
class A
{
.....some methods and proeprties
}
對於需要從主程序執行的某些操作,我創建了一個A列表,並在創建MyType對象時將其添加到MyProperty中。
List<A> myList = new List<A>();
MyType m1 = new MyType();
myList.Add(m1.MyProperty);
MyType m2 = new MyType();
myList.Add(m2.MyProperty);
......more instances
並將其傳遞給我的主程序,在那里我對這些屬性執行不同的操作,這也反映在這些實例中。 有什么方法可以從列表中的該屬性獲取任何特定MyProperty的對象實例。
我懷疑您的意思是您正在創建List<A>
並且希望能夠從A
的實例中找出MyType
A
哪個實例“擁有”它。 沒有將信息放入A
(或沒有完整的MyType
實例列表並對其進行檢查),就無法做到這一點。 畢竟, MyType
兩個實例可以具有相同的A
:
MyType first = new MyType();
MyType second = new MyType();
A a = new A();
first.MyProperty = a;
second.MyProperty = a;
哪個MyType
a
邏輯上與之關聯? 兩者皆有或兩者皆有,真的...
最干凈的方法是讓A
知道它與哪個MyType
顯式相關-然后,如果您嘗試將A的一個實例與MyType
兩個實例相關聯,則可以決定會發生什么(應該拋出異常嗎?將兩者都保留為列表) ?保持更新?)您可能想使MyType.MyProperty
更新傳入的值,以使關聯保持同步。
最簡單的答案:使用字典,而不是列表。 但是我覺得它很丑。 或放入內部父參照。
class A:ICloneable
{
internal MyClass _parent;
public MyClass Parent
{
get
{
return this._parent;
}
}
#region ICloneable Members
public object Clone()
{
return this.MemberwiseClone();
}
#endregion
.....some methods and proeprties
}
class MyType
{
private A _myProperty;
public A MyProperty
{
get
{
return this._myProperty;
}
set
{
this._myProperty = a.Clone();
this._myProperty._parent = this;
}
}
}
您為何無法執行此操作的任何原因:-
List<MyType> myList = new List<MyType>();
MyType m1 = new MyType();
myList.Add(m1);
然后在主程序中,您可以從MyType獲取所有MyProperty,此外,您還可以訪問可能需要的有關MyType對象的任何信息。
這個想法有點類似...我經常看到開發人員創建這樣的方法
public void ProcessFoo(int idOfFoo){}
然后,他們需要從Foo對象中獲取其他細節,並將其添加到簽名中
public void ProcessFoo(int idOfFoo, string name){}
最好的方法(除非有一些怪異的限制)只是首先傳遞整個Foo對象。
public void ProcessFoo(Foo foo){}
嗯,我很樂意在沒有更多上下文的情況下提供任何其他“建議”。 我敢肯定,在您正在做的事情中,這是有道理的,但對我來說似乎很危險。
喬恩的答案與A的一個實例可以分配給MyType的MyProperty有關,因此,您要說的是A的實例也可以屬於MyPropertyX和MyPropertyY。
對不起stremlenye,但是克隆對象的目的是什么? 對我來說,創建一個全新的單獨實例將是一個很好的理由……尤其是因為除了最簡單的對象之外,很少能在所有對象上很好地實現克隆(也許有一個很好的理由,我只是看不見它)從示例)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.