[英]Generic and Overloads with .NET Compact Framework
请查看下面的编辑,我使问题变得更加简单!
我想创建自己的序列化方法。
我有一个要序列化的通用参考。 此泛型引用有可能只是典型的值类型(单值,int16等)。 在那种情况下,我只想调用适当的重载方法: BitConverter.GetBytes( genericRefThatIsACommonValueType )
而不必求助于类型检查(对于single
或int16
等)。
首先,我想知道我要问的问题是否可能(因为它看起来和感觉要好得多)。 其次,您是否认为有更好的方法来解决此类问题? 谢谢。
=========编辑==========
为什么在我检查数据具有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.