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

标签 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 来做到这一点,检查 object 类型。但我正在寻找一个通用的解决方案。

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

示例:

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

这可能吗?

最佳答案

添加另一个接口(interface)

public interface IEntityStringId
{
     String IDString { get; }
}

public interface IEntityWithTypedId<T> : IEntityStringId
{

}

然后转换到该接口(interface):

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

关于c# - 在不知道类型的情况下将对象转换为泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26410643/

相关文章:

c# - 如何为多个foreach实现正确的IEnumerator接口(interface)?

Java泛型

java - 由 'B<T> extends A<T>' 定义,A Class<T> 变量似乎是逆变的

oop - Go 中的接口(interface)组合

C# 静态类成员和 System.Windows.Controls.Image 性能问题

c# - 订购字段信息

c# - 旋转像素阵列的好方法是什么?

c# - .NET 泛型 : Using an Activator created type as a generic shows wrong Type? 需要解决方法

c++ - Lippman 的 C++ Primer 中的设计模式

c# - 伪多重继承