在我的應用程序必須實現以下接口的每個實體類獲得一個共同的成員。不過,我必須處理的情況下,身份證可能是一個複合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的。
我會很感激,如果有人能給我一個更清潔的解決方案。這個應用程序仍然是一個原型,並完全接受建議。由於
爲什麼不直接使用entity.ToString()? – looper
@looper謝謝,但我需要確保該對象也實現IEntity。 –
nfplee
即使任何'UserSiteIdentifier'是一個'IIdentifier',你不能斷定一個'IEntity'也是'IEntity '。這將要求你的'IEntity '接口在'T' **中是**協變('out')。它不能成爲'IEntity ',因爲它也提到了一個setter。 setter就像是一個以'T'作爲參數的方法。我想說的是,我不認爲你上面的'else if'條件會起作用。 –