String.Split
overloadという質問に対しては、StringSplitOptions
列挙型をパラメータとして使用します。C#でのenumパラメータへのアクセスを制限するためのベストプラクティス
enum自体が公開されていて、System名前空間を含むすべてのものにアクセスできるのは悪いことではありませんか?つまり、列挙型はSplit
メソッドのオプションに完全に固有ですが、その範囲外でも使用できます。
おそらく、列挙型をStringクラス自体に入れて、String.SplitOptions
を使用してアクセスするなど、これをモデル化するより良い方法がありますか?私は非常にめったにこれを見ません(私は実際にそのような場合は今思い出すことができません)ので、それは何らかの理由で好まれていないと仮定します。一般的に、私は物事の範囲を縮小することがベストプラクティスであると考えています。なぜなら、誤ったスコープのクラス/メンバーを使用することによって問題が発生する可能性を低くするためです。
ここでは例としてSplit
を使用していますが、Enum
はコードベースのメソッドまたはクラスでのみ使用するのが一般的です。私は一般的に他のクラスと同様に別のCSファイルにパブリック型として列挙型を作成しますが、私はこの「問題」に対する他のアプローチを聞きたいと思います。
更新:
私はちょうどFolder
クラスとFilter
列挙して、この正確な問題を攻撃this articleが見つかりましたが、再び(内部列挙型を置く私はそのような場合には、より正確であると信じて何に反しているようですどういうわけかクラス)。 ToddMからそこでのコメントの一つ(私は同意するが起こるいる)状態:
...
しかし、その後も、私はあなたのロジックが間違っている気がします。あなたの主な苦情 クラスの中に列挙型を埋め込むことは、入力するのに長すぎる がかかることです。どのくらい冗長なC#があるかを考えれば、これは実際には ではありません。 VSでは、CTRL + SPACEはあなたの友人です。
論理的には、クラス内の列挙型を配置するのがはるかに多い です。あなたの例を挙げる:MyNameSpace.Filterとは何ですか? はどこに適用されますか?私はそれがあなたの名前空間のフィルタだと思いますか? には不可能です。特に、名前空間が拡大して何十ものクラスが含まれている場合は特にそうです。
今MyNameSpace.Folder.Filterを考える - それははるかに 直感的にそのフィルターが フォルダクラスにいくつかの方法、形状、またはフォームに適用され、私の心の中で、あります。実際には、別のクラスを 独自のフィルタの概念で名前空間に追加することができます。そのメンバーの1つは「ファイル」です。ちょうど あなたが新しいクラスをネームスペースに導入したので、 には、その名前空間をさまざまな「ヘルパー」タイプで汚染する権利が与えられていません。 大規模な開発チームの一員として開発している場合、あなたのスタイル は、まあ、失礼です。
...
enumをクラススコープ内に置くと、それ以外の場所でも使用できます。クラスに対してプライベートにすると、それをクラスのメソッドのパラメータとして使用することはできません。 – Peter
このようなネストされたタイプが好きです。それはあなたのインテリセンスを圧倒しておらず、またより良い意味を与えます。しかし、多くの内部MSはそれを好きではありません... – nawfal
あなたの更新された質問からリンクされた記事に対する議論:読みやすさのために、私は 'Folder.BlaBla(Folder.Filter.Bla)'ではなく 'Folder' BlaBla(Filter.Bla) 'と表示されます。唯一の悪い点は、それがインテリセンスを汚染することです。しかし、それは 'Filter'がある他のものがあるときにのみ起こります。チャンスはそれが起こるスリムです。 – Bas