C#:使用Generics将对象强制转换为无符号数字类型

And*_*res 2 c# generics unboxing casting

我正在尝试编写一些代码来将数据从对象类型字段(来自DataSet)转换为它的目标(类型)字段.我正在使用动态转换(至少尝试)它.它似乎适用于字符串,int,DateTime.

但它不适用于无符号类型(ulong,uint).下面是一个简单的代码,显示了我想要做的事情.如果将ul var类型从ulong更改为int,则可以正常工作.

有人有线索吗?

public class console
{

    public static void CastIt<T>(object value, out T target)
    {
        target = (T) value;
    }

    public static void Main()
    {
        ulong ul;
        string str;
        int i;
        DateTime dt;

        object ul_o = (object) 2;
        object str_o = (object) "This is a string";
        object i_o = (object)1;
        object dt_o = (object) DateTime.Now;

        Console.WriteLine("Cast");

        CastIt(ul_o, out ul);
        CastIt(str_o, out str);
        CastIt(i_o, out i);
        CastIt(dt_o, out dt);

        Console.WriteLine(ul);
        Console.WriteLine(str);
        Console.WriteLine(i);
        Console.WriteLine(dt.ToString());
    }

}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 12

安德鲁说,问题是,你不能从一个盒装拆箱intulong.

两种选择:

1)ulong代替方框:

object ul_o = (object) 2UL;
Run Code Online (Sandbox Code Playgroud)

要么

ulong tmp = 2;
object ul_o = tmp;
Run Code Online (Sandbox Code Playgroud)

2)CastIt<T>使用Convert.ChangeType:

public static void CastIt<T>(object value, out T target)
{
    target = (T) Convert.ChangeType(value, typeof(T));
}
Run Code Online (Sandbox Code Playgroud)

这有点臭,但适用于您的示例代码.如果您可以在实际代码中使用第一种方式,那就更好了.