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