[英]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.