函数调用约束

时间:2011-10-31 18:13:59

标签: c# asp.net .net

是否有类似C#的“呼叫限制”?

例如,我有以下功能:

public UInt16 ConvertByteToUInt16 (byte[] buffer)
{
   if (buffer.Length != 2)
   {
       throw new InvalidArgumentException(); 
   }

   Convert();
}

是否可以编写如下内容:

public UInt16 ConvertByteToUInt16 (byte[] buffer) : where (buffer.Lenght = 2)
{
    Convert();       
}

如果我像这样调用函数:

ConvertByteToUInt16 (new byte[] { 0xFF, 0xFF, 0xFF } )

我想在编译时遇到错误。 我很确定C#2.0上没有这样的东西,但也许在C#4.0上? 提前谢谢。

2 个答案:

答案 0 :(得分:5)

您无法在标准.NET中执行此操作。您需要手动检查,然后抛出适当的异常:

public UInt16 ConvertByteToUInt16 (byte[] buffer)
{
    if (buffer.Length != 2)
        throw new ArgumentException("buffer needs to be of length 2", "buffer");
    Convert();       
}    

答案 1 :(得分:1)

据我所知,这是不可能的。

您可以考虑DBC(按合同设计),(前置条件,后置条件,不变量)

有很好的例子: http://www.codeproject.com/KB/cs/designbycontract.aspx