C# 将泛型类强制转换为其他类型

C# 将泛型类强制转换为其他类型,c#,class,generics,casting,C#,Class,Generics,Casting,注意:我将简化本课程的结构和内容,它在现实中要复杂得多,但其余部分对于当前的问题不是必需的 我有以下(简化的)班级结构: public abstract class Config { // A number of abstract parameters and special abstract methods } public class GenericConfig<T> : Config { private DataType configDataType;

注意:我将简化本课程的结构和内容,它在现实中要复杂得多,但其余部分对于当前的问题不是必需的

我有以下(简化的)班级结构:

public abstract class Config
{
    // A number of abstract parameters and special abstract methods
}

public class GenericConfig<T> : Config
{
    private DataType configDataType;
    public DataType ConfigDataType
    {
        get { /* A get function */ }
        set { /* A set function */ }
    }
    public T InitialValue { get; set; }
    public T MinValue { get; set; }
    public T MaxValue { get; set; }
    // Overridden parameters and methods
}

public enum DataType
{
    Int,
    Bool,
    Float,
    String,
    DateTime
}
公共抽象类配置
{
//一些抽象参数和特殊的抽象方法
}
公共类GenericConfig:Config
{
私有数据类型configDataType;
公共数据类型ConfigDataType
{
获取{/*一个获取函数*/}
集合{/*集合函数*/}
}
公共T初始值{get;set;}
公共最小值{get;set;}
公共T最大值{get;set;}
//重写的参数和方法
}
公共枚举数据类型
{
Int,
布尔,
浮动
一串
日期时间
}
当我实例化一个
Config
对象时,它如下所示:

Config configInstance=new GenericConfig(…,ConfigDataType=0,…)

我希望能够将int类型转换为float或方法调用中的任何内容。类似于以下内容(我最好遵循我的枚举类型):

configInstance.CastType(“Float”)
configInstance.CastType(2)
,这将为我提供以下等价物:

Config configInstance=new GenericConfig(…,ConfigDataType=2,…)


这是否是可能的,还是应该避免的?

我认为你可以考虑重新思考或改进你的设计(为什么<代码>配置数据类型>代码>是嵌套的),但是你可以使用操作符显式的铸造:
static public explicit operator GenericConfig<int>(GenericConfig<T> value)
{
  if ( typeof(T) is int ) return (GenericConfig<int>)value;
  return null;
}

static public explicit operator GenericConfig<float>(GenericConfig<T> value)
{
  if ( typeof(T) is float ) return (GenericConfig<float>)value;
  return null;
}
静态公共显式运算符GenericConfig(GenericConfig值)
{
如果(typeof(T)为int)返回(GenericConfig)值;
返回null;
}
静态公共显式运算符GenericConfig(GenericConfig值)
{
如果(typeof(T)是float)返回(GenericConfig)值;
返回null;
}
创建一个新实例,并通过复制而不是返回null来处理转换

用法:

Config v1=new GenericConfig();
配置v2=(GenericConfig)v1;

GenericConfig
中的泛型参数
T
的用法是什么?我将编辑并添加它的用法!抱歉在施放后,最小值、最大值和初始值会发生什么情况?它们也需要更新吗?因为
int
float
有不同的边界。另外,为什么在这里将配置类型设置为0
newgenericconfig(…,ConfigDataType=0,…)
?可能是2?是的,您在这两个方面都是正确的,强制转换应该作为全局类型影响
T
,因此影响基于它的每个属性(是的,它应该是2,将发生变化)。您可以使用接口转换大多数类型。除了
DateTime
,因为向/从数值类型转换会引发异常
Config v1 = new GenericConfig<int>();
Config v2 = (GenericConfig<float>)v1;