我有2个单独的课程:
1 AreaProperties可以映射到1 FieldProperties。在不改变设计的情况下,我想要一种方法来返回这些对象的List<>
C#中的哪些通用集合适合?
我知道我可以发送2个列表,功能如下:
public List<AreaProperties> Save(ref List<FieldProperties>)
{
..code
}
修改: Dror Helper的解决方案听起来不错。但是,我最近发现FieldProperties和AreaProperties之间没有1:1。 我现在如何处理这个问题。我仍然希望使用具有FieldProperties和AreaProperties对象的自定义类,但是我如何处理1到多个场景?
答案 0 :(得分:9)
您可以创建一个具有两个成员的类/结构 - AreaProperties&amp; FieldProperties并返回该类的列表
class Pair<T1, T2>
{
T1 t1;
T2 t2;
}
List<Pair<AreaProperties, FieldProperties>> Save(){ ...}
或者使用System.Collections.Generic.KeyValuePair(根据下面的Patrick建议)
List<KeyValuePair<AreaProperties, FieldProperties>> Save(){ ... }
这样你也可以保持1..1的关系。
修改强> 如果你需要1..n关系,我想你想回来 列表&gt;&GT;相反,这样你就得到了每个AreaProperties的Field Properties列表,你仍然保持它们之间的关系。
答案 1 :(得分:3)
您可以返回List<KeyValuePair<AreaProperties, FieldProperties>>
答案 2 :(得分:0)
您可以使用通用Dictionary<FieldProperties, AreaPropeties>
吗?您必须自己编写Comparer<FieldPropeties>
和KeyValuePair<FieldProperties, AreaProperties>
。
答案 3 :(得分:0)
如果需要强制执行1:1关系,我建议使用struct方法Dror mentioned。如果未强制执行1:1关系,我会考虑使用out参数修饰符。
void foo()
{
List<AreaProperties> listArea;
List<FieldProperties> listField;
}
void Bar(out List<AreaProperties> listArea, out List<FieldProperties> listField)
{
listArea = new List<AreaProperties>();
listField = new List<FieldProperties>();
}