2017-12-18 77 views
-4

,同时实施的一段代码我得到下面的错误CA1800:不要投不必要

“的参数,被铸造在方法类型‘列表框’多次高速缓存中的‘作为’操作的结果,或者直接投射以消除冗余投影类指令。“

代码

private static void LibrarayMethod(object sender) 
    { 
     try 
     { 
      if (((ListBox)(sender)).SelectedItems.Count > 0) 
      { 
       MainView.GetInstance.Library.SelectedBook = ((ListBox)(sender)).SelectedItems[0].ToString(); 
      } 
     } 
     catch (Exception ex) 
     { 

      Logger.Error("Error in Class - LibrarayMethod() method as ", ex); 
     } 
    } 

请帮助解决这个错误。

+0

这不是一个错误,它是一个警告。你是否尝试阅读'as'运算符或者在C#中进行投射,并用另一个变量替换'(ListBox)(sender)'? – CodeCaster

+1

警告/错误很明显,不是吗?提取一个保存转换结果的变量('(ListBox)(sender)'),而不是转换两次。 – HimBromBeere

+0

var senderListBox =((ListBox)(sender));如果(senderListBox.SelectedItems' ...等 – ADyson

回答

1

的信息是很清楚的:不是众多蒙上(ListBox)(sender)把刚刚一个sender as ListBox

private static void LibrarayMethod(object sender) { 
    ListBox box = sender as ListBox; 

    // sender is ListBox and the listbox has selected items 
    if (box != null && box.SelectedItems.Count > 0) 
    MainView.GetInstance.Library.SelectedBook = box.SelectedItems[0].ToString(); 
} 

甚至(短,但是,可能的可读性):

private static void LibrarayMethod(object sender) { 
    ListBox box = sender as ListBox; 

    if (box?.SelectedItems.Count > 0) 
    box.SelectedItems[0].ToString(); 
} 
+0

我试过这个,它工作正常。 – Karthik

2
var listbox = (ListBox)sender; 
if (listbox.SelectedItems.Count > 0) 
{ 
    MainView.GetInstance.Library.SelectedBook = listbox.SelectedItems[0].ToString(); 
}