繁体   English   中英

将通用 class 转换为不同的类型

[英]Cast generic class to different type

注意:我将简化 class 的结构和内容,实际上它要复杂得多,但它的 rest 对于手头的问题不是必需的。

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

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
}

当我实例化一个Config object 时,它看起来像这样:

Config configInstance = new GenericConfig<int>(..., ConfigDataType=0, ...)

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

configInstance.CastType("Float") OR configInstance.CastType(2)这会给我相当于:

Config configInstance = new GenericConfig<float>(..., ConfigDataType=2, ...)

这甚至是遥不可及的,还是应该避免的?

我认为您可能会考虑重新考虑或改进您的设计(为什么ConfigDataType ),但您可以像这样使用运算符显式转换:

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;
}

创建一个新实例并通过复制而不是返回 null 来处理转换。

用法:

Config v1 = new GenericConfig<int>();
Config v2 = (GenericConfig<float>)v1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM