我有一个带有此签名的方法:
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);
谢谢大家!
答案 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);
}