我想爲可能的成績製作enum
。這是一個工作示例:使用int值枚舉?
public enum Grade
{
A, B, C, D, E, F
}
但是,我想成績是整數,像
public enum Grade
{
1, 2, 3, 4, 5
}
爲什麼第一個工作,但不是第二個?我怎樣才能做出一個類似的變量,只能取值爲1-5(可爲空)?
我想爲可能的成績製作enum
。這是一個工作示例:使用int值枚舉?
public enum Grade
{
A, B, C, D, E, F
}
但是,我想成績是整數,像
public enum Grade
{
1, 2, 3, 4, 5
}
爲什麼第一個工作,但不是第二個?我怎樣才能做出一個類似的變量,只能取值爲1-5(可爲空)?
枚舉元素需要有效的C#標識符; 1
,2
,3
等都不是有效的C#標識符,所以不行:你不能這樣做。你也許可以用One = 1
等,或者一些常用的前綴(Grade1
),但是...
你應該這樣指定Grade
。
public enum Grade
{
A = 1,
B,
C,
D,
E,
F
}
B,C等會取下一個值。
A ++,好想法 –
@MarcGravell CS1059增量或減量運算符的操作數必須是變量,屬性或索引器 –
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
}
正如其他人所說,你想用你的{1, 2, 3, etc}
枚舉的名稱是無效的,因爲他們沒有有效的C#標識符。
如果你需要這些值你的枚舉,你可以做到以下幾點:
// Declare enum
public enum Grade
{
A = 1,
B,
C,
D,
F
}
然後,當你需要訪問的值,例如,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
我怎樣才能做一個類似的變量,只能取值從1-5(和可爲空)?
使自己的類型:
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;
一樣簡單。
你需要它可以爲空嗎?沒有汗水:Grade? g = 4;
。
因爲整數不是**標識**。 –
那麼我怎樣才能做出一個類似的變量,只能取值從1-5(可爲空)? –
順便說一句,一個枚舉類型的變量不能保存枚舉中未列出的值,您可以將各種瘋狂的值轉換爲一個枚舉。 – harold