繁体   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