2011-04-18 89 views
0

我想定义SortedErrorProviderMessageCollection,这是unsortedCollection被定义为的类型。如何返回TYPED结果?

Dim Sorted As ErrorProviderMessageCollection = From item In unsortedCollection 
               Order By item.Control.TabIndex 

我该怎么做?

Public Class ErrorProviderMessage Implements IComparable(Of ErrorProviderMessage) 

    Private _Message As String 
    Private _Control As Control 

    Public Sub New(ByVal message As String, ByVal control As Control) 
     _Message = message 
     _Control = control 
    End Sub 

    Public ReadOnly Property Message() As String 
     Get 
      Return _Message 
     End Get 
    End Property 

    Public ReadOnly Property Control() As Control 
     Get 
      Return _Control 
     End Get 
    End Property 

    Public Function CompareTo(ByVal other As ErrorProviderMessage) As Integer Implements System.IComparable(Of ErrorProviderMessage).CompareTo 
     Return Me.Control.TabIndex.CompareTo(other.Control.TabIndex) 
    End Function 

End Class 

Public Class ErrorProviderMessageCollection 

    Inherits System.Collections.ObjectModel.Collection(Of ErrorProviderMessage) 

End Class 

回答

1

您也可以使用Lambda和适当的扩展方法来处理铸件如:

var Sorted = unsortedCollection.OrderBy(i=>i.Control.TabIndex).ToSortedErrorProviderMessageCollection(); 

和扩展方法...

public static class ErrorProviderMessageCollectionHelper 
{ 
    public static ErrorProviderMessageCollection ToSortedErrorProviderMessageCollection <T>(this IEnumerable<T> source) where T : ErrorProviderMessage 
    { 
     var orderedCollection = new ErrorProviderMessageCollection(); 
     foreach (var item in source) 
     { 
      orderedCollection.Add(item); 
     } 
     return orderedCollection; 
    } 
} 

我不起来VB。因此在C#中提供了代码示例。

+0

我改成了这一点,但它返回 “无”:昏暗分类为ErrorProviderMessageCollection = TryCast(unsortedCollection.OrderBy(功能(I)i.Control.TabIndex),ErrorProviderMessageCollection) – ChadD 2011-04-18 13:06:49

+0

是你能够发布ErrorProviderMessageCollection的代码? – 2011-04-18 13:23:01

+0

Plz查看更新后的帖子。 – ChadD 2011-04-18 13:25:02

0

唯一的办法是做这样的:

Dim Sorted As ErrorProviderMessageCollection = 
    New ErrorProviderMessageCollection(From item In unsortedCollection 
             Order By item.Control.TabIndex) 

对于这个工作ErrorProviderMessageCollection需要一个构造函数IEnumerable(Of TypeOfItem)类型的参数。

0

正如已批准的答案中所建议的那样,这工作。这里所示的workinge例如:

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 

     Dim MyCollection As New ErrorProviderMessageCollection 


     If txtLastName.Text.Trim = "" Then 
      MyCollection.Add(New ErrorProviderMessage("Last Name required", txtLastName, txtLastName.TabIndex)) 
     End If 

     If txtFirstName.Text.Trim = "" Then 
      MyCollection.Add(New ErrorProviderMessage("First Name required", txtFirstName, txtFirstName.TabIndex)) 
     End If 

     Dim Sorted As ErrorProviderMessageCollection = New ErrorProviderMessageCollection(From item In MyCollection Order By item.Control.TabIndex) 

     For Each ErrorProviderMessage As ErrorProviderMessage In Sorted 
      MessageBox.Show(ErrorProviderMessage.Message & " " & ErrorProviderMessage.Control.TabIndex & " " & ErrorProviderMessage.Control.Name) 
     Next 

    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    End Sub 

End Class 


Imports System.ComponentModel 

Public Class ErrorProviderMessage 

    Private _Message As String 
    Private _Control As Control 
    Private _TabIndex As Integer 

    Public Sub New(ByVal message As String, ByVal control As Control, ByVal tabIndex As Integer) 
     _Message = message 
     _Control = control 
     _TabIndex = tabIndex 
    End Sub 

    Public ReadOnly Property Message() As String 
     Get 
      Return _Message 
     End Get 
    End Property 

    Public ReadOnly Property Control() As Control 
     Get 
      Return _Control 
     End Get 
    End Property 

    Public Property Tabindex() As Integer 
     Get 
      Return _TabIndex 
     End Get 
     Set(ByVal value As Integer) 
      _TabIndex = value 
     End Set 
    End Property 


End Class 


Public Class ErrorProviderMessageCollection 

    Inherits System.Collections.ObjectModel.Collection(Of ErrorProviderMessage) 

    Public Sub New() 

    End Sub 

    Public Sub New(ByVal source As IEnumerable(Of ErrorProviderMessage)) 

     Dim orderedCollection = New ErrorProviderMessageCollection() 

     For Each Item As ErrorProviderMessage In source 
      Me.Add(Item) 
     Next 

    End Sub 

End Class