Можно использовать Счетный. Метод SequenceEqual .
using System;
using System.Linq;
...
var a1 = new int[] { 1, 2, 3};
var a2 = new int[] { 1, 2, 3};
var a3 = new int[] { 1, 2, 4};
var x = a1.SequenceEqual(a2); // true
var y = a1.SequenceEqual(a3); // false
, Если Вы не можете использовать.NET 3.5 по некоторым причинам, Ваш метод в порядке.
Compiler\run-разовая среда оптимизирует Ваш цикл, таким образом, Вы не должны будете волноваться о производительности.
Чтобы использовать настраиваемые события для восходящей цепочки событий другого элемента управления, вы можете сделать следующее:
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler _theButton.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler _theButton.Click, value
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
' no need to do anything in here since you will actually '
' not raise this event; it only acts as a "placeholder" for the '
' buttons click event '
End RaiseEvent
End Event
В AddHandler
и RemoveHandler
вы просто распространяете вызов для присоединения или удаления данного обработчика событий к / из события Click
элемента управления.
Чтобы немного расширить использование настраиваемых событий, вот еще один пример реализации настраиваемого события:
Dim _handlers As New List(Of EventHandler)
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
_handlers.Add(value)
End AddHandler
RemoveHandler(ByVal value As EventHandler)
If _handlers.Contains(value) Then
_handlers.Remove(value)
End If
End RemoveHandler
RaiseEvent(ByVal sender As Object, ByVal e As System.EventArgs)
For Each handler As EventHandler In _handlers
Try
handler.Invoke(sender, e)
Catch ex As Exception
Debug.WriteLine("Exception while invoking event handler: " & ex.ToString())
End Try
Next
End RaiseEvent
End Event
] Теперь, как это выглядит выше, он не делает ничего, кроме обычного объявления события:
Public Event AddRemoveAttendees As EventHandler
Он предоставляет аналогичный механизм, позволяющий присоединять и удалять обработчики событий, а также вызывать событие. Пользовательское событие добавляет дополнительный уровень контроля; вы можете написать код, связанный с добавлением, удалением и возбуждением события, в котором вы можете обеспечить соблюдение правил и немного настроить то, что будет происходить. Например, вы можете ограничить количество обработчиков событий, прикрепленных к вашему событию. Для этого вы можете изменить раздел AddHandler
из приведенного выше примера:
AddHandler(ByVal value As EventHandler)
If _handlers.Count < 8 Then
_handlers.Add(value)
End If
End AddHandler
Если вам не нужен такой подробный контроль, я не вижу необходимости объявлять настраиваемые события.
Если вам нужно то же, что и в в другом сообщении, которое вы упомянули, вот эквивалент VB.NET:
Public Custom Event AddRemoveAttendees As EventHandler
AddHandler(ByVal value As EventHandler)
AddHandler SaveButton.Click, value
End AddHandler
RemoveHandler(ByVal value As EventHandler)
RemoveHandler SaveButton.Click, value
End RemoveHandler
End Event
Но я не думаю, что это хорошая идея, потому что параметром события sender
будет кнопка
, не ваш UserControl
...
Вместо этого вы можете подписаться на событие Button.Click и инициировать собственное событие (без явных средств доступа)