我想获得给定枚举中不存在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());
有什么想法吗?
答案 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)
将标志值分配给枚举将允许您执行此操作 - 如果您可以更改枚举值。
[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();