如何防止方法在C#.NET中接受2个错误的bool?

时间:2018-01-25 09:54:38

标签: c# visual-studio compiler-errors preprocessor

我有一个带有此签名的方法:

public static void DirFillWEx(ComboBox cb, bool dirFill, bool fileFill);

这是放在我自己写的dll库中。 我的问题是:有没有办法指示Visual Studio这个方法不能同时接受bool值为false,所以我在编译时遇到错误(不是RUNTIME!)?

例如:

DirFillWEx(my_cb, false, true);
DirFillWEx(my_cb, true, true);
DirFillWEx(my_cb, true, false);

但不是

DirFillWEx(my_cb, false, false);

谢谢大家!

3 个答案:

答案 0 :(得分:10)

您可以定义枚举:

enum FillMode
{
  Dir,
  File,
  Both
}

然后输入你的方法来获取枚举:

public static void DirFillWEx(ComboBox cb, FillMode fillMode);

答案 1 :(得分:3)

不,你误解了编译器的工作原理。你的方法签名允许传递bool值,你不能强制编译时检查传递的值,只有类型。

您可以在调用端或方法内部执行运行时检查,以检查参数是否处于有效状态,然后再继续。

可能有一些方法可以根据您的建议重新编写编译器,但显然这样做会表明您的设计存在问题。

你可以按照Sean的建议通过枚举进行值限制,但这并不能回答你原来的问题 - 不,你不能(容易/可行)钳制在编译时在C#中传递给函数的值。

答案 2 :(得分:0)

我不认为你可以在编译时这样做,但你可以在你的功能开始时这样做:

public static void DirFillWEx(ComboBox cb, bool dirFill, bool fileFill)
{
    if(!dirFill && !fileFill)
    {
        return;
    }
}

当你打电话给这个功能时,你还能做什么:

if(!dirFill && !fileFill)
{
}
else
{
    DirFillWex(cb, dirFill, fileFill);
}