簡體   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