使用哪个通用集合?

时间:2009-03-04 18:50:05

标签: c# .net asp.net generics collections

我有2个单独的课程:

  • AreaProperties
  • FieldProperties

1 AreaProperties可以映射到1 FieldProperties。在不改变设计的情况下,我想要一种方法来返回这些对象的List<>

C#中的哪些通用集合适合?

我知道我可以发送2个列表,功能如下:

public List<AreaProperties> Save(ref List<FieldProperties>)
{
    ..code
}

修改: Dror Helper的解决方案听起来不错。但是,我最近发现FieldProperties和AreaProperties之间没有1:1。 我现在如何处理这个问题。我仍然希望使用具有FieldProperties和AreaProperties对象的自定义类,但是我如何处理1到多个场景?

4 个答案:

答案 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)

答案 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>();

}