いくつかのシナリオでは、Enum をメソッドに渡すときに、それが単一の Enum 値であるか、それ以外の場合はフラグの組み合わせであるかを処理する必要があります。その目的のために、次の単純な拡張機能を作成しました。
Vb.Net:
<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());
フラグの組み合わせを文字列として表し、それを分割することを避けるために現在行っている、より直接的で効率的な方法が存在するかどうかを尋ねたいだけです。