一直在寻找,但运气不多,我想创建一个只允许某些项目作为第一个参数传递的函数。
e.g。它应该只允许以下字符串:
"error", "warning", "info"
那么电话会是
showme("error");
or showme("warning");
or showme("info");
这可以吗?我知道我可以定义
showme(string type){}
但理想情况下我需要showme(string type "error"){}
答案 0 :(得分:4)
我建议enum
public enum ErrorType {
error,
warning,
info
}
public void ShowMe(ErrorType errorType) {
switch (errorType) {
case ErrorType.error:
//do stuff
break;
case ErrorType.warning:
//do stuff
break;
case ErrorType.info:
//do stuff
break;
default:
throw new ArgumentException("Invalid argument supplied");
break;
}
}
//Invoke the method
ShowMe(ErrorType.info);
答案 1 :(得分:3)
根据Rozuur的评论,Enum将是一个干净的选择。如果你没有尝试使用代码合同:http://www.cauldwell.net/patrick/blog/CodeContracts.aspx
答案 2 :(得分:0)
您可以将依赖于您的值集的逻辑包装到具有私有构造函数的类中,并通过单例属性或工厂方法检索实例。
类似的东西:
public class StringConstraint
{
private StringConstraint()
public static readonly StringConstraint error = new StringConstraint()
...
public void DoStuffWithStringValue()
{
// Here you do the logic that depends on your particular string value
// e.g. (always) log a message as an error
}
}
这要求您只传递符合您要为三个字符串中的每个字符串实现的逻辑的实例。