在我的应用程序中,我有一个具有用户定义类型属性的类,如下所示:
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的对象实例。
答案 0 :(得分:1)
我怀疑您的意思是说您正在创建List<A>
,并希望能够从A
的实例中找出MyType
拥有“它的实例”。如果不将信息放在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实例与两个{{{{ 1}}(它应该抛出一个异常吗?保持两个列表?保持较新?)你可能想让MyType
更新传入的值,以保持关联同步。
答案 1 :(得分:1)
最简单的答案是:字典,而不是列表。但我觉得它很难看。 或者输入内部父参考。
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;
}
}
}
答案 2 :(得分:0)
你不能这样做的原因是: -
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){}
Jon的答案与A的一个实例可以分配给MyType的MyProperty非常相关,那么你所说的是A的实例也可以属于MyPropertyX和MyPropertyY。
抱歉stremlenye但是克隆对象的目的是什么?对我来说,需要有一个很好的理由来创建一个全新的独立实例...特别是因为除了最简单的对象之外,克隆很少能很好地实现(也许有一个很好的理由,我只是看不到它从例子中。)