2012-03-01 271 views
1

我在这段代码中遇到了困难,我试图从数据集中为数据输出一个长转换。Long.Tryparse过载和转换错误C#

我想检查是否有可能转换数据集中该位置内的值。如果它不工作,这意味着有数据集中没有任何项目,因为所有其他参赛者(从txtfile readed)是有效的

代码:

long Recid = 0; 
Boolean checkrecid = long.TryParse(dts.Tables[0].Rows[0]["RECID"], out Recid) 

错误:

The best overloaded method match for 'long.TryParse(string, out long)' has some invalid arguments and 
Argument 1: cannot convert from 'object' to 'string'  

在此先感谢。

+2

如果RECID是一个漫长的,你并不需要转换,但投:(长)dts.Tables [0] .Rows [0] [ “RECID”] – 2012-03-01 13:52:41

回答

8

两个选项:

如果您的数据一个字符串,然后将它转换为字符串

long Recid = 0; 
Boolean checkrecid = long.TryParse((string)dts.Tables[0].Rows[0]["RECID"], out Recid) 

否则,调用.ToString()

long Recid = 0; 
Boolean checkrecid = long.TryParse(dts.Tables[0].Rows[0]["RECID"].ToString(), out Recid) 

原因你需要这样做是因为long.TryParse()方法只有交流cepts一个string的实例作为其第一个参数http://msdn.microsoft.com/en-us/library/zc2x2b1h.aspx

出来的数据集的数据的类型为object,因此,如果它是一个字符串,它是失败的Int64.TryParse()方法不能确定。 (一般来说,编程不允许含糊不清,这就是为什么TryParse方法不会为你转换它 - 你必须明确你想要什么和你提供什么)。

数据集非常灵活,因为您可以在其中存储任何object,但是它更多的工作让程序员在将它重新取出后重新输入。其他的选择,比如强类型的数据集,通过更加严格地关注你可以存储的类型来解决这个问题,但是你不需要一直持续投射东西。

+0

谢谢!但你能解释一下吗?我不知道为什么我应该将我的对象转换为字符串,然后再将其转换回长... – Dashzapp 2012-03-01 13:48:31

+0

没问题 - 用更长的推理更新了答案。 – 2012-03-01 13:54:24

+3

@Dashzapp如果它已经是一个字符串,你不转换它,一个演员不是一个转换。程序员告诉编译器它可以期望一个给定的对象是给定的类型(在这种情况下是字符串)。如果它已经很久了,只需要将它投入很长时间,所以编译器知道它是一个很长的值 – 2012-03-01 13:59:58

0

将对象(dts.Tables[0].Rows[0]["RECID"])转换为字符串。而已。

dts.Tables[0].Rows[0]["RECID"].ToString()