奇怪的"未将对象引用设置到对象的实例。"问题?

ayun00 2014-07-01 10:03:00
最近程序老抱 " Stopped working" 错误, 看说明 "问题签名 09: System.NullReferenceException"
然后在程序try日志中 找到大量的 System.NullReferenceException: 未将对象引用设置到对象的实例。都是在对 List<T>对象做Find和FirstOrDefault的时候出现的
但是我在本地测试的时候, 每一个对象都有判断是否为null,
我的代码如下
代码一
lock (padlock)
{
if (AppConfig.MyUser!=null && AppConfig.MyUser.Count>0)
{
u = AppConfig.MyUser.FirstOrDefault((x) => x.wapper.Myname == name);
}
}
错误提示一
在 System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable`1 source, Func`2 predicate)\r\n

代码二
if (AppConfig.MyUser!=null && AppConfig.MyUser.Count>0)
{
User u = AppConfig.MyUser.Find(x => x.wapper.Myname == Wapper.Myname);
}

错误提示二
在 System.Collections.Generic.List`1.Find(Predicate`1 match)

请问是那里出了问题?

...全文
806 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ayun00 2014-09-27
  • 打赏
  • 举报
回复
引用 6 楼 duanzi_peng 的回复:
[quote=引用 5 楼 ayun00 的回复:] 增加了一个 x.wapper==null 的判断 就没有出现问题了, 很奇怪 x.wapper 正常情况下是不会出现为null的情况. 另外 lock (padlock) { if (AppConfig.MyUser!=null && AppConfig.MyUser.Count>0) { u = AppConfig.MyUser.FirstOrDefault((x) => x.wapper.Myname == name); } } AppConfig.MyUser.Remove(u); 老是出现 "集合已修改;可能无法执行枚举操作。"的问题.
AppConfig.MyUser.Remove(u); 这句话的原因。[/quote] 我都锁住了 怎么还会出现这个错误呢?
linfangshu1 2014-08-19
  • 打赏
  • 举报
回复
如果用first的话如果为空的话会报错但是使用FirstOrDefault 就算为空的话也不会出现错误啊
exception92 2014-07-15
  • 打赏
  • 举报
回复
引用 5 楼 ayun00 的回复:
增加了一个 x.wapper==null 的判断 就没有出现问题了, 很奇怪 x.wapper 正常情况下是不会出现为null的情况. 另外 lock (padlock) { if (AppConfig.MyUser!=null && AppConfig.MyUser.Count>0) { u = AppConfig.MyUser.FirstOrDefault((x) => x.wapper.Myname == name); } } AppConfig.MyUser.Remove(u); 老是出现 "集合已修改;可能无法执行枚举操作。"的问题.
AppConfig.MyUser.Remove(u); 这句话的原因。
ayun00 2014-07-14
  • 打赏
  • 举报
回复
增加了一个 x.wapper==null 的判断 就没有出现问题了, 很奇怪 x.wapper 正常情况下是不会出现为null的情况. 另外 lock (padlock) { if (AppConfig.MyUser!=null && AppConfig.MyUser.Count>0) { u = AppConfig.MyUser.FirstOrDefault((x) => x.wapper.Myname == name); } } AppConfig.MyUser.Remove(u); 老是出现 "集合已修改;可能无法执行枚举操作。"的问题.
romanchaos 2014-07-01
  • 打赏
  • 举报
回复
AppConfig(没什么可能)或者 x.wapper(可能最大)或者Wapper为null
请叫我官人 2014-07-01
  • 打赏
  • 举报
回复
u = AppConfig.MyUser.FirstOrDefault((x) => x.wapper.Myname == name);

你这个u肯定在后面的程序中用到了

当FirstOrDefault()这个方法没有找到东西的时候返回的是null对象
rtdb 2014-07-01
  • 打赏
  • 举报
回复
也可能 x.wapper == null
exception92 2014-07-01
  • 打赏
  • 举报
回复
可以打断点不,先把lock去掉,调试。
Date 对象属性constructor 返回对创建此对象的 Date 函数的引用。prototype 使您有能力向对象添加属性和方法。Date 对象方法getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。getFullYear() 从 Date 对象以四位数字返回年份。getHours() 返回 Date 对象的小时 (0 ~ 23)。getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。getMonth() 从 Date 对象返回月份 (0 ~ 11)。getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。getTime() 返回 1970 年 1 月 1 日至今的毫秒数。getTimezoneOffset() 返回本地时间与格林威治标准时间 (GMT) 的分钟差。getUTCDate() 根据世界时从 Date 对象返回月中的一天 (1 ~ 31)。getUTCDay() 根据世界时从 Date 对象返回周中的一天 (0 ~ 6)。getUTCFullYear() 根据世界时从 Date 对象返回四位数的年份。getUTCHours() 根据世界时返回 Date 对象的小时 (0 ~ 23)。getUTCMilliseconds() 根据世界时返回 Date 对象的毫秒(0 ~ 999)。getUTCMinutes() 根据世界时返回 Date 对象的分钟 (0 ~ 59)。getUTCMonth() 根据世界时从 Date 对象返回月份 (0 ~ 11)。getUTCSeconds() 根据世界时返回 Date 对象的秒钟 (0 ~ 59)。getYear() 已废弃。 请使用 getFullYear() 方法代替。parse() 返回1970年1月1日午夜到指定日期(字符串)的毫秒数。setDate() 设置 Date 对象中月的某一天 (1 ~ 31)。setFullYear() 设置 Date 对象中的年份(四位数字)。setHours() 设置 Date 对象中的小时 (0 ~ 23)。setMilliseconds() 设置 Date 对象中的毫秒 (0 ~ 999)。setMinutes() 设置 Date 对象中的分钟 (0 ~ 59)。setMonth() 设置 Date 对象中月份 (0 ~ 11)。setSeconds() 设置 Date 对象中的秒钟 (0 ~ 59)。setTime() setTime() 方法以毫秒设置 Date 对象。setUTCDate() 根据世界时设置 Date 对象中月份的一天 (1 ~ 31)。setUTCFullYear() 根据世界时设置 Date 对象中的年份(四位数字)。setUTCHours() 根据世界时设置 Date 对象中的小时 (0 ~ 23)。setUTCMilliseconds() 根据世界时设置 Date 对象中的毫秒 (0 ~ 999)。setUTCMinutes() 根据世界时设置 Date 对象中的分钟 (0 ~ 59)。setUTCMonth() 根据世界时设置 Date 对象中的月份 (0 ~ 11)。setUTCSeconds() setUTCSeconds() 方法用于根据世界时 (UTC) 设置指定时间的秒字段。setYear() 已废弃。请使用 setFullYear() 方法代替。toDateString() 把 Date 对象的日期部分转换为字符串。toGMTString() 已废弃。请使用 toUTCString() 方法代替。toISOString() 使用 ISO 标准返回字符串的日期格式。toJSON() 以 JSON 数据格式返回日期字符串。toLocaleDateString() 根据本地时间格式,把 Date 对象的日期部分转换为字符串。toLocaleTimeString() 根据本地时间格式,把 Date 对象的时间部分转换为字符串。toLocaleString() 据本地时间格式,把 Date 对象转换为字符串。toString() 把 Date 对象转换为字符串。toTimeString() 把 Date 对象的时间部分转换为字符串。toUTCString() 根据世界时,把 Date 对象转换为字符串。UTC() 根据世界时返回 1970 年 1 月 1 日 到指定日期的毫秒数。valueOf() 返回 Date 对象的原始值。

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧