Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅对一个条目使用字典_C#_Visual Studio_Data Structures - Fatal编程技术网

C# 仅对一个条目使用字典

C# 仅对一个条目使用字典,c#,visual-studio,data-structures,C#,Visual Studio,Data Structures,我需要从一个方法返回2个值(一个字符串和一个点),我不想使用ref/out,因为这些值应该保持在一起 我想用一本字典 我的问题是:如果字典只有一个KeyValuePair,它是数据结构的一个好选择吗?或者还有其他合适的选项吗?如果不想创建命名类,可以使用Tuple返回多个参数 Tuple<int, Point> tuple = new Tuple<int, Point>(1, new Point()); return tuple 元组= 新元组(1

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

我想用一本
字典


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

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

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

return tuple
元组=
新元组(1,新点());
返回元组

您可以创建自己的类。但是
Tuple
可能很方便。当你需要传递一个包含几种不同类型的对象时,它就是为了这类事情

我倾向于创建一个类,除非根据定义非常清楚元组的用途。这样你就可以给它起个名字,提高可读性。如果您以后确定有两个以上的值,它还可以避免维护麻烦。您可以只维护一个类,而不是在多个位置将
Tuple
替换为
Tuple


我不会使用
KeyValuePair
,因为查看它的人会合理地认为图片中的某个地方有一本词典,因此会造成一些混乱。如果只有两个值而没有字典,那么就没有键。

我会使用类或结构来存储这两个值。我更喜欢它来维护代码,并允许您在将来扩展系统

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;
    }
}

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

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


主要是可读性。我可以称之为NamedPoint,它告诉任何阅读我的代码的人为什么我将字符串和点配对在一起。如果我希望名称具有一定的长度,或者不以数字或其他任何数字开头,我可以在名称中添加验证。

可能
KeyValuePair
更好。类比较便宜,只需补足一个来保存数据。解释中建议的
Tuple
在您的案例中不起作用的原因会使这个问题变得更好(并证明您研究了现有选项)或
返回Tuple.Create(1,new Point());
Tuple唯一的缺点是调用方必须访问
Item1
Item2
等值,这是不可读的。