我有接收基于点击一个TreeView内该项目事件的方法。声明变量的if else-if语句
我可以以完全相同的方式将项目添加到TreeView和TreeViewItem,因此试图将item
分配为基于state.sender
类型的TreeView或TreeViewItem。但是,目前我能做到的唯一方法就是先将项目指定为对象。
private void ProcessEvent(Events.GetEventsResp resp, CustomAsyncStateContainer state)
{
object item = new object(); //must be a better way than this?
if (state.sender is TreeViewItem)
item = (TreeViewItem)state.sender;
else if (state.sender is TreeView)
item = (TreeView)state.sender;
//other code
}
我假定这被称为拆箱?有没有更好的方法来做我正在尝试的?
编辑:下面是余下的代码。在提问时我还没有写完,现在已经意识到object item = new object();
在这种情况下不起作用。
private void DisplayGetEvent(Events.GetEventsResp resp, CustomAsyncStateContainer state)
{
object node = new object();
if (state.sender is TreeViewItem)
node = (TreeViewItem)state.sender;
else if (state.sender is TreeView)
node = (TreeView)state.sender;
if (resp.eventItems != null)
{
Events.UXEvent[] eventItems = resp.eventItems;
Array.Sort(eventItems, new UXWrapper.UXEventComparer());
int itemCount = eventItems.Length;
TreeViewItem tvItem = new TreeViewItem;
for (int i = 0; i < itemCount; i++)
{
tvItem.Header = eventItems[i].name;
tvItem.Tag = eventItems[i];
node.Items.Add(tvItem);
}
}
}
你可以发布整个代码吗?我需要了解为什么你需要像你一样分配变量。 –
您可以直接将'item'分配给'null'。无需创建新对象 – alf
拆箱即将装箱值类型转换为拆箱值。由于'TreeView'和'TreeViewItem'是引用类型,所以不能拆箱。另外,由于item仍然被输入为“object”,因此您的演员和类型检查是多余的。没有看到代码的其余部分,不可能说出最好的方法。 – Lee