首页 > 解决方案 > 将对象转换为泛型类型实例

问题描述

我有一个Option<T>这样定义的类:

class Option<T>
{
     T Value { get; set; }
     bool HasValue { get; }
}

在我的代码的某个时刻,这个类的一个实例通过回调发送给我object(在里面传递value

private void Callback(object value)
{
}

我想将值转换为 an Option<T>,但我不知道T编译时的类型。我如何“向上转换”实例以检查例如Value属性?

标签: c#.netgenericscasting

解决方案


您在评论中告诉我们的唯一一件事就是您想要访问HasValue. 那很简单——创建一个界面

public interface IOption
{
    bool HasValue { get; }
}

class Option<T> : IOption
{
     T Value { get; set; }
     bool HasValue { get; }
}

并将object您收到的内容投射到IOption. 如果您还需要提取值,则需要一个带有协变类型参数的附加接口

public interface IOption<out T> : IOption
{
    T Value { get; }
}

class Option<T> : IOption<T>
{
    T Value { get; set; }
    bool HasValue { get; }
}

那么您将能够将您的toobject转换为IOption<object>任何. 但是,您将无法设置它。TValueobject


推荐阅读