2013-02-18 2 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

В представлениях используются целые числа для каждого значения. Если вы не укажете их явно, они будут автоматически назначены в порядке, указанном в перечислении, начиная с 0.

Вы должны уметь отображать значение строки для вашего перечисления и оттуда до целого числа. Что-то вроде (непроверенные) ..

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

Обратите внимание, что вы имеете в виду значение как тип Animal, но не определение того, что в вашем Q. Если вам необходимо получить доступ к свойству, чтобы получить значение в соответствии с Enum, скажу 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

+0

Добро пожаловать - рад, что я мог бы помочь, - но я не могу понять, зачем вам нужно ToString() 'it? Конечно, у вашего объекта есть свойство, которое каким-то образом предоставляет животное («MyAnimal.Type» или «MyAnimal.TypeName» или подобное?) Если это не объект, а просто строка, вы должны иметь возможность использовать 'x', а также' x.ToString() ' – Basic

Смежные вопросы