c# - 将对象转换为泛型类型实例
问题描述
我有一个Option<T>
这样定义的类:
class Option<T>
{
T Value { get; set; }
bool HasValue { get; }
}
在我的代码的某个时刻,这个类的一个实例通过回调发送给我object
(在里面传递value
)
private void Callback(object value)
{
}
我想将值转换为 an Option<T>
,但我不知道T
编译时的类型。我如何“向上转换”实例以检查例如Value
属性?
解决方案
您在评论中告诉我们的唯一一件事就是您想要访问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>
任何. 但是,您将无法设置它。T
Value
object
推荐阅读
- php - 如何在 yii framweork 中使用 phpmailer 从函数发送附件?
- javascript - 我试图做到这一点,所以卡片只在 div.card-title 而不是洞 div.card 上打开(CodePen Home 3D 折叠显示)
- php - 尝试将mysql表中的多个值查询到php中时出现问题
- logging - 如何收集 Kubernetes CronJob 的每个作业在一段时间内的日志?
- twitter-bootstrap - Bootstrap 4.5 截断问题
- sql - 将数据从单个管道分隔的列中获取到不同的列
- python - 谁能告诉我这段代码有什么问题?当我第 11 次按重命名(为了使数字为 10)时,一切都冻结了
- python - 在我的 Windows 64 位机器上安装 Python 时出错
- erlang - 如何从其他erlang文件中导入erlang文件
- python-3.x - 使用 Python 的 asyncio 跨不同类同时启动多个任务