如何获取任何不是给定枚举值的枚举值

时间:2017-06-01 07:17:16

标签: c# enums

我想获得给定枚举中不存在n的任何现有值。 鉴于我有一个枚举

,我会尝试更好地解释它
public enum EFileFormat
{
    Rtf,
    Word,
    Pdf,
    Html,
    Txt
}

带有枚举的任意值的变量,例如

EFileFormat.Word

我想获得不是" EFileFormat.Word"的枚举的任何值。我已经来到这个代码,但我认为必须存在一种更优雅的方式:

var name = Enum.GetName(typeof(EFileFormat), format);
var names = Enum.GetNames(typeof(EFileFormat)).Where(n => !n.Equals(name));
var otherFormat = (EFileFormat)Enum.Parse(typeof(EFileFormat), names.First());

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

而不是mupltiple转换enumValue< - > enumName使用GetValues方法。

Linq First()方法有一个带谓词的重载,用它来避免Where()

var format = EFileFormat.Word;      
var result = Enum.GetValues(typeof(EFileFormat))
    .OfType<EFileFormat>()
    .First(x => x != format);

答案 1 :(得分:1)

将标志值分配给枚举将允许您执行此操作 - 如果您可以更改枚举值。

  

请参阅:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/enumeration-types#enumeration-types-as-bit-flags

[Flags]
public enum EFileFormat
{
    Rtf = 0x1,
    Word = 0x2,
    Pdf = 0x4,
    Html = 0x8,
    Txt = 0x16
}

...

// this will be equal to only word
var word = EFileFormat.Word;

// this will be equal to every value except word    
var notWord = ~EFileFormat.Word;

// this will be equal to Html and Pdf
var value = EFileFormat.Html | EFileFormat.Pdf;

// this will be equal to Html
var html = value - EFileFormat.Pdf;

// this will check if a value has word in it
if(notWord == (notWord & EFileFormat.Word))
{
   // it will never reach here because notWord does not contain word,
   // it contains everything but word.
}

答案 2 :(得分:0)

您可以从值而不是像这样的名称接近;

df.assign(max_value=df.values.max(1))

     a    b     c  max_value
0  1.2  2.0  0.10        2.0
1  2.1  1.1  3.20        3.2
2  0.2  1.9  8.80        8.8
3  3.3  7.8  0.12        7.8

答案 3 :(得分:0)

var result = Enum.GetValues(typeof(EFileFormat))
                .OfType<EFileFormat>()
                .Where(x => !x.Equals(EFileFormat.Word)).ToList();