C# 使用“as”强制转换对象仍会出现错误
我有一个对象MyObject,并将其存储在会话中 我这样写:C# 使用“as”强制转换对象仍会出现错误,c#,asp.net,C#,Asp.net,我有一个对象MyObject,并将其存储在会话中 我这样写: MyObject TheObject = HttpContext.Current.Session["TheObjInSession"] as MyObject; 我得到的错误对象引用未设置为对象的实例为什么?我认为,如果您使用as-to-cast,并且cast生成一个错误,那么它只返回null,并且继续执行。我该怎么重写这行 谢谢你的建议 PS:产生此错误的原因是我删除了启用会话行[WebMethodEnableSession=tr
MyObject TheObject = HttpContext.Current.Session["TheObjInSession"] as MyObject;
我得到的错误对象引用未设置为对象的实例为什么?我认为,如果您使用as-to-cast,并且cast生成一个错误,那么它只返回null,并且继续执行。我该怎么重写这行
谢谢你的建议
PS:产生此错误的原因是我删除了启用会话行[WebMethodEnableSession=true],我会将该行放回,但我希望确保在出现任何错误时不会出现异常。会话触发它的可能性是它不存在或尚未建立。如果尚未将类标记为管理会话,则这在处理程序中很常见 是的,您是对的,因为您将尝试强制转换或导致空值,但这只是假设您的左手对象是有效的,并且有一个值可以尝试强制转换 更深入地解释一下:
HttpContext.Current.Session["Foo"]
HttpContext Probably fine
HttpContext.Current May not exist
HttpContext.Current.Session Most likely cause (no access to session)
如果会话本身不存在,则无法从会话元素中引用密钥。会话触发它的可能性是它不存在或尚未建立。如果尚未将类标记为管理会话,则这在处理程序中很常见
是的,您是对的,因为您将尝试强制转换或导致空值,但这只是假设您的左手对象是有效的,并且有一个值可以尝试强制转换
更深入地解释一下:
HttpContext.Current.Session["Foo"]
HttpContext Probably fine
HttpContext.Current May not exist
HttpContext.Current.Session Most likely cause (no access to session)
如果会话本身不存在,则从会话元素中引用密钥基本上是不可能的。产生此错误是因为我删除了启用会话行[WebMethodEnableSession=true]。当然,我会把这行放回去,但为什么as操作符会抛出错误?@frenchie:如果你替换WebMethodAttribute并允许处理程序访问,你应该会没事的。虽然我坚信熟能生巧;或者基本上自己试试看。此外,如果这是一个Web服务,您应该可以只引用属性会话,而不是尝试访问HttpContext的静态成员。我希望在会话为null或不工作时确保代码安全。在本例中,有一个代码分支可以很好地退出Web服务。但是现在,如果强制转换失败,它只会抛出一个异常。你的意思是什么,但这只是假设你的左手对象是有效的,并且有一个值可以尝试强制转换。@frenchie:看看如何处理空会话。我的意思是,只有当它能够首先检索到一个值时,as才起作用。如果无法获取值,即会话为空,因此会话[key]无法工作,那么铸态转换的有效性就没有意义了。换言之,问题并不是您的问题最初暗示的问题,而是会话问题。产生错误的原因是我删除了启用会话行[WebMethodEnableSession=true]。当然,我会把这行放回去,但为什么as操作符会抛出错误?@frenchie:如果你替换WebMethodAttribute并允许处理程序访问,你应该会没事的。虽然我坚信熟能生巧;或者基本上自己试试看。此外,如果这是一个Web服务,您应该可以只引用属性会话,而不是尝试访问HttpContext的静态成员。我希望在会话为null或不工作时确保代码安全。在本例中,有一个代码分支可以很好地退出Web服务。但是现在,如果强制转换失败,它只会抛出一个异常。你的意思是什么,但这只是假设你的左手对象是有效的,并且有一个值可以尝试强制转换。@frenchie:看看如何处理空会话。我的意思是,只有当它能够首先检索到一个值时,as才起作用。如果无法获取值,即会话为空,因此会话[key]无法工作,那么铸态转换的有效性就没有意义了。用不同的措词,问题不是你的问题最初暗示的问题,而是会话问题。