仅使用字典输入一个条目

时间:2016-06-20 18:53:06

标签: c# visual-studio data-structures

我需要从方法中返回2个值(字符串和一个点),我真的不想使用ref / out,因为值应该保持在一起。

我在考虑使用Dictionary<string, Point>

我的问题是:如果只有一个KeyValuePair,字典是数据结构的一个很好的选择吗?或者还有其他合适的选择吗?

4 个答案:

答案 0 :(得分:5)

如果您不想创建命名类,可以使用Tuple返回多个参数

Tuple<int,  Point> tuple =
        new Tuple<int,  Point>(1, new Point());

return tuple

答案 1 :(得分:4)

您可以创建自己的课程。但是Tuple<T1, T2>可能很方便。当你需要传递一个包含几种不同类型的对象时,它只适用于那种事情。

我倾向于创建一个类,除非通过定义非常清楚元组是什么。这样你就可以给它一个提高可读性的名字。如果您以后确定有两个以上的值,它也可以节省维护麻烦。您可以维护一个课程,而不是在多个地方用Tuple<int, Point>替换Tuple<int, Point, Something>

我不会使用KeyValuePair,因为有人看着它会合理地假设图片中有某个字典,所以会产生一些混乱。如果只有两个值而没有字典则没有密钥。

答案 2 :(得分:2)

我使用Class或Structure来存储这两个值。我更喜欢它来维护代码并允许您将来扩展系统。

public class MyData {
    public string MyString {get;set;}
    public Point MyPoint {get;set;}
}

public class Storage {
    public MyData retrieveMyData() {
        MyData data = new MyData();
        return data;
    }
}

答案 3 :(得分:1)

每当你看到这个,你应该停下来思考“这应该是一个对象吗?” 如果它是一个一个你可以使用元组,但大多数时候你会想出一个相同的参数再次结合使用的情况。到那时,你会希望你第一次创建了一个对象。

通过为参数集创建对象,您可以为其指定一个可提高可读性的名称。如果将参数封装到对象的属性中,您还可以创建getter和setter方法,这将允许您进一步控制对它们的访问,并在将来需要时添加更多功能。

最重要的是可读性。我可以称之为NamedPoint,告诉任何人阅读我的代码为什么我将字符串和点组合在一起。如果我想让它成为一定长度,或者不以数字或任何其他数字开头,我可以稍后对名称添加验证。