如果我有下面的方法;
private TSource CopyFileClientModel<TSource>(TSource fileClientOrContact)
因此,我可以将 FileClient
或 FileContact
模型传入此方法。
两者都有一个名为 Contact
的属性,它也是一个模型以及两者之间不通用的其他一些属性。
现在我想从传入的模型中获取 Contact
模型。
Contact sourceContact = fileClientOrContact.Contact;
但是,鉴于这是一个泛型,它不知道 TSource
中有一个 Contact
对象。
我的限制是我不能针对 FileClient
或 FileContact
放置接口(interface)。我基本上不能碰这两个模型中的任何一个。
如何从 TSource
获取联系人对象?我能以某种方式使用反射吗?
最佳答案
您可以传递一个函数来返回联系人。
例如:
private FileClient CopyFileClientModel(FileClient fileClient) {
return this.CopyFileClientModel(fileClient, c => c.Client);
}
private FileContact CopyFileClientModel(FileContact fileContact) {
return this.CopyFileClientModel(fileContact, c => c.Client);
}
private TSource CopyFileClientModel<TSource>(TSource fileClientOrContact, Func<TSource, Contact> contactGetter) {
var contact = contactGetter(fileClientOrContact);
// Whatever else...
}
关于c# - 从通用模型中获取模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8875584/