成对请求​​对象的最直观的方法是什么?

Nei*_*son 6 c# usability

所以我必须设计一个适用于配对对象集合的类.对象之间存在一对一的映射.我希望类的客户端在使用我的类之前已经建立了这个映射.

我的问题是,让我的班级用户给我这些信息的最佳方法是什么?

要问这样的一对对吗?

MyClass(IEnumerable<KeyValuePair<Object, Object>> objects)
Run Code Online (Sandbox Code Playgroud)

或者像这样分开收藏?

MyClass(IEnumberable<Object> x, IEnumerable<Object> y)
Run Code Online (Sandbox Code Playgroud)

还是有其他选择吗?

我喜欢第一个,因为这种关系是明确的,我不喜欢它,因为它给客户带来了额外的工作.

我喜欢第二种,因为类型更原始,需要更少的工作,我不喜欢它,因为映射不明确.我必须假设订单是正确的.

意见好吗?

tva*_*son 10

在.NET 4中你应该使用Tuple<T1,T2>.有关MSDN 上的Tuple类的更多信息.

  • 仅限.NET 4:http://msdn.microsoft.com/en-us/library/dd268536.aspx#versionsTitleToggle (6认同)

JSB*_*ոգչ 5

如果您有权访问它,请使用Tuple<T, R>.如果不这样做,只需编写自己的通用TuplePair类.我会避免使用KeyValuePair,只是因为它冗长而且与之有关联Dictionary.


Mik*_*son 5

我更喜欢你提到的两个KeyValuePair,因为它更具表现力并保持对象之间的关系.

但我宁愿创建一个包含对你的对的引用的类.在我看来,这更具可读性,创建一个额外的类或结构来表达你的实际行为永远不会受到伤害.

(伪代码)

class MyPair
{
    public TypeA One;
    public TypeB Two;
}

MyClass(IEnumerable<MyPair> objects)
Run Code Online (Sandbox Code Playgroud)

Tuple<,>在一些答案中提到了,它与KeyValuePair一样可读,但更灵活,因为它可以包含两个以上的参数.

[编辑 - 在晚安睡觉后更加深入了解元组/课程]

要元组还是不元组