object转List,在断点监视时有值,实际运行是=null,这是为什么

张天星 2020-12-27 07:24:09

[TestMethod()]
public void Object转List测试()
{
List<int> test = new List<int> { 1, 2, 3, 4, 6 };
var obj = (object)test;
//运行的时候,List=null,在断点监视的时候,(obj as IEnumerable<object>)有值
var list = obj as IEnumerable<object>;
}

从图片上可以看出来,赋值之后的List是null.
但是,断点监视的时候,obj as IEnumerable<object>有值。。。
这是为啥啊。。
...全文
2249 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
datafansbj 2020-12-28
  • 打赏
  • 举报
回复
list 在赋值后,再也没有被使用过,编译器认为无用,给优化掉了。
后面加上类似 if (list == null) 的语句就可以了。
Denuin多啦咧梦 2020-12-28
  • 打赏
  • 举报
回复
引用 2 楼 Denuin 的回复:

var list = obj as IEnumerable<int>;
这个确实可以,但是List里面有可能是string的,所以我才用object来通用。[/quote] 直接强转:

 var list = (IEnumerable) obj;
∽油条á 2020-12-28
  • 打赏
  • 举报
回复
引用 6 楼 datafansbj 的回复:
[quote=引用 5 楼 ∽油条á 的回复:][quote=引用 3 楼 datafansbj 的回复:]list 在赋值后,再也没有被使用过,编译器认为无用,给优化掉了。 后面加上类似 if (list == null) 的语句就可以了。
你是认真的吗?[/quote] 绝对认真,不信自己测试。默认条件下编译器视无用的语句为废话,不会编译它,在 debug 模式下只能显示初始的值(null)。当然你可以修改编译配置参数,不进行优化。[/quote] 来解释一下这是为啥?
datafansbj 2020-12-28
  • 打赏
  • 举报
回复
另外注意:
List a = List<string>;
var obj1 = a as object;
var obj2 = a as IEnumerable<string>;
var obj3 = a as IEnumerable<object>;

详见“协变”。
datafansbj 2020-12-28
  • 打赏
  • 举报
回复
引用 5 楼 ∽油条á 的回复:
[quote=引用 3 楼 datafansbj 的回复:]list 在赋值后,再也没有被使用过,编译器认为无用,给优化掉了。
后面加上类似 if (list == null) 的语句就可以了。


你是认真的吗?[/quote]

绝对认真,不信自己测试。默认条件下编译器视无用的语句为废话,不会编译它,在 debug 模式下只能显示初始的值(null)。当然你可以修改编译配置参数,不进行优化。
∽油条á 2020-12-28
  • 打赏
  • 举报
回复
引用 3 楼 datafansbj 的回复:
list 在赋值后,再也没有被使用过,编译器认为无用,给优化掉了。 后面加上类似 if (list == null) 的语句就可以了。
你是认真的吗?
张天星 2020-12-28
  • 打赏
  • 举报
回复
引用 3 楼 datafansbj 的回复:
list 在赋值后,再也没有被使用过,编译器认为无用,给优化掉了。 后面加上类似 if (list == null) 的语句就可以了。
不是优化的原因,方法都还没有运行完
引用 1 楼 xiaoliangoo 的回复:
可能是局部变量生命周期
方法都没走完,局部变量还没结束。
引用 2 楼 Denuin 的回复:

var list = obj as IEnumerable<int>;
这个确实可以,但是List里面有可能是string的,所以我才用object来通用。
Denuin多啦咧梦 2020-12-27
  • 打赏
  • 举报
回复

var list = obj as IEnumerable<int>;
xiaoliangoo 2020-12-27
  • 打赏
  • 举报
回复
可能是局部变量生命周期

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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