长话短说,我正在创建一个看起来有点像这样的工厂:
public static ITag GetByTagName(string tagName)
{
tagName = tagName.ToLower();
switch (tagName)
{
case "devicevar":
return new DeviceVar();
case "devicefilter":
return new DeviceFilter();
}
return null;
}
但我还需要一种方法来检查是否tagName
对应于 ITag。本质上,我正在检查是否GetByTagName
会在不实际运行的情况下返回 null:
private List<string> tagNames = new List<string> { "devicevar", "devicefilter" };
public static bool IsValidTagName(string tagName)
{
return tagName.Contains(tagName);
}
看看我们那里有一些丑陋的重复吗?我不想指定可能的值tagName
两次。我总是可以更改我的方法,以便它使用工厂尝试并实例化一个 ITag,如果它返回 null,那么我知道它不是有效值。但这似乎很浪费:
public static bool IsValidTagName(string tagName)
{
return GetByTagName(tagName) != null;
}
一定会有更好的办法
笔记:
我有一个很好的(虽然冗长的)理由需要进行这项检查,但事实并非如此
“如果我给它这个字符串,GetByTagName 会返回一个 ITag 吗?是的?好的,调用 GetByTagName”