问(string)session["user"]和session["user"].tostring()的区别

JackLeiMM 2009-05-22 11:09:44
在一个项目中
session["user"].tostring();在我的机器上合适,在别人的电脑上报未将对象引用带实例的错误;
而改为(string)session["user"]就完全没有错了~
请问这两个 有什么区别。
还有,为什么会出现这样的错误!
...全文
290 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
我姓区不姓区 2009-05-23
  • 打赏
  • 举报
回复
(string)Session["user"]这种形式称为类型强制转换,
Session["user"].ToString()这是调用object类的ToString()方法
如果Session["user"]不为空,且都为引用类型的时候,两者效果是一样的,注意也只是效果一样,内部的处理机制是不一样的,如果Session["user"]的值是值类型的话,那么前者就会有装箱的操作,后者则没有
如果Session["user"]为空即null,则前者不会出异常,因为null经过类型强制转换为string类型,得到的还是null,而后者由于Session["user"]为null,调用它的方法必然会抛出“未将对象引用设置到对象实例”的异常
yongyinmg 2009-05-23
  • 打赏
  • 举报
回复
学习~
jueyingfd 2009-05-23
  • 打赏
  • 举报
回复
当session为空时
前者相当于 string a = null;
后者相当于 string b = null.ToString();
由于null没有任何方法可调用,会提示未将对象引用到实例
说的挺好,我在补充两句,
string a = (string)Session[ "user" ];
string b = Session[ "user" ].ToString();
第一种情况是强制转换,这都得看情况而定。
zealot1021 2009-05-23
  • 打赏
  • 举报
回复
来晚一步啊..
wangxinli_nissan 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 CsToD 的回复:]

C# code
string a = (string)Session[ "user" ];
string b = Session[ "user" ].ToString();

当session为空时
前者相当于 string a = null;
后者相当于 string b = null.ToString();
由于null没有任何方法可调用,会提示未将对象引用到实例
[/Quote]
1楼正解,在用Session[ "user" ]可能为NULL,所以以防有错我建议在写代码时尽量的对可能出现的多种情况,多做判断,就象你上面的代码可以添加一个if语句做个判断这样的话上面的两种情况用那一个都是可以的
代码如下
string a ="";
if(Session[ "user" ]!=null)
{
Session[ "user" ].ToString();
}

string a = Session[ "user" ]== null ? "" :Session[ "user" ].ToString();
CsToD 2009-05-23
  • 打赏
  • 举报
回复

string a = (string)value;
这个是强制类型转换,也就是说value.GetType一定是String,否则无法转换
比如value=23,或者value=new Button();
显然不能用强制转换,
只有object value="ok",这样才可以转换。

而string a=value.ToString(),这是调用value的ToString方法,
无论value.GetType是什么类型,它都可以工作,但是如果value=null的,当然就抛出了异常

最好的方法是:
string.Concat(object value);无论value是什么,是否为空,它都能正常工作,该函数的实现为:

string Concat(object value)
{
if(value==null)
return String.Empty;
return value.ToString();
}
所以如果是object value=null;
调用string.Concat(value)就会返回空串,而不会抛出异常。
amandag 2009-05-23
  • 打赏
  • 举报
回复
一楼说的蛮详尽的

一般而言最好先判断Session是否为null,然后再进行后续的操作
wuyq11 2009-05-23
  • 打赏
  • 举报
回复
一种是强制转换。一种是对象转换
可用session["user"]==null?"":session["user"].tostring();
判断
ws_hgo 2009-05-23
  • 打赏
  • 举报
回复
很简单
session["user"]取出来的值
如果没有的话值就为null
此时你在用session["user"].tostring()
此时根本就没有值
会报这个错误“未将对象引用设置到对象实例”
所以要先判断下
willwayer 2009-05-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kkun_3yue3 的回复:]
C# code
string a = (string)Session[ "user" ];
string b = Session[ "user" ].ToString();




当session为空时
前者相当于 string a = null;
后者相当于 string b = null.ToString();
由于null没有任何方法可调用,会提示未将对象引用到实例
[/Quote]
学习了
renjuwht 2009-05-23
  • 打赏
  • 举报
回复
学习了
hubofly 2009-05-23
  • 打赏
  • 举报
回复
恩,楼主上的说透彻的

其实 ToString 是一个方法,当你调用方法的时候而参数是null你又去使用的时候,就会异常“未将对象引用到实例”
而(string)只是类型强转, 你 的Session[ "user" ] 这个是null 强转成string的时候 string 类型也可以为null的

但是你tostring的时候 就会有“未将对象引用到实例”
kkun_3yue3 2009-05-22
  • 打赏
  • 举报
回复

string a = (string)Session[ "user" ];
string b = Session[ "user" ].ToString();


当session为空时
前者相当于 string a = null;
后者相当于 string b = null.ToString();
由于null没有任何方法可调用,会提示未将对象引用到实例

110,566

社区成员

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

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

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