今天写了这样一行代码:

LcName[0] = (string.IsNullOrEmpty(i.JD1Name.Trim()) ? "空" : i.JD1Name.Trim());

本意是当i.JD1Name(数据库字段)为空或者null值得时候返回“空”,如果不是null值就返回这个字段的数据,

可是运行的时候每当i.JD1Name为空的时候就报错,说使用的对象没有实例化。

开始搞晕了,后来仔细一看不禁哑然失笑,,

学过编译原理的朋友都知道,一个运算表达式,从外层运算到里层运算入栈,然后再逐层出栈计算,

在上面的表达式中,在栈顶的是Trim()运算,运算数就是i.JD1Name,所以,当i.JD1Name是null值得时候

首先会参与一次运算,系统自然就报错了,这个时候IsNullOrEmpty()函数根本就没有起作用。

后来改成这样就没有问题了:

LcName[0] = (string.IsNullOrEmpty(i.JD1Name) ? "空" : i.JD1Name.Trim());

哈哈,随意的习惯害人啊,至少耽误了我不少时间。

今天特做个笔记,低级错误,大侠们别笑哦。