簡體   English   中英

將物件投放至清單<T>

[英]cast object to List<T>

我有一個MVVM項目,一個視圖的網格允許多選,

<DataGrid x:Name="DataGridBodegas" ItemsSource="{Binding MyLis}" Grid.Row="1">
     <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <cmd:EventToCommand Command="{Binding _MyCommand}" CommandParameter="{Binding ElementName=DataGridBodegas,Path=SelectedItems}"/>
                </i:EventTrigger>
      </i:Interaction.Triggers>
      <DataGrid.Columns>
          <DataGridTextColumn Header="{x:Static resources:Labels.ACOPIO_SeleccioneBodegas}" Width="Auto" Binding="{Binding StrNombreBodega}" ClipboardContentBinding="{x:Null}"/>
      </DataGrid.Columns>
</DataGrid>

在VM上,我有一個ICommand

public override void CommandSelectionChange(object p)
{            
    MyList.RemoveAll(x=> x.IntIdBodega != -1);
    MyList = p as List<Merlin_INV_Bodegas>; // Allways return Null 
}

如果我看一下p object它是一個SelectedItemCollection ,它具有我的目標類型的元素,但是如果嘗試這樣轉換

(List<TargetType>)p // Throw exception 
p as List<TargetType> // Allways return null 

foreach( TargetType t in p)
{
} // Throw exception 

我的問題是如何將p正確地投射到列表中?

您可以使用Linq ToList()

List<TargetType> list = ((TargetType[])p).ToList();

否則使用List<>構造函數:

List<TargetType> list = new List<TargetType>((TargetType[])p);

如果它是SelectedItemCollection ,則需要首先將其強制轉換為IList:

List<TargetType> list = ((System.Collections.IList)p).Cast<TargetType>().ToList();

這是因為DataGrid.SelectedItems is of type IList而不是通用IList<T> 因此,您將不得不在IList中進行類型轉換

var collection = p as IList  

foreach( var item in collection)
{
    var myitem = (TargetType)item;
} 

由於您要做的只是foreach整個列表,因此建議您將其轉換為IEnumerable (或IEnumerable<TargetType> )。 使用可能的最簡單的類型/接口是使代碼更易於重用和理解的好方法。

如果由於傳遞的類型不是您認為的那樣而在轉換時遇到麻煩(到目前為止,此處似乎已給出了注釋),建議您在方法的第一行上放置一個斷點,並檢查調試器中p的值。 這樣,您可以確定實際傳遞的內容。

將 object 投到列表中<object><div id="text_translate"><p>由於某些我無法控制的原因,需要定義我的一種方法來接受 object 類型的一個參數。 但我知道這個參數的值實際上是 List 類型,帶有一個我不知道的通用參數。</p><p> 我正在嘗試將此 object 轉換為 List&lt;object&gt;,但不知道如何在不知道確切的通用參數是什么的情況下執行此操作。</p><p> 我想做這樣的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法會很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我堅持使用 object 參數。 知道如何解決這個問題嗎?</p></div></object>

[英]Cast object to List<object>

為什么我不能從列表中投射<myclass>列出<object> ?<div id="text_translate"><p> 我有一個對象列表,它們屬於我的QuoteHeader類型,我想將此列表作為對象列表傳遞給能夠接受List&lt;object&gt;的方法。</p><p> 我的代碼行顯示...</p><pre> Tools.MyMethod((List&lt;object&gt;)MyListOfQuoteHeaders);</pre><p> 但是我在設計時收到以下錯誤...</p><pre> Cannot convert type 'System.Collections.Generic.List&lt;MyNameSpace.QuoteHeader&gt;' to 'System.Collections.Generic.List&lt;object&gt;'</pre><p> 我需要對我的 class 做任何事情來允許這樣做嗎? 我認為所有類都繼承自 object 所以我不明白為什么這不起作用?</p></div></object></myclass>

[英]Why can't I cast from a List<MyClass> to List<object>?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 如何在 List 中轉換對象類型<t> 。除了 演員表 <object> 使用反射來識別未知的T [] 如何投射清單 <T> 對象變成文本 將 object 投到列表中<object><div id="text_translate"><p>由於某些我無法控制的原因,需要定義我的一種方法來接受 object 類型的一個參數。 但我知道這個參數的值實際上是 List 類型,帶有一個我不知道的通用參數。</p><p> 我正在嘗試將此 object 轉換為 List&lt;object&gt;,但不知道如何在不知道確切的通用參數是什么的情況下執行此操作。</p><p> 我想做這樣的事情:</p><pre> public static List&lt;object&gt; ConvertToList(object input) { if (input.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List&lt;&gt;))) { //Of course this does not work, because input might for example be of type List&lt;string&gt; return (List&lt;object&gt;) input; } else { return null; } }</pre><p> 我知道,如果我有List&lt;T&gt;而不是object input ,使用以下方法會很容易:</p><pre> return input.Cast&lt;object&gt;()</pre><p> 但不幸的是,我堅持使用 object 參數。 知道如何解決這個問題嗎?</p></div></object> 為什么不string.Cast <object> 演員名單 <string> 列表 <object> ? 為什么我不能從列表中投射<myclass>列出<object> ?<div id="text_translate"><p> 我有一個對象列表,它們屬於我的QuoteHeader類型,我想將此列表作為對象列表傳遞給能夠接受List&lt;object&gt;的方法。</p><p> 我的代碼行顯示...</p><pre> Tools.MyMethod((List&lt;object&gt;)MyListOfQuoteHeaders);</pre><p> 但是我在設計時收到以下錯誤...</p><pre> Cannot convert type 'System.Collections.Generic.List&lt;MyNameSpace.QuoteHeader&gt;' to 'System.Collections.Generic.List&lt;object&gt;'</pre><p> 我需要對我的 class 做任何事情來允許這樣做嗎? 我認為所有類都繼承自 object 所以我不明白為什么這不起作用?</p></div></object></myclass> C#,如何施放動作<list<t> &gt; 行動<list<object> &gt; </list<object></list<t> 無法將物件投放至清單 如何將對象投射到列表 將對象轉換為通用列表
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM