[英]Declare variable of different type using If Else-If statement
I have a method which receives events based on which item is clicked within a TreeView. 我有一个方法,根据TreeView中单击的项目接收事件。
I can add items to both a TreeView and a TreeViewItem in exactly the same way so have attempted to assign item
as either TreeView or TreeViewItem based on the state.sender
type. 我可以以完全相同的方式向TreeView和TreeViewItem添加项目,因此尝试根据
state.sender
类型将item
分配为TreeView或TreeViewItem。 However, currently the only way I can make it work is to assign item as an object first. 但是,目前我能使其工作的唯一方法是首先将项目指定为对象。
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
}
I assume this is called unboxing? 我认为这被称为拆箱? Is there a better way to do what I'm attempting?
有没有更好的方法来做我正在尝试的事情?
Edit: Below is the remaining code. 编辑:下面是剩下的代码。 I hadn't finished writing it when asking the question and have now realised that
object item = new object();
在提出问题时我还没有写完它,现在已经意识到
object item = new object();
is not going to work in this case. 在这种情况下不会起作用。
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
and TreeViewItem
both derive from ItemsControl
, and adding items is done using the methods already available on that, so you should be able to simply use TreeView
和TreeViewItem
都派生自ItemsControl
,并且使用已有的方法添加项目,因此您应该能够简单地使用
private void ProcessEvent(Events.GetEventsResp resp, CustomAsyncStateContainer state)
{
var item = (ItemsControl)state.sender;
// add to item
}
Depending on your version of C#, you may be able to use the new dynamic type: 根据您的C#版本,您可以使用新的动态类型:
http://msdn.microsoft.com/en-us/library/dd264736.aspx http://msdn.microsoft.com/en-us/library/dd264736.aspx
I agree with the other commenters that your problem description is insufficient, but if what you want to do is treat TreeView/TreeViewItem polymorphically, you could simply use a variable of type ItemsControl. 我同意其他评论者认为你的问题描述不充分,但如果你想要做的是多态地处理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.