我的应用程序中的每个实体类都必须实现以下接口:
public interface IEntity<T> {
T Id { get; set; }
}
几乎 100% 的时间 T 的类型将是 int。但是,我必须处理 id 可能是复合 id 的情况。例如,我可以有以下实现:
public class User : IEntity<int> {
public int Id { get; set; }
...
}
public class Site : IEntity<int> {
public int Id { get; set; }
...
}
public class UserSite : IEntity<UserSiteIdentifier> {
public UserSiteIdentifier Id { get; set; }
...
}
// Note: IIdentifier doesn't have any members
public class UserSiteIdentifier : IIdentifier {
public User User { get; set; }
public Site Site { get; set; }
...
public override ToString() {
return User.Id + "|" + Site.Id;
}
}
现在给定一个实体实例(类型未知),我需要检索 id 并将其转换为字符串。我可以说:
object entity = ???;
string id;
if (entity is IEntity<int>)
id = ((IEntity<int>)entity).Id.ToString();
else if (entity is IEntity<IIdentifier>)
id = ((IEntity<IIdentifier>)entity).Id.ToString();
但是这段代码并不适合我,因为我必须重复几乎相同的代码来处理复合 id。
如果有人可以向我展示更清洁的解决方案,我将不胜感激。这个应用程序仍然是一个原型,完全可以接受建议。谢谢