C# 检查函数参数的最短方法是什么,在C中可能有0、1、2、3个值#
我在C#中有一个函数,看起来像:C# 检查函数参数的最短方法是什么,在C中可能有0、1、2、3个值#,c#,C#,我在C#中有一个函数,看起来像: public static void OnlyValidInput ( int parameterName ) { if ( parameterName == 0 || parameterName ==1 || parameterName == 2 ...) { ... do Ok stuff } else { throw new CustomException ( "invalid param should be 0 ,
public static void OnlyValidInput ( int parameterName )
{
if ( parameterName == 0 || parameterName ==1 ||
parameterName == 2 ...)
{
... do Ok stuff
}
else
{ throw new CustomException ( "invalid param should be 0 , 1 , 2" );
}
}
如何使它变短
谢谢大家,答案显示了我的想法,但无法描述它…如果(parameterName>=0&¶meterName只是为了愚蠢
if (parameterName >= 0 && parameterName <= 3)
if((parameterName & 0xFFFFFFFC) == 0) // Check if value is 0, 1, 2, 3
基本上,它只是检查低两位中是否只有一位(这仅适用于0、1、2、3)
我不会真的这样做;&&
方法更清晰…我会将您的关注点分为两种方法。一种用于验证输入,另一种用于实际执行操作。看起来您的parameterName值有高值和低值。如果是这样,请将其更改为小于、大于检查vs检查每一个值
public static bool IsValid(int parameterName) {
return (parameterName >= 0) && (parameterName <= 2);
}
public static void OnlyValidInput(int parameterName) {
if ( !IsValid(parameterName) ) {
throw new CustomExceptoin("...");
}
.. Do stuff
}
公共静态bool有效(int参数名称){
return(parameterName>=0)&&(parameterName可能是OT,但在您的代码示例中,我宁愿抛出一个。来获取编译时检查,为每个有效参数创建一个带有值的枚举,并将其作为参数而不是int传递
当然,如果你有一个非常大的范围,这将不会很好地工作,但如果它真的只是0到2,听起来更像那些数字意味着应该……枚举……无论如何
public static void OnlyValidInput ( int parameterName )
{
if( new int[]{0,1,2}.Contains(parameterName))
{
//... do Ok stuff
}
else throw new CustomException ( "invalid param should be 0 , 1 , 2" );
}
该方法只接受参数类型的枚举数
当然,您不应该将枚举数及其值重命名为描述性的且易于理解的名称。这是否会禁止使用(MyEnum)0x123?Tnx,您可以发布一个小的example@DainelL:有意思!谢谢你的邀请……:)很好的一点-您仍然需要检查参数。不过,在大多数情况下,我不喜欢强制转换为enum,而且我仍然认为,如果它真的只是0-2,那么可能还有一些东西应该命名。标题是“0,1,2,3”。代码有一个..have 2,所以我假设他刚刚放弃了3。if(0请参阅我答案的注释:您仍然可以将无效值强制转换为参数枚举。这不会验证输入。以下编译很好。SomeMethod((参数)42);这是真的。。如果参数原始类型是整数。如果不是,则我认为这是一种方法。您可能想插话,Ronny,不是吗
public enum Parameter
{
Zero = 0,
One = 1,
Two = 2,
Three = 3
}
public void SomeMethod(Parameter p)
{
Int32 pAsInteger = (Int32)p; // Here I am casting the parameter to an Integer
}
SomeMethod((Parameter)2); // Here I am casting an integer to enum of type Parameter