2008-12-18 44 views
23

Đây là tình huống cơ bản.Lấy giá trị Số nguyên của một kiểu liệt kê là số chung

Public Class MyEnumClass(of T) 
    Public MyValue as T 
End Class 

Đây là sự đơn giản hóa rộng lớn của các lớp học thực tế, nhưng về cơ bản tôi biết rằng T là một điều tra (nếu không thì sẽ có nhiều vấn đề khác là, và là một lỗi logic thực hiện bởi các lập trình viên)

Về cơ bản tôi muốn lấy giá trị số nguyên cơ bản của MyValue.

Sử dụng Cint hoặc Ctype, không hoạt động.

+0

tôi hoàn toàn mis-đọc liệt kê như IEnumerable :( –

Trả lời

40

tôi sẽ sử dụng một mảnh mát mẻ của mã phản chiếu nhưng chỉ là một đơn giản Convert.ToInt32 hoạt động tuyệt vời ... Hãy tha thứ cho VB của tôi, tôi là một chàng trai C#

Public Function GetEnumInt(Of T)(enumVal As T) As Integer 
    Return Convert.ToInt32(enumVal) 
End Function 
6

Tôi cố gắng này và nó làm việc:

String.Format("{0:d}", MyValue) 
+9

Vâng có thể chuyển đổi nó thành một chuỗi * * - Tôi nghĩ rằng bạn muốn nó như là một số nguyên –

3

Tôi biết bạn có thể làm như sau để có được tất cả các giá trị cơ bản (Tôi hy vọng cú pháp VB của tôi là đúng ... Tôi đã làm việc trong C# chủ yếu của cuối):

Dim intVal As Integer 

For Each intVal In [Enum].GetValues(GetType(T)) 
    //intValue is now the enum integer value 
Next 

Điều đó ít nhất có thể giúp bạn bắt đầu đi đúng hướng.

0

Một cách đơn giản trong VB.NET là thêm nó vào 0:

Dim intVal As Integer = 0 + myEnum 

Vì vậy, điều này sẽ làm việc:

Sub GetEnumInt(of T)(enumVal as T) as Int 
    return 0 + enumVal 
End Sub 
+0

này sẽ không làm việc khi ' myEnum' là kiểu kiểu tham số kiểu chung, vì trình biên dịch không biết liệu nó có thực sự là một enum hay không, và do đó sẽ không đánh máy toán tử '+'. –

+1

Điều này không hoạt động với 'Tùy chọn Nghiêm ngặt '. – mbomb007

0

Nhờ 'Jon Skeet'. Nhưng mã của anh ta không hoạt động trong Excel-2016 của tôi. Minwhile mã tiếp theo hoạt động tốt:

Public Enum TypOfProtectWs 
    pws_NotFound = 0 
    pws_AllowAll = 1 
    pws_AllowFormat = 2 
    pws_AllowNone = 3 
End Enum 

Private Function TypOfProtectWs2I(pws As TypOfProtectWs) As Integer 
    TypOfProtectWs2I = Format("0", pws) 
End Function 

Private Sub test_TypOfProtectWs2I() 
    Debug.Print TypOfProtectWs2I(pws_AllowAll) 
End Sub 
Các vấn đề liên quan