如何设置参数的定义值?我的意思是,例如,我有以下功能:
int functionA(string parameterA) {}
现在,当我调用此函数并输入参数 A 的值时,我希望该值位于我定义的值集中。例如定义的值集为:
string[] definedParameterA = { "Hello World", "stackoverflow" };
我输入的parameterA的值必须是“Hello World”或“stackoverflow”。
最佳答案
如果您确实希望它是一个字符串,您只需在方法开始时验证它:
private static readonly String[] ValidValues = {"Hello World", "stackoverflow"};
public void DoSomething(string text)
{
if (!ValidValues.Contains(text))
{
throw new ArgumentException("Invalid value: " + text, "text");
}
// Carry on
}
但是,您也可以考虑使用枚举。您仍然需要验证枚举值是否已定义,但这使调用者更容易获得正确的值:
public enum Message
{
HelloWorld,
StackOverflow
}
public void DoSomething(Message message)
{
if (!Enum.IsDefined(typeof(Enum), message))
{
throw new ArgumentException("Invalid value: " + message, "message");
}
// Carry on
}
当然,如果您愿意,您可以在其他地方获得从枚举值到字符串的映射。
请注意,上面的代码将在每次调用时将消息
框起来。您可以使用我的 Unconstrained Melody 来避免这种情况(并使其更加类型安全)如果您确实想要的话,就可以进行项目,但在您证明此拳击确实是一个问题之前,这可能不值得。代码将如下所示:
public void DoSomething(Message message)
{
if (!message.IsNamedValue()) // Extension method
{
throw new ArgumentException("Invalid value: " + message, "message");
}
// Carry on
}
关于c# - 如何在 C# 中设置参数的定义值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919180/