簡體   English   中英

使用If Else-If語句聲明不同類型的變量

[英]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);

        }

    }
}

TreeViewTreeViewItem都派生自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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM