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.

因此列表应按猫、马、鱼的顺序包含以下动物

谢谢你。

4

1 回答 1

1

枚举在内部为每个值使用整数。如果您没有明确设置它们,它们会按照枚举中定义的顺序自动分配,从0.

您应该能够将您的 String 值转换为您的枚举并从那里转换为整数。像(未经测试)..

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

请注意,您将值称为类型Animal,但在 Q 中没有定义。如果您需要访问属性以获取与枚举匹配的值,请说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
于 2013-02-18T11:45:37.337 回答