我想为可能成绩制作enum
。这是一个有效的例子:
public enum Grade
{
A, B, C, D, E, F
}
但是,我希望成绩是整数,比如
public enum Grade
{
1, 2, 3, 4, 5
}
为什么第一个工作但不是第二个工作?如何创建一个类似的变量只能取值1-5(并且可以为空)?
答案 0 :(得分:9)
枚举元素需要有有效的C#标识符; 1
,2
,3
等不是有效的C#标识符,因此不会:您无法做到这一点。您也许可以使用One = 1
等,或者使用一些公共前缀(Grade1
),但是......
答案 1 :(得分:9)
您应该像这样指定Grade
。
public enum Grade
{
A = 1,
B,
C,
D,
E,
F
}
B,C等将采用下一个值。
答案 2 :(得分:3)
C#要求enum
常量为标识符,即以字母/下划线开头,并且仅包括字母,下划线和数字。
您有多种方法可以解决此问题:
Grade.One
,Grade.Two
等在我看来,第一个选项是最好的,因为它读得很好:
enum Grade {
One = 1
, Two
, Three
, Four
, Five
}
最后一个选项看起来很奇怪,但是如果你的想法绝对是使用数字,那么就像你可以接近它一样:
enum Grade {
_1 = 1 // Without =1 the value of _1 would be zero
, _2
, _3
, _4
, _5
}
答案 3 :(得分:0)
正如其他人所说,您要用于枚举{1, 2, 3, etc}
的名称无效,因为它们不是有效的C#标识符。
如果您需要这些值,请执行以下操作:
// Declare enum
public enum Grade
{
A = 1,
B,
C,
D,
F
}
然后,当您需要访问say,Grade.B
的值时,您可以这样做:
int theIntGrade = (int)Grade.B // after this line, theIntGrade will be equal to 2
请注意,如果您将成绩作为字符串(例如“C”),则可以将其转换为枚举值,如下所示:
Grade theLetterGrade = (Grade)Enum.Parse(typeof(Grade), "C", true); // final parameter sets case sensitivity for comparison
答案 4 :(得分:0)
如何制作一个类似的变量,只能取值1-5(并且可以为空)?
制作自己的类型:
var result = customClassList.GroupBy(x => new {x.FirstField, x.SecondField})
.Select(x => x.OrderByDescending(y => y.ThirdField).First());
现在您的类型不仅可以包含public struct Grade: IEquatable<Grade>
{
private int innerValue;
private int InnerValue => isInitialized ? innerValue : 1;
private readonly bool isInitialized;
private Grade(int value)
{
if (value < 1 || value > 5)
throw new OverflowException();
innerValue = value;
isInitialized = true;
}
public static implicit operator Grade(int i) => new Grade(i);
public static explicit operator int(Grade g) => g.InnerValue;
public override bool Equals(object obj) => obj is Grade && Equals((Grade)obj);
public bool Equals(Grade other) => InnerValue == other.InnerValue;
public override int GetHashCode() => InnerValue.GetHashCode();
public override string ToString() => InnerValue.ToString();
public static bool operator ==(Grade left, Grade right) => left.Equals(right);
public static bool operator !=(Grade left, Grade right) => !left.Equals(right);
}
,1
,2
,3
和4
,而且默认为5
。初始化就像1
一样简单。
你需要它可以为空吗?没有汗水:Grade g = 4;
。