C# - 在声明中设置初始值的下行

Bud*_*Joe 10 .net c# oop instantiation

像这样的课程有什么缺点:

class Example1
{
  protected string UserId = (string)Session["user"];
}
//versus

class Example2
{
  protected string UserId;
  public Example2()
  {
      UserId = (string)Session["user"];
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我总是想设置这个值,那么Example1有什么缺点吗?

更新:
会话["user"]在Global.asax Session_Start中设置.所以如果失败了.无论如何都不应该有效.

kem*_*002 5

你最大的问题是如果protected string UserId = (string)Session["user"];失败了.你无法优雅地降级.通过将它放在构造函数等中.您可以检查会话并确定要执行的操作.

作为一般规则,我只尝试将我知道会成功的值UserId = -1;等等,然后在需要时在代码块中修改它们.你永远不知道什么时候会出现问题,你需要从中恢复.