如何防止方法在 C# .NET 中接受 2 false bool?

How to prevent a method from accepting 2 false bool in C# .NET?

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

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

这个放在我自己写的一个dll库里。 我的问题是:有没有一种方法可以指示 Visual Studio 此方法不能将两个 bool 值都接受为 false,因此我在编译时(不是运行时!)出现错误?

例如:

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

但不是

DirFillWEx(my_cb, false, false);

谢谢大家!

您可以定义一个枚举:

enum FillMode
{
  Dir,
  File,
  Both
}

然后键入您的方法来获取枚举:

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

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

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

你还可以做的是当你调用函数时:

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

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

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

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

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