0

我有一个类似于以下的功能:

(.NET/C#)

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

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

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

到目前为止,我最好的猜测是在运行时将 json 反序列化到字典中,然后检查输入。

4

1 回答 1

1

如果您可以缓存有效值,我将创建一个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));
}

在线尝试

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

于 2021-01-11T02:07:05.553 回答