2011-11-30 60 views
0

我有這樣的方法,我不知道是什麼物體發件人發送如何解析的對象發件人

void xTreve(object sender, Microsoft.SilverlightMediaFramework.Core.CustomEventArgs<Microsoft.SilverlightMediaFramework.Core.Media.PlaylistItem> e) 
{ 
} 

我怎麼檢查,看看是什麼對象發件人包含

回答

2

我要帶它的問題是確定什麼樣的sender類型,以便您可以使用它。

考慮到這一點,您首先需要獲得sender的類型,然後您可以對其進行適當的投射,以便對其進行操作。

例如,你可以在你的方法如下:

if (sender is TypeA) 
{ 
    var iAmA = (TypeA)sender; 

    // do something A-ish with sender 
} 
else if (sender is TypeB) 
{ 
    var iAmB = (TypeB)sender; 

    // do something B-ish with sender 
} 
else 
{ 
    // do something else 
} 

另外,以下不一樣的前面:

Type type = sender.GetType(); 

if (type == typeof(TypeA)) 
{ 
    var iAmA = (TypeA)sender; 

    // do something A-ish with sender 
} 
else if (type == typeof(TypeB)) 
{ 
    var iAmB = (TypeB)sender; 

    // do something B-ish with sender 
} 
else 
{ 
    // do something else 
} 
+0

公平地說,這會給你的對象的類型,而不是「哪個對象」通常意味着哪個實例。 –

+0

當然,同意。第一步將涉及獲得'發件人'類型,然後進行轉換以獲得'發件人'的成員。我會編輯更具體一點。 – arcain

0

如果物體總是將是相同的類型,但你只是不確定該類型是什麼,然後在函數內部設置一個斷點,並使用visual studio quickwatch窗口來檢查它。您將能夠看到發件人對象的控件名稱和其他屬性,以及它的類型。一旦你知道了類型,你就會知道如何在代碼中投入發件人,如果你需要操縱它的話。

0

如果您需要告訴哪個實例發件人,它取決於發件人是否有某種屬性來標識它。考慮下面的代碼:

public void randtest() 
{ 
    var rand = new Random(); 
    var obj1 = new object(); 
    var obj2 = new object(); 

    if (rand.Next() % 2 == 1) 
    { 
     method(obj1); 
    } 
    else 
    { 
     method(obj2); 
    } 

} 

public void method(object thing) 
{ 
    //here i have no way to tell if thing is obj1 or obj2; 
}