c# - 如何在 C# 中设置参数的定义值?

标签 c#

如何设置参数的定义值?我的意思是,例如,我有以下功能:

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/

相关文章:

c# - 将匿名类型传递给 IComparer<T>

c# - IList 必须是有限的吗?

c# - 如何在C#/.NET2.0中实现等待一段时间的windows服务循环

c# - SqlDataAdapter、SqlCommand 从字符串中删除前导数字

c# - `short` 类型的简写?

c# - 接口(interface)属性名称因类而异

c# - 如何限制 .NET 中 StreamReader.ReadLine() 读取的字符数?

c# - 找不到类型 '' 的构造函数

c# - 从未加载的程序集中获取类型

c# - 如何在C#中更改音调