列挙型をパラメーターとして受け取る、このString.Split
オーバーロードについて質問を検討してください。StringSplitOptions
列挙型自体が公開されており、System 名前空間を含むすべてのものにアクセスできるのは悪くありませんか? つまり、列挙型はSplit
メソッドのオプションに完全に固有ですが、そのスコープ外でも使用できます。
おそらく、これをモデル化するためのより良い方法があります。たとえば、列挙型を String クラス自体の中に入れて、String.SplitOptions
インスタンスを使用してアクセスするなどです。私はこれをめったに見ません(実際にそのようなケースを今は覚えていません)ので、何らかの理由で好まれていないと思います。一般に、いわば間違ったスコープでクラス/メンバーを使用することで問題が発生する可能性を下げるため、物事のスコープを縮小することがベストプラクティスだと思います。
Split
ここでは例として使用していEnum
ますが、コード ベースでも a がメソッドまたはクラスによってのみ使用されることは非常に一般的です。私は通常、他のクラスと同様に、列挙型を別の cs ファイルでパブリック型として作成しますが、この「問題」に対する他のアプローチを聞きたいと思っています。
アップデート:
クラスと列挙型を使用してこの正確な問題を攻撃するこの記事を見つけましたが、その場合はより正しいと思われるものに逆らうようです(どういうわけか列挙型をクラス内に配置します)。そこにある ToddM からのコメントの 1 つ (たまたま同意します) は次のように述べています。Folder
Filter
...
しかし、それでも、あなたの論理は間違っていると思います。クラス内に列挙型を埋め込むことに対する主な不満は、入力に時間がかかりすぎることです。C# がいかに冗長になる傾向があるかを考えると、これは実際には賢明な議論ではありません。VS では、CTRL+SPACE が友達です。
論理的には、クラス内に列挙型を配置する方がはるかに正しいと思います。あなたの例を見てみましょう: MyNameSpace.Filter とは何ですか? どこに適用されますか?名前空間のフィルターだと思いますか?特に名前空間が数十のクラスを含むように成長した場合は、わかりません。
ここで、MyNameSpace.Folder.Filter について考えてみましょう。私の考えでは、Filter が何らかの方法、形、または形式で Folder クラスに適用される方がはるかに直感的です。実際、別のクラスを名前空間に独自のフィルターの概念で追加できます。そのメンバーの 1 つは「ファイル」です。名前空間に新しいクラスを導入したからといって、その名前空間をさまざまな「ヘルパー」型で汚染する権利が与えられるわけではありません。大規模な開発チームの一員として開発している場合、あなたのスタイルは失礼です。
...