我正在实现一个名为 Position
的结构, 表示包含属性 double Latitude, Longitude, Elevation
的地理位置.
它的构造函数之一是
public Position(double lat, double lon, double elev)
我创建了另一个这样的:
public Position(IEnumerable<double> coords) : this(
coords.ElementAt(0),
coords.ElementAt(1),
coords.ElementAt(2)
) {}
这是有效的,但我可以通过 IEnumerable
似乎有些“错误”任何长度超过 3,所以我的问题是:
- 我应该检查
coords
的长度吗?并且只有在coords.Count == 3
时才接受? - 我应该使用
IEnumerable<double>
以外的序列类型吗? ? - 我是否应该完全忘记将序列作为参数传递,为什么?
最佳答案
是的,您应该检查长度并在错误时抛出异常(可能是
ArgumentException
),因为这显然是一种异常情况。没有任何类型的长度是类型签名的一部分。但是,您应该使用
IList
以保证顺序(与IEnumerable
不同),并且您可以按索引访问。正是出于您描述的原因,您应该忘记作为
IEnumerable
传递。它只是一个不必要的潜在错误源,而且它使您的签名描述性降低,从而使您的代码可读性降低。如果您可以在编译时防止错误,为什么要放弃它?但是,您可以考虑创建一个
Coordinates
类,它只包含Latitude
、Longitude
和Elevation
参数。如果您需要执行诸如变换到不同坐标系之类的操作,这在以后也可能有用。
关于c# - 如果我将这个序列作为参数传递,我应该检查序列长度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253690/