我有一个类似以下代码的代码。我仅用提出问题的必要条件简化了它。
我有一个Parent类,其中包括Item1类,Item2类,Item1_to_Item2_relationship类。我必须保留此结构的原因与该问题无关。
如何从Item2访问Item1中的值? 该代码更好地说明了需要做什么。
--exclude excluded
此刻,我必须纠正一个静态函数,该函数接收一个Parent参数并在那里执行逻辑。但我相信应该有一个更好,更直观的方法。如何使以上代码起作用?
答案 0 :(得分:0)
最快和最简单的方法是将parent
传递到itemX
需要从itemY
访问属性的函数中。
例如:
class Item1
{
public string id;
public string id_alt;
public string item1_code;
public Item1()
{
id = "";
item1_code = "";
}
}
class Item2
{
public string id;
public string id_alt;
public Item2()
{
id = "";
}
public void AccessItem1Prop(Parent parent) {
string item1ID = parent.items1[0].id;
}
}
您还可以将parent
传递给单个项目构造函数,并将其作为对象属性附加到该项目,但是如果您可以简单地保持环境整洁,则我会避免这种方法。
答案 1 :(得分:0)
如其他答案中所述,您可以直接访问它。既然您正在维护一种关系,那么我想您想通过这种关系来实现
var test = new List<String>();
foreach (Item2 my_item2 in parent.items2)
{
foreach (var item in parent.Item1_to_Item2_Relationships)
{
//implement your own equality comparision if it should be differernt
if (item.item2.id_alt == my_item2.id)
{
test.Add(item.item1.item1_code);
}
}
}
一些要点:
Dictionary
,因此
提供更快的查找时间。答案 2 :(得分:0)
我不喜欢代码的结构...但这是简单的答案。
您要将两种不同的商品类型添加到两个不同的收藏集中。
您正在创建一个关系项,该关系项基于id关联两者。
尽管您的代码尖叫声可以帮助您实现一个合理的想法,并且是联系诸如使用数据库之类的项目的好方法。
我们可以使用Linq轻松完成此操作,但我宁愿更贴近您如何编写问题。
首先像您所做的那样迭代您的项目,然后迭代您的关系。根据ID比较,您然后迭代其他项,并根据最终ID比较获得答案。
foreach (Item2 my_item2 in parent.items2)
{
foreach (Item1_to_Item2_Relationship relatedItem in parent.Item1_to_Item2_Relationships)
{
if (my_item2.id == relatedItem.item2.id_alt)
{
foreach (Item1 item1 in parent.items1)
{
if (relatedItem.item1.id_alt == item1.id)
{
Console.WriteLine(item1.item1_code);
}
}
}
}
}
//Outputs
//CODE_01
//CODE_02
答案 3 :(得分:-1)
'做到这一点'
var i1 = new Item1();
var i2 = new Item2();
i1.id = i2.id;
现在其他人会争辩说,您应该使用属性而不是公共字段。但是,目前您拥有的东西可以让您完全按照自己的意愿做。