C# 方法只传递接受的参数值
假设采用以下方法:C# 方法只传递接受的参数值,c#,methods,parameters,parameter-passing,C#,Methods,Parameters,Parameter Passing,假设采用以下方法: int ExtractMedian(int Statistic) { return ExtractionWork; } 例如,可以使用ref强制Statistic仅接受奇数,如1、3、5,但在传递后不检查值吗 是否可以强制统计只接受像1、3、5这样的奇数 例如,使用ref,但在传递后不检查值 不,我不这么认为 我只需在方法开始时检查: int ExtractMedian(int Statistic) { if(Statistic % 2 == 0)
int ExtractMedian(int Statistic)
{
return ExtractionWork;
}
例如,可以使用ref
强制Statistic
仅接受奇数,如1、3、5
,但在传递后不检查值吗
是否可以强制统计
只接受像1、3、5这样的奇数
例如,使用ref
,但在传递后不检查值
不,我不这么认为
我只需在方法开始时检查:
int ExtractMedian(int Statistic)
{
if(Statistic % 2 == 0)
throw new ArgumentException("Statistic must be odd");
return ExtractionWork;
}
不,没有办法
代码契约可以用来强制执行此操作,但它们基本上是代码中的后处理步骤,然后可以被分析器用来查看无效调用。它们不是完整的.NET功能的一部分。您必须在某个地方执行奇数或偶数检查,通常更好的做法是让函数负责检查其输入是否有效
话虽如此,如果这不是一个选项,您可以创建一个奇数类,其值只能是奇数
public class odd {
int value;
int get {return value;}
void set{//check if odd before setting value;}
}
您可以将参数声明为一个类,该类具有从类中的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);
我不明白ref在这种情况下会有什么帮助。你说的“武力”是什么意思?如果消费者传递了一个偶数,你希望发生什么?好吧,通过使用ref
,被调用的方法会反映在调用方法中,所以我所说的“例如”,是一种类似于传递ref参数
@YacoubMassad的方法,类似于试图传递无效参数的无效方法。我不确定我是否理解。您希望抛出异常还是希望出现编译错误,或者确切地说是什么?如果有的话,我建议使用包含int值的不可变结构。请原谅我的无知,但为什么不可变?下面是答案。对于冗长的答案,您可能也希望