以下是我的代码中的var类型变量:
var FormID = from n in dtEnDate.AsEnumerable()
where n.Field<int>("Tax_Setup_UID") ==
Convert.ToInt32(item.GetDataKeyValue("Tax_Setup_UID"))
select n.Field<string>("FormID");
这里给了我一个蠢货。现在我想将这个var类型变量转换为int以供下次使用,如果我尝试不转换它会给我一个错误。但我无法做到,请有人帮助我。
答案 0 :(得分:5)
您正在返回select n.Field<string>("FormID")
,因此var FormID
的实际类型将为IEnumerable<string>
。
如果您知道查询将返回一个结果,您可以执行以下操作:
int formID = int.Parse(FormID.First());
如果FormID
是您数据库中的int
,请将n.Field<string>
更改为n.Field<int>
,您可以省略int.Parse()
。
答案 1 :(得分:5)
首先,正如已经指出的那样,var
不是它自己的类型。相反,它将采用分配给它的值的类型。您可以通过在Visual Studio中将鼠标悬停在其上来查看哪种类型。
在这个例子中,您应该找到类型IEnumerable<string>
。
所以你需要做的第一件事就是得到你想要的东西。假设您只期望一个结果,那么您可以这样做:
var item = FormID.First();//FormID is probably not a good choice for this variable name
然后,您可以将string
转换为int
,如下所示:
int i = int.Parse(item);
或
int i = Convert.ToInt32(item);
答案 2 :(得分:1)
首先,var
不是类型,它只是“任何类型的简写,编译器必须找出哪一个”。
其次,您的代码将“FormID”字段作为string
返回,而不是int
,因此您的变量FormID
将为IEnumerable<string>
。
如果FormID
中的int
实际上是DataTable
,而select n.Field<int>("FormID");
只是string
,则必须将int
转换为Convert.ToInt32(n.Field<string>("FormID"))
例如,选择{{1}}。
答案 3 :(得分:0)
要记住的一件事是,在将值存储到var中之前,将鼠标悬停在调用函数上并检查其实际返回值。它将为您提供精确/清晰的概念,将返回值存储在何处,以及是否有任何直接转换可用[i.e. Convert.ToInt32 and TryParse etc. when returned type is object or .First/Last in case of Enumerable]
。这样一来,您就可以在以后的步骤中免受转化的威胁。