在不知道Type的情况下将对象转换为泛型类

时间:2014-10-16 17:40:51

标签: c# generics interface

我有那个界面:

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 ,检查对象类型。但我正在寻找通用的解决方案。

我需要获取 Id 值(作为字符串,所以我不在乎什么是T)

示例:

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

这可能吗?

1 个答案:

答案 0 :(得分:2)

添加另一个界面

public interface IEntityStringId
{
     String IDString { get; }
}

public interface IEntityWithTypedId<T> : IEntityStringId
{

}

然后转到该界面:

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