0

В VB.net (2012) У меня есть следующий код:VB.net Option Strict, listview.items.add (itm.clone) Перегрузка

For Each itm As ListViewItem In Me.lvCustomers 
    If CDbl(itm.Tag) <> customer.Id Then Me.lvMerges.Items.Add(itm.Clone) 
Next 

С Option Strict On я получаю следующее ошибка:

Error 2 Overload resolution failed because no accessible 'Add' can be called with these arguments: 'Public Overridable Function Add(value As System.Windows.Forms.ListViewItem) As System.Windows.Forms.ListViewItem': Option Strict On disallows implicit conversions from 'Object' to 'System.Windows.Forms.ListViewItem'. 'Public Overridable Function Add(text As String) As System.Windows.Forms.ListViewItem': Option Strict On disallows implicit conversions from 'Object' to 'String'.

я могу сделать lvMerges.Items.Add (ITM), которая не выбрасывает ошибку, но тогда я должен удалить его из ListView lvCustomers, что я не хочу делать.

Может кто-нибудь объяснить, как я могу сделать это правильно, не выключая Вариант Строгий?

Цель состоит в том, чтобы скопировать ListviewItem со всеми SubItems.

+0

Если вы используете '(ListViewItem), то itm.Clone()' это работает? – Adrian

+1

Хорошо, по какой-то причине я забыл, что я не в C# здесь ... добавил правильный синтаксис, как ответ ниже. – Adrian

ответ

3

Ошибка вы получили там говорит вам, что с Option Strict On на вас не может сделать неявное литье из Object в String или ListViewItem. Поэтому вам нужно сделать явное литье.

For Each itm As ListViewItem In Me.lvCustomers 
    If CDbl(DirectCast(itm.Tag, String) <> customer.Id Then Me.lvMerges.Items.Add(DirectCast(itm.Clone, ListViewItem)) 
Next 

Это работает?

+0

Да работал - спасибо! – Jeff

+1

Awesome: D Счастливые помочь. – Adrian