这是我第一次遇到这样的物体。
>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));
}
答案 0 :(得分:2)
使用
var item = (CommsItem)((List<object>)test).FirstOrDefault();
在投射之前,请务必首先检查test
是List<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
)。