Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用“as”强制转换对象仍会出现错误_C#_Asp.net - Fatal编程技术网

C# 使用“as”强制转换对象仍会出现错误

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,并将其存储在会话中

我这样写:

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]无法工作,那么铸态转换的有效性就没有意义了。用不同的措词,问题不是你的问题最初暗示的问题,而是会话问题。