【问题标题】:Which generic collection to use?使用哪个通用集合?
【发布时间】:2010-10-11 08:20:51
【问题描述】:

我有 2 个单独的课程:

  • 区域属性
  • 字段属性

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

C# 中的什么泛型集合比较合适?

我知道我可以发送 2 个列表,函数如下所示:

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

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

【问题讨论】:

  • 我不明白你想问什么。你能澄清一下这个问题吗?
  • 您的要求并不是特别清楚,但您几乎可以肯定并不想通过引用传递您的列表。见pobox.com/~skeet/csharp/parameters.html
  • 请用代码大纲/类结构解释问题。

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


【解决方案1】:

您可以返回List&lt;KeyValuePair&lt;AreaProperties, FieldProperties&gt;&gt;

【讨论】:

    【解决方案2】:

    如果需要强制执行 1:1 关系,我推荐使用结构方法 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>();
    
    }
    

    【讨论】:

      【解决方案3】:

      您可以创建一个具有两个成员的类/结构 - AreaProperties 和 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 关系,我认为您想返回 List>> 相反,这样您就可以获得返回的每个 AreaProperties 的字段属性列表,并且您仍然保持它们之间的关系。

      【讨论】:

      • 不应该是List Save()吗?
      • .NET 中已经有一个 Generic 结构,System.Collections.Generic.KeyValuePair(Of TKey, TValue)
      • @Thomas Eyde 它应该是 Pair<...> - 感谢提醒
      • @Patrick McDonald 你是对的,你可以用 KeyValuePair 代替
      【解决方案4】:

      【讨论】:

      • 呃,为什么?他想根据 FieldProperties 映射 AreaProperties。在我看来 FieldProperties 应该是关键,不是吗?
      猜你喜欢
      • 2013-01-23
      • 2023-03-20
      • 2012-10-21
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 2011-05-16
      • 2014-03-25
      • 1970-01-01
      相关资源
      最近更新 更多