簡體   English   中英

.NET Compact Framework的泛型和重載

[英]Generic and Overloads with .NET Compact Framework

請查看下面的編輯,我使問題變得更加簡單!

我想創建自己的序列化方法。

我有一個要序列化的通用參考。 此泛型引用有可能只是典型的值類型(單值,int16等)。 在那種情況下,我只想調用適當的重載方法: BitConverter.GetBytes( genericRefThatIsACommonValueType )而不必求助於類型檢查(對於singleint16等)。

首先,我想知道我要問的問題是否可能(因為它看起來和感覺要好得多)。 其次,您是否認為有更好的方法來解決此類問題? 謝謝。

=========編輯==========

為什么在我檢查數據具有BitConverter.GetBytes(..)在重載中應支持的類型時,方法bar()為什么不編譯。 我可以得到類似的東西嗎?

public class foo<T>
{
    T data;

    public foo(T arg)
    {
        data = arg;
    }

    public void bar()
    {
        if(data.GetType() == typeof(int) || data.GetType()== typeof(float))
        {
            BitConverter.GetBytes(data);
        }
    }
}

bar()方法的問題在於知道它是BitConverter.GetBytes()支持的類型,但是data仍然是T類型,沒有任何約束。 如果有BitConverter.GetBytes<T>()方法,它將起作用。

恐怕您必須手動解決每個重載問題:

switch (Type.GetTypeCode(typeof(T)))
{
    case TypeCode.Int32:
        BitConverter.GetBytes((Int32)data);
        break;
    case TypeCode.Int64:
        BitConverter.GetBytes((Int64)data);
        break;
        ...
}

您可以使用反射來確定它是否是原始類型:

https://msdn.microsoft.com/en-us/library/system.type.isprimitive(v=vs.110).aspx

請記住,字符串不是值類型,因此,如果要處理該值,則需要檢查它是否為字符串。 但是,至少到那時,檢查要少得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM