仅传递接受的参数值的方法

时间:2016-04-10 08:19:43

标签: c# methods parameters parameter-passing

假设以下方法:

int ExtractMedian(int Statistic)
{
    return ExtractionWork;
}

是否可以强制Statistic仅使用1, 3, 5来接受奇数,例如ref但是在传递后不检查值?

4 个答案:

答案 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);