c# - 将对象转换为泛型

标签 c# generics serialization

我有一段时间没 sleep 了,所以这可能比我想象的要容易。

我有一个泛型类,大致是这样的:

public class Reference<T> where T : APIResource //<- APIResource is abstract btw
{
    private T _value = null;
    public T value
    { 
        get { return _value; }
    }
}

在其他地方,在自定义序列化方法中,有人传入一个 object这实际上是 Reference<(something)> 的一个实例.我只想跳到每个 Reference<> 的“值”属性对象有,所以我想去:

string serialize(object o)
{
    return base.serialize( ((Reference<>) o).value );
}

当然,生活并没有那么简单,因为正如编译器所说:

using the generic type "Reference<T>" requires 1 type arguments

我怎样才能做我想做的事?

最佳答案

您可以使用以下属性创建协变通用接口(interface):

interface IReference<out T> where T : ApiResource {
    T Value { get; }
}

然后你可以投 IReference<Anything>IReference<object>IReference<ApiResource> .

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

相关文章:

c# - 如何在microsoft project 2013 PWA csom中获取项目成本值

c# - 仅以 SA 用户身份运行的 Azure SQL 数据库存储过程

c# - 如何通过字符串数组的第一列搜索 List<string[]>?

java - 在原始类类型上忽略显式方法类型参数;编译器错误?

class - Delphi 类 TList

c# - unattend.xml 架构的位置

c# - 字符串数据的多个逻辑 "branches"的拆分和连接

C# 泛型和抽象工厂模式 - 或者做类似事情的某种方式

PHP:序列化和反序列化包含转义字符的字符串

java - 序列化和反序列化中类的层次结构