这是不可能的检查参数编译时间,因为编译器不知道什么是在以下情况下未来:
string value = Console.In.Readline();
SomeMethod(value); // How does compile know what is given to SomeMethod
除此之外,如果行为依赖于字符串变量,我会考虑重构或使用适当的错误处理。
3种方式重构:
1:使用枚举:编译时错误
public enum MyInputEnum { Input1, Input2 }
public void SomeMethod(MyInputInum value) { .. }
SomeMethod(MyInputEnum.Input2); // Compiles
SomeMethod(MyInputEnum.Input3); // Compile Error because Input3 not defined
2:使用接口:编译时错误
public interface IInputDescription { }
public class InputClass1 : IInputDescription { .. }
public class InputClass2 : IInputDescription { .. }
public class ErrorClass { .. } // This example class does not implement IInputDescription
public void SomeMethod(IInputDescription value) { .. }
SomeMethod(new InputClass2()); // Compiles
SomeMethod(new ErrorClass()); // Compile error
3:使用错误处理:运行时错误
// Option 1
public void SomeMethod(string value)
{
if(!value.Equals("StringA") && !value.Equals("StringB"))
throw new ArgumentException("Invalid argument");
...
}
// Option 2
public void SomeMethod(string value)
{
switch(value)
{
case "StringA":
...
break;
case "StringB":
...
break;
default:
throw new ArgumentException("Invalid argument");
}
}
为什么你需要这个呢?如果您可以看到该方法不允许某个值,则不要将该值解析为该方法。 –
感谢您的帮助,我认为这可能是不可能的,我希望@StuartLC的答案,但我需要一个编译错误,只是一个警告是不够的我..我想先使用枚举,但我想用一些也许新的东西:)学习新的东西:) 再次感谢您的所有帮助.. – damir