簡単に言うと、次のようなファクトリを作成しています。
    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);
}
そこに醜い重複があるのがわかりますか?可能な値を2回指定したくありませんtagName。ファクトリを使用して ITag のインスタンス化を試行し、null が返された場合は、それが有効な値ではないことがわかるように、いつでもメソッドを変更できます。しかし、これは無駄に思えます:
public static bool IsValidTagName(string tagName)
{
    return GetByTagName(tagName) != null;
}
もっと良い方法があるに違いない
ノート:
私には、このチェックを行う必要がある正当な (長ったらしい) 理由がありますが、そうではありません。
「この文字列を指定すると、GetByTagName は ITag を返しますか? はい? わかりました。GetByTagName を呼び出します」