我有一个字符串变量st
,我已经通过使用以下语句将该字符串变量分配给输出表单数据表
string st;
if(dt!=null)
{
if(dt.rows.count> 0)
{
st = dt.Rows[3]["timeslot_StartTime"].ToString();
}
}
现在我想将这个字符串变量转换为日期-时间属性,我已经使用下面的语句完成了这个操作
DateTime pt1 = DateTime.Parse(st);
但在st表示CCD_ 2。
将st
初始化为null或字符串。空
string st = null;
为了更安全起见,在解析之前请检查st
是否为null。
给st
一个初始值,例如
string st = String.Empty;
尝试以这种方式定义st
string st = ""
尝试执行
string st = null;
在解析之前检查st是否为空
可能您在与分配变量的范围不同的范围中使用该变量,如
string st;
if (condition) {
st = dt.Rows[3]["timeslot_StartTime"].ToString();
}
DateTime pt1 = DateTime.Parse(st);
因此,st
并不总是初始化的(只有在验证了if条件的情况下才会初始化)。改为尝试
string st;
if (condition) {
st = dt.Rows[3]["timeslot_StartTime"].ToString();
DateTime pt1 = DateTime.Parse(st);
}
只能在if
逻辑中分配st
。如果您试图在这些块之外使用st
,您将遇到"取消分配"错误。
任一
- 初始化变量时为其指定默认值
- 可以解析的东西,或者在尝试解析之前记得包含一个检查
- 或者尝试在从数据表中检索值时将其解析为
DateTime
当然,假设您从DataTable中提取值,如果该值已作为日期存储在表中,则完全忘记ToString()
和解析。
DateTime date = (DateTime)dt.Rows[x]["ColumnName"];
您需要初始化字符串。现在,if块中正在执行任何初始化或赋值。编译器正在检测到这一点,并认为它可能从未初始化。
string st = string.Empty;
顺便说一句,在对话中使用姐妹方法TryParse()要安全得多,以确保不会因为无效的格式问题而引发任何意外的异常。如果转换成功,该方法将返回true,这会使其看起来很干净:
if (dt!=null)
{
if(dt.rows.count> 0)
{
st = dt.Rows[3]["timeslot_StartTime"].ToString();
}
}
DateTime dt = DateTime.MinValue;
if (DateTime.TryParse(st, out dt))
{
//was successful and do something here
}