[英]Declare variable of different type using If Else-If statement
我有一个方法,根据TreeView中单击的项目接收事件。
我可以以完全相同的方式向TreeView和TreeViewItem添加项目,因此尝试根据state.sender
类型将item
分配为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);
}
}
}
TreeView
和TreeViewItem
都派生自ItemsControl
,并且使用已有的方法添加项目,因此您应该能够简单地使用
private void ProcessEvent(Events.GetEventsResp resp, CustomAsyncStateContainer state)
{
var item = (ItemsControl)state.sender;
// add to item
}
根据您的C#版本,您可以使用新的动态类型:
http://msdn.microsoft.com/en-us/library/dd264736.aspx
我同意其他评论者认为你的问题描述不充分,但如果你想要做的是多态地处理TreeView / TreeViewItem,你可以简单地使用ItemsControl类型的变量。
if (state.sender is ItemsControl)
item = (TreeViewItem)state.sender;
else
throw InvalidArgumentException("state.sender")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.