C# 仅对一个条目使用字典
我需要从一个方法返回2个值(一个字符串和一个点),我不想使用ref/out,因为这些值应该保持在一起 我想用一本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
字典
我的问题是:如果字典只有一个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
等值,这是不可读的。