如何使用泛型来解决转换问题

本文关键字:转换 问题 解决 何使用 泛型 | 更新日期: 2023-09-27 18:34:08

我有以下情况:

public interface IParam
{
    Object Value {get;set;}
} 
public abstract class BaseClass: IParam
{
    public virtual object Value {get;set;}
}
public class IntSubClass:BaseClass
{
    public override object Value {get;set;}
}

向外界公开了这个接口。所有属性都可以通过IParam访问。这种方法的缺点是很多铸造问题。

IParam dummy = ParameterList[abc];
int index = (int)dummy.Value;

请求请告知如何使用泛型解决此问题。在外面,我只能公开通用接口。

如何使用泛型来解决转换问题

如果我们假设参数可以是不同类型的,那么简单地说:否。

哦,你可以介绍泛型...但这只会改变事情

int val = (int)(paramList["abc"].Value);

自:

int val = ((IParam<int>)paramList["abc"]).Value;

并没有多大帮助。唯一的其他选择是隐式转换运算符,它 a: 不适用于 interface s,b: 不是很清楚/很明显。

坦率地说,我只会使用演员阵容。这不是问题。一个盒子/开箱不是很昂贵,代码的目的很清楚。

您可以创建具有T Value {get; set;}方法的IParam<T>接口。这会解决你的问题吗?您将无法转换为 IParam,而是在 per/

如果在内部您必须将所有类型的参数放在一个列表中,那么,好吧,您只能通过其公共基本类型访问它们。

在内部,您可以将参数保存在单独的列表中,每个列表都有某种类型,但这在您的方案中可能是一种矫枉过正。