如何处理类型“Object {System.Collections.Generic.List <object>}”</object>

时间:2014-07-27 16:50:31

标签: c# wpf object drag-and-drop

这是我第一次遇到这样的物体。

>Link of image of my local window during debug<

所以简单地说,我如何访问CardNO或ItemID的值,当唯一的'test'给出的方法与普通对象完全相同时我分别为296和130,我不知道要播放什么它来。我甚至不能做'test [0]'。

这是“测试”的来源:

private void ListBoxIssue_OnDragEnter(object sender, DragEventArgs e)
    {
        var test = DragDropPayloadManager.GetDataFromObject(e.Data, typeof(CommsItem));
    }

3 个答案:

答案 0 :(得分:2)

使用

var item = (CommsItem)((List<object>)test).FirstOrDefault();

在投射之前,请务必首先检查testList<object>的实例,以及test [0]是CommsItem的实例。

答案 1 :(得分:0)

您需要将List<Object>转换为List<CommsItem>

示例:

var test = DragDropPayloadManager.GetDataFromObject(e.Data, typeof(CommsItem)).Cast<CommsItem>().ToList();

或投下每个元素:

CommsItem element = (test[0] as CommsItem);

哪个会将element转换为CommsItem,除非它不属于该类型或从该类型派生,在这种情况下它将返回null。

因此,要回答您的问题,您可以按以下方式访问它们:

string CardNO = (test[0] as CommsItem).CardNO;

var test = DragDropPayloadManager.GetDataFromObject(e.Data, typeof(CommsItem)).Cast<CommsItem>().ToList();
string CardNO = test[0].CardNO;

(如果使用第一种方法,则不需要演员表)

您正在做的是将List<object>test投射到List<CommsItem>,您可以使用它来访问属性,或者只是投射每个项目。

答案 2 :(得分:0)

更简单:

var item = ((List<object>)test).Cast<CommsItem>().FirstOrDefault();

如果您的列表不是CommsItem的列表,那么您将获得一个空列表。 FirstOrDefault()确保您只获得第一项,如果没有第一项,则该项的默认值(对于参考对象,这将是null)。