我对C#中的类型转换有疑问。
Object data_obj = "test";
string data_str;
data_str = data_obj;
这会产生错误,声称不存在隐式转换。现在,至少对我来说,这有点不直观,因为Console.WriteLine("type{0}",data_obj.GetType())
产生System.String
,但是再一次,我在C#上真的很陌生。
现在,越过这个,我想转换为data_obj
中存储的数据类型,而不必switch
并手动选择类型。
所以,基本上,我要问的是:有没有办法定义从System.Object
到System.String
,System.Decimal
等的隐式转换。
上下文:
我正在从与SQLServer数据库的ODBC连接中读取并尝试将这些行泵入Oracle数据库。现在,必须定义SQLServer和Oracle行的对应关系。现在,我从SQLServer表中读取数据没有任何问题,并将其存储在List<Dictionary<string,Object>>
中(我知道,存储行看似错误,但设计要求,你能做什么)。
插入部分是我遇到插入问题的地方。我基本上通过列表的元素循环(使用foreach)并逐行插入它们。在这里,我需要确定Object
中存储的数据的类型。
编辑:包含更多细节。
答案 0 :(得分:16)
不,没有办法隐含地这样做。选项:
ToString()
(如果引用为null,将抛出异常)Convert.ToString()
"" + data_obj
(ick,不要这样做)data_obj
字符串为什么你如此热衷于隐式转换?
答案 1 :(得分:2)
如上所述,您应该在代码中执行的操作是casting
,而不是converting
。有问题的对象是一个字符串;您只需将其存储在object
参考中。
投射会像这样完成:
data_str = (string)data_obj;
你提到的Console.Writeline
的重载需要一个格式字符串,然后是一个object
的params数组...而不是字符串。它在每个对象上调用ToString()
。因此,您对data_obj.GetType().ToString()
的调用可能会减少到data_obj.GetType()
(在字符串上调用ToString()只会再次返回字符串)
至于从object
到x
类型的隐式转换...想想你在问什么; object
的引用可以是任何CLR类型。你如何处理这些转换?
答案 2 :(得分:1)
您可以使用Convert.ToString方法:
object o = ...
string s = Convert.ToString(o);
答案 3 :(得分:0)
C#中没有从object
到string
的隐式转换。但是,您可以调用对象的虚拟ToString
方法
string s = o.ToString();
答案 4 :(得分:0)
如果将值存储在var而不是type对象中,并让编译器决定该值是什么,那么可以使其隐式。
var data_obj = "test";
string data_str;
data_str = data_obj;