いくつかのシナリオでは、メソッドにEnumを渡すときに、単一のEnum値であるかどうかを処理する必要があります。それ以外の場合は、この単純な拡張を記述します。列挙型フラグの組み合わせに含まれるフラグの量を決定するベストプラクティス?
Vb。ネット:
<Extension>
Public Function FlagCount(ByVal sender As System.[Enum]) As Integer
Return sender.ToString().Split(","c).Count()
End Function
C#(オンライン翻訳):
[Extension()]
public int FlagCount(this System.Enum sender) {
return sender.ToString().Split(',').Count();
}
使用例:
Vb.Net:
Dim flags As FileAttributes = (FileAttributes.Archive Or FileAttributes.Compressed)
Dim count As Integer = flags.FlagCount()
MessageBox.Show(flagCount.ToString())
C#(オンライン翻訳):
FileAttributes flags = (FileAttributes.Archive | FileAttributes.Compressed);
int count = flags.FlagCount();
MessageBox.Show(flagCount.ToString());
私は現在、Stringとしてフラグの組み合わせを表す避けるためにやっていることが、より直接的かつ効率的な方法が存在する場合、私はちょうどお願いしたいと思いますそれを分割します。
? – Corak
話題外トピック:不要なキーワードと修飾子を省略することで、ソースコードを見やすくすることができます: 'Function FlagCount(ByVal送信者システムとして[Enum])As Integer'を 'あなたがコード化しなければならない限り、VB関数はデフォルトではpublicであり、 'ByVal'は残念ですが、型修飾子は特に' System'のために余分です。(C#とは違い、関数のFlagCount([Enum] As) Visual Studio 2010またはそれ以前) – miroxlav
@miroxlavあなたの提案を感謝しますが、私は逆に、Vb.Netのデフォルトの意味は開発者によって無視されるべきではないことを意味します。これは悪い習慣ではありません。コードに 'ByRef'を持つparamsと' ByVal'を持たないparamsが含まれていると読みにくくなります。一方、私は 'System'名前空間の仕様について完全に同意しますが、実際のソースコードでは拡張機能を含むモジュールの名前が' Enum'という名前になっているので、 'System '曖昧さ回避を避けるための名前空間。 – ElektroStudios