[英]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.