2014-01-09 104 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) { /* ... */ } 
    // ... 
}