2013-02-18 43 views
1

我想訂購由枚舉列表,請參閱以下內容:通過枚舉訂購列表

Public Class AnimalsToProcess 
Implements ICloneable 

     Enum AnimalOrder 
     Dog 
     Cat 
     Horse 
     Fish 
     End Enum 


    Public Property _animalList As List(Of Animal) 

    Public Sub New() 

    End Sub 

    Function Clone() As AnimalsToProcess 

    End Function 

    Private Function ICloneable_Clone() As Object Implements ICloneable.Clone 
     Return Clone() 
    End Function 

    Public Sub Add(animalToAdd As Animal) 
     _animalList.Add(animalToAdd) 
    End Sub 

    Public Sub GetAnimals() as list(of Animal) 
     _animalList() 'this should be an ordered BY AnimalOrder Enum 
    End Sub 
End Class 

Add方法由外部代碼調用通過傳遞一個值,例如:

animals.add(Fish) 
animals.add(Horse) 
animals.add(Cat)` 

但是當GetAnimals被調用時,它應該返回由Enum AnimalOrder排序的列表。

於是便列表應包含在這個順序貓,馬follwing動物,魚類

謝謝。

回答

1

枚舉在內部爲每個值使用整數。如果您沒有明確設置它們,它們將按照enum中定義的順序自動分配,從0開始。

您應該能夠將您的字符串值轉換爲您的枚舉並從那裏轉換爲整數。喜歡的東西(未經測試)..

Public Function GetAnimals() as list(of Animal) 
    Return _animalList.OrderBy(function(x) Cint(DirectCast(Enum.Parse(GetType(AnimalOrder), x), AnimalOrder))) 
End Sub 

注意,你指的是價值Animal類型,但不具備的一個定義,你問:如果你需要訪問屬性來獲取價值匹配的枚舉,說AnimalTypeString ...

Public Function GetAnimals() as list(of Animal) 
    Return _animalList.OrderBy(function(x) Cint(DirectCast(Enum.Parse(GetType(AnimalOrder), x.AnimalTypeString), AnimalOrder))) 
End Sub 

或如果直接在枚舉值(這將是明智的)的AnimalType財產上的動物的點,你可以跳過了轉換枚舉.. 。

Public Function GetAnimals() as list(of Animal) 
    Return _animalList.OrderBy(function(x) Cint(X.AnimalType)) 
End Sub 
+0

我不得不使用'Cint(DirectCast(Enum.Parse(GetType(AnimalOrder),x.tostring()'得到它的工作,謝謝 – user1770609 2013-02-19 01:36:37

+0

不客氣 - 很高興我可以幫助 - 但我不明白爲什麼你需要'ToString()'它?當然你的對象有一個暴露動物的屬性('MyAnimal.Type'或'MyAnimal.TypeName'或類似的?)如果它不是一個對象,而只是一個字符串,你應該可以使用'x'以及' x.ToString()' – Basic 2013-02-19 10:17:05