假设以下方法:
int ExtractMedian(int Statistic)
{
return ExtractionWork;
}
是否可以强制Statistic
仅使用1, 3, 5
来接受奇数,例如ref
但是在传递后不检查值?
答案 0 :(得分:8)
是否可以强制
Statistic
仅接受像1, 3, 5
这样的奇数 例如,使用ref
但是在传递后不检查值?
不,我不这么认为。
我只是在方法的开头检查:
int ExtractMedian(int Statistic)
{
if(Statistic % 2 == 0)
throw new ArgumentException("Statistic must be odd");
return ExtractionWork;
}
答案 1 :(得分:1)
不,没有办法做到这一点。
代码合同可以用来强制执行此操作 - 但它们基本上是代码中的后处理步骤,然后分析器可以使用它来查看无效的调用。它们不是完整的.NET功能的一部分。
答案 2 :(得分:1)
你必须在某处进行奇数甚至检查,通常更好的做法是让函数负责检查其输入是否有效。
话虽如此,如果这不是一个选项,你可以制作一个Odd类,其值只能是奇数。
public class odd {
int value;
int get {return value;}
void set{//check if odd before setting value;}
}
答案 3 :(得分:0)
您可以将参数声明为一个类,该类具有从int的隐式转换和类中的check值。
public class OddValue
{
private int _value = 1;
public int Value
{
get
{
return _value;
}
set
{
if (value % 2 == 0)
throw new ArgumentOutOfRangeException();
_value = value;
}
}
public OddValue(int value)
{
this.Value = value;
}
public static implicit operator OddValue(int value)
{
return new OddValue(value);
}
}
public static void test(OddValue value)
{
}
test(5);