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
安德鲁说,问题是,你不能从一个盒装拆箱int到ulong.
两种选择:
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)
这有点臭,但适用于您的示例代码.如果您可以在实际代码中使用第一种方式,那就更好了.