2014-01-09 101 views
2

我有一類作爲接口「ICLASS」,這是僅在接收到對象時,沒有返回類型:如何從對象中獲取值?

public interface IClass 
    { 
     void OnEventReceived(EventData ev); 
    } 

現在我通過所述接口類對象在另一個類的構造函數「呼叫者」

public Caller(IClass evObjParm) 
    { 
     //pass parameters 
    } 

該課程使用存儲在evObjParm中的信息。不過,我只對evObjParm中存儲的一些信息感興趣。我如何獲得這些信息的子集?

回答

1

您可以使用LINQ從傳遞到事件處理程序的EventData中提取任意信息。

public struct EventData 
{ 
    public int id; 
    public string name; 
    public int position; 
    public string auxiliary; 
} 

... 
void OnEventReceived(EventData ev) { 
    var infoRecord = ev.Select(x => new { x.name, x.id }).ToArray(); 
    ... 
} 
+0

有在OnEventReceived(EVENTDATA EV) –

+0

事件你必須釐清的問題 - 說什麼樣的信息正是你想要提取的。如果您提供自己最有用的EventData示例。也就是說,沒有什麼能阻止你從EventData中提取事件 - 如果這是你想要提取的。 – mockinterface

+0

OnEventReceived(EventData ev)當我運行這個項目時,這個對象會進入不同的類,並且會得到一些使用完整的信息,比如用戶ID,名字,年齡,dOB,地址等。該信息在這個對象中是站在一邊的。當我將這個對象傳遞給構造函數時,我可以如何獲得名稱和地址。 –

1

要麼這是一個非常簡單或非常複雜的問題,但爲什麼不只保存你所需要的?

public string Name {get; set;} 
public DateTime Time {get; set;} 

public Caller(IClass evObjParm) 
{ 
    Name = evObjParm.Name; 
    Time = evObjParm.Time; 
} 

或者,也許你所要求的東西一樣(很可能):

public Caller(IClass evObjParm) 
{ 
    if(evObjParm is ClassA) 
    { 
     var a = evObjParm as ClassA; 
     var name = a.Name; 
     // ... 
    } 
    if(evObjParm is ClassB) { /* ... */ } 
    // ... 
}