函数参数验证



我有一个类似于以下的函数:

(.NET/C#(

public void DoSomething(string country, int year)
{
...
}

我希望只接受约100多个国家/地区的特定两个字符代码。此外,某些国家/地区仅在特定年份可用。这些键值对以json的形式来自一个单独的源。

验证有效函数输入的最佳方法是什么?

到目前为止,我的最佳猜测是在运行时将json取消序列化到字典中,并根据它检查输入。

如果你可以缓存有效值,我会创建一个Dictionary<string, HashSet<int>>,然后像这样验证:

Dictionary<string, HashSet<int>> validCountryYears; // maybe a field or static field
if (!validCountryYears.TryGetValue(country, out var validYears))
{
throw new ArgumentException(String.Format("{0} isn't a valid country.", country), nameof(country));
}
if (!validYears.Contains(year))
{
throw new ArgumentException(String.Format("{0} isn't valid for the country {1}.", year, country), nameof(year));
}

在线试用

附言:如果您要求country不区分大小写,那么您可以为字典构造函数指定StringComparer(例如new Dictionary<string, HashSet<int>>(StringComparer.OrdinalIgnoreCase)(

最新更新