我有一个以数组作为参数的Web服务。问题是我只想让用户向我发送一个包含15个条目的数组。当然,如果他们给我发了一个更大的阵列,我可以编写代码只采取前15,但我不想这样做。我想让用户了解我们需要15个条目,只有15个条目,而不是更多。
我知道将数组初始化为固定值的唯一方法是实例化它,我不能将其作为参数。
也许作为参数的数组不是最佳选择?任何想法?
答案 0 :(得分:9)
您无法真正控制操作输入的数组长度,但可以添加一些动态验证(例如,如果用户传递不同长度的数组,则抛出ArgumentException)。另一个选择是简单地为你的操作提供15个参数,但是如果参数是相关的并且数组更有意义,那么这可能不太可读。
答案 1 :(得分:2)
在服务的WSDL / XSD中,您可以指定15的minOccurs
和maxOccurs
。如:
<xsd:element name="item" minOccurs="15" maxOccurs="15">
<xsd:complexType>
...
</xsd:complexType>
</xsd:element>
答案 2 :(得分:1)
如果数组大小不正确,可能会抛出ArgumentException。
答案 3 :(得分:1)
这里唯一的语言功能是
public void Foo<T>(T t1, T t2, T t3, T t4, T t5, T t6, T t7, T t8, T t9, T t10, T t11, T t12, T t13, T t14, T t15)
{
internalFoo(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
}
private void internalFoo(params T[] arr)
{
// profit
}
struct FooParams<T>
{
public T t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15;
}
public void Foo<T>(FooParams<T> fooParams)
{
// profit
}
Tuple<...,Rest>
声明样式嵌套元组,因为框架库只会转到8元组(八元组?)答案 4 :(得分:0)
你可以提供webservice功能的描述,让用户知道只考虑15个元素,如果use试图压倒那个限制,抛出参数异常或你自己的自定义异常...... 否则无其他办法。
答案 5 :(得分:0)
你可以使用Contract.Requires(arg.Length==15)
并希望静态检查器能够很好地捕获用户错误。
或者您可以创建一个包装其拥有的数组的类。由于该类拥有并创建了数组,因此可以控制其大小。
在大多数情况下,我更喜欢第一种方式。有时你必须忍受运行时错误。