2014-10-16 93 views
2

我有一个接口:转换一个对象到一个泛型类不知道类型

public interface IEntityWithTypedId<T>{ 
    T Id { get; } 
} 

而且有两类:

public abstract class EntityWithTypedId<TId> : IEntityWithTypedId<TId>{...} 
public abstract class Entity : EntityWithTypedId<int>{...}  

所以,我有实体这样的:

public class TestA : Entity 
public class TestB : EntityWithTypedId<string> 
public class TestC : EntityWithTypedId<byte> 

现在我有一个对象并需要将它投射到IEntityWithTypedId<T> 我可以这样做嵌套ifs,检查对象类型。但我正在寻找一个通用的解决方案。

我需要得到标识值(字符串,所以我不关心什么是T)

例子:

var idString = ((IEntityWithTypedId<long>)object).Id.ToString(); 

这可能吗?

+2

如果你不知道'T'甚至作为一个泛型类型参数,你会怎么想到用它?也许你应该有一个非泛型的接口,你可以将其转换为(或者也可以)... – 2014-10-16 17:44:03

+0

我的IEntityWithTypedId有一个属性Id,我需要将该值作为一个字符串(所以我不在乎T)。这样的事情︰var id =((IEntityWithTypedId )object).Id.ToString() – Paul 2014-10-16 17:51:13

+2

对,所以你应该有一个非通用的接口,因为我建议... – 2014-10-16 18:04:54

回答

2

添加另一个接口

public interface IEntityStringId 
{ 
    String IDString { get; } 
} 

public interface IEntityWithTypedId<T> : IEntityStringId 
{ 

} 

然后映射到该接口:

var idstring = ((IEntityStringId)obj).IDString; 
+0

我需要访问Id属性。 – Paul 2014-10-16 18:18:25

+1

你会从你的IDString实现中做什么 – 2014-10-16 18:52:35

相关问题