Object to System.String隐式转换

时间:2010-10-26 16:28:23

标签: c#

我对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.ObjectSystem.StringSystem.Decimal等的隐式转换。

上下文:

我正在从与SQLServer数据库的ODBC连接中读取并尝试将这些行泵入Oracle数据库。现在,必须定义SQLServer和Oracle行的对应关系。现在,我从SQLServer表中读取数据没有任何问题,并将其存储在List<Dictionary<string,Object>>中(我知道,存储行看似错误,但设计要求,你能做什么)。 插入部分是我遇到插入问题的地方。我基本上通过列表的元素循环(使用foreach)并逐行插入它们。在这里,我需要确定Object中存储的数据的类型。

编辑:包含更多细节。

5 个答案:

答案 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()只会再次返回字符串)

至于从objectx类型的隐式转换...想想你在问什么; object的引用可以是任何CLR类型。你如何处理这些转换?

答案 2 :(得分:1)

您可以使用Convert.ToString方法:

object o = ...
string s = Convert.ToString(o);

答案 3 :(得分:0)

C#中没有从objectstring的隐式转换。但是,您可以调用对象的虚拟ToString方法

string s = o.ToString(); 

答案 4 :(得分:0)

如果将值存储在var而不是type对象中,并让编译器决定该值是什么,那么可以使其隐式。

var data_obj = "test";
string data_str;
data_str = data_obj;