我有一个简单的数据表foreach:
foreach(DataRow designKey in designFolioList.Rows)
{
}
所以我每行有2个项目,例如:
所以我想获得我尝试的第一个的价值:
foreach(DataRow designKey in designFolioList.Rows)
{
var currentDesignKey = designKey[0] as string;
}
但是currentDesignKey始终为null吗?我究竟做错了什么?如何从表中获取项目0的正确方法?
答案 0 :(得分:4)
从该屏幕截图来看,designKey [0]不是字符串,而是一个整数。由于它不能直接转换为字符串,因此在其上使用as string
将导致null。将as
视为强制转换的一种形式,如果无法解决,该转换不会崩溃。这行不通:
object o = 123;
string s = (string)o;
它像这样崩溃:
运行时异常(第xx行):无法将类型为“ System.Int32”的对象转换为类型为“ System.String”。
as
不会崩溃,对于不起作用的强制类型转换只会返回null;
如果您确实希望将其作为字符串,请对其调用.ToString()
。否则,将其强制转换为int(或long /无论什么形式)
foreach(DataRow designKey in designFolioList.Rows)
{
var currentDesignKey = (int)designKey[0];
var currentDesignKeyStr = designKey[0].ToString();
}
.ToString()
之所以有效,是因为对象具有.ToString()
,int
也是如此(通过覆盖)。 ToString()转换为int,将其转换为自身的字符串表示形式:123 -> "123"