Tôi đang làm việc với thư viện bên ngoài có enum. Có một số thành viên của enum này, khi bạn gọi ToString()
trên chúng, hãy trả về tên của một thành viên khác của enum.Tại sao Enum.ToString() không trả lại tên enum chính xác?
Console.WriteLine("TOKEN_RIGHT = {0}", Tokens.TOKEN_RIGHT.ToString()); //prints TOKEN_OUTER
Console.WriteLine("TOKEN_FROM = {0}", Tokens.TOKEN_FROM.ToString()); //prints TOKEN_FROM
Console.WriteLine("TOKEN_OUTER = {0}", Tokens.TOKEN_OUTER.ToString()); //prints TOKEN_FULL
Tôi biết rằng khi hai thành viên enum có giá trị bằng số tương tự, bạn có thể nhận được hành vi như thế này, nhưng tôi biết, từ decompilation và kiểm tra các giá trị tại thời gian chạy, mà mỗi thành viên trong enum có giá trị độc nhất.
Dưới đây là một đoạn định nghĩa của enum (tạo ra bởi dotPeek):
public enum Tokens
{
TOKEN_OR = 134,
TOKEN_AND = 135,
TOKEN_NOT = 136,
TOKEN_DOUBLECOLON = 137,
TOKEN_ELSE = 138,
TOKEN_WITH = 139,
TOKEN_WITH_CHECK = 140,
TOKEN_GRANT = 141,
TOKEN_CREATE = 142,
TOKEN_DENY = 143,
TOKEN_DROP = 144,
TOKEN_ADD = 145,
TOKEN_SET = 146,
TOKEN_REVOKE = 147,
TOKEN_CROSS = 148,
TOKEN_FULL = 149,
TOKEN_INNER = 150,
TOKEN_OUTER = 151,
TOKEN_LEFT = 152,
TOKEN_RIGHT = 153,
TOKEN_UNION = 154,
TOKEN_JOIN = 155,
TOKEN_PIVOT = 156,
TOKEN_UNPIVOT = 157,
TOKEN_FROM = 242,
}
Tại sao điều này xảy ra? Có điều gì đó tôi đang làm sai, hoặc đây chỉ là một trong những niềm vui quirks của enums trong .NET? Nếu sau này, là có một workaround cho nó?
(. Đối với những gì nó có giá trị, Tokens
là một phần của các Microsoft.SqlServer.Management.SqlParser.Parser namespace trong .NET)
Điều gì sẽ xảy ra nếu bạn đặt điểm ngắt, sau đó đánh giá biểu thức '.ToString' trong cửa sổ ngay lập tức? – Dai
Đó có phải là bản sao chép hoàn chỉnh không? Thêm vào, cuối cùng không nhìn thẳng vào tôi – Paparazzi
@Blam, không có nó không hoàn thành; như đã nói, nó chỉ là một đoạn. – nateirvin