2017-12-18 73 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(); 
}