這是不可能的檢查參數編譯時間,因爲編譯器不知道什麼是在以下情況下未來:
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