2016-12-07 9 views
0

У меня есть следующий класс на основе примера кода от Microsoft MSDN:System.Collections.Generic сбор и IEquatable ошибки

Imports System.Collections.Generic 
Module SharedCode 

    Public Class Fund 
     Implements IEquatable(Of Fund) 

    'Class Fund must implement Function Equals(other As RetirementCalcOverTime.SharedCode.Fund) As Boolean for interface System.IEquatable(Of Fund) 

     Public Property FundName As String 
     Public Property StartDate As Date 
     Public Property StartBalance As Double 
     Public Property StartQuantity As Double 
     Public Property StartPrice As String 

     Public Sub New() 
     End Sub 
     Public Sub New(ByVal sFundName As String, 
            ByVal dStartDate As Date, 
            ByVal pStartBalance As Double, 
            ByVal pStartQuantity As Double, 
            ByVal pStartPrice As Double) 
      FundName = sFundName 
      StartDate = dStartDate 
      StartBalance = pStartBalance 
      StartQuantity = pStartQuantity 
      StartPrice = pStartPrice 
     End Sub 
     Public Function Overrides Equals(ByVal obj As Fund) As Boolean 

     'Overrides is flagged as invalid identifier 

      If obj Is Nothing Then 
       Return False 
      End If 
      Dim objAsFund As Fund = TryCast(obj, Fund) 
      If objAsFund Is Nothing Then 
       Return False 
      Else 
       Return Equals(objAsFund) 
      End If 
     End Function 

    End Class 

End Module 

Что я делаю неправильно, что переопределение и ошибки броска функции Равно?

+1

VS/VB будет добавить, что вам нужно, когда вы нажимаете Enter на строке «Реализуете ...» – Plutonix

+0

Это избавило от ошибок в реализации, благодаря чему благодаря этому Plutonix. – twellsles

ответ

0

Вам нужны две функции:

Public Function Overrides Equals(ByVal obj As Object) As Boolean 

для переопределения Object.Equals и

Public Function Equals(ByVal obj As Fund) As Boolean Implements IEquatable(Of Fund).Equals 

для реализации метода интерфейса.

Ваше текущее выполнение подходит для первого метода (так как вы проверяете, если он являетсяFund) при условии изменения типа параметра в Object - теперь вам просто нужно второй метод определения «равенства» для двоих Fund объектов, которые будут удовлетворять реализации интерфейса.

Вы должны также переопределить GetHashCode в соответствии с вашим определением равенства (два «равных» объекта должны возвращать одинаковые хэш-коды).

0

проблема в Equals:

Public Overrides Function Equals(obj As Fund) As Boolean 
    If obj Is Nothing Then 
     Return False 
    End If 
    Dim objAsFund As Fund = TryCast(obj, Fund) 
    If objAsFund Is Nothing Then 
     Return False 
    Else 
     If Me.FundName == objAsFund.FundName AndAlso ... 
    End If 
End Function 

вы должны поставить условие (например, все свойства одинаковы) вместо «...»

+0

Нажатие клавиши ввода после строки: Реализует IEquatable (Фонд) добавляет следующее: \t \t Public Function Equals1 (другой Фонд) Булева Реализует IEquatable (фонд) .equals \t \t End Function I должно быть довольно медленным, потому что я понятия не имею, что с этим делать, потому что MSDN не упоминает об этом и говорит, чтобы переопределить Equals. Что мне здесь не хватает? – twellsles

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

  • Нет связанных вопросов^_^