C#-Warning 2可能的非预期参考比较;得到一个值比较,左侧输入'string'

时间:2016-05-18 08:59:30

标签: c# session

SELECT  *
FROM    [MyTable]
WHERE   ( ( DATEPART(dw, [Time]) + @@DATEFIRST + 6 ) % 7 <> 6
          AND ( ( DATEPART(dw, [Time]) + @@DATEFIRST + 6 ) % 7 <> 5
                OR DATEPART(HOUR, [Time]) < 22
              )
          AND ( ( DATEPART(dw, [Time]) + @@DATEFIRST + 6 ) % 7 <> 0
                OR CAST([Time] AS TIME) >= '22:00'
              )
        );

3 个答案:

答案 0 :(得分:0)

Session["LoginType"]更改为Session["LoginType"].ToString()

答案 1 :(得分:0)

我建议将if - 语句更改为:

if (Session["UserName"] != null && 
     (Session["LoginType"] as string == "Admin" || 
      Session["LoginType"] as string == "Employee")
   )

Session[string key]会返回object。如果您使用object==与某些内容进行比较,则会执行参考比较。字符串文字(例如"Admin")将永远不会像该对象一样具有相同的引用,即使此对象 是一个字符串。

通过将object转换为string,编译器知道它必须调用string的相等方法,它们比较字符串的内容而不是它们的引用

当然,您也可以直接演员((string)Session["LoginType"])或致电ToString()。但是,如果(出于某些奇怪的原因)返回对象是而不是字符串,则第一个将抛出异常。如果(出于某种奇怪的原因)值仍为NullReferenceException,则第二个将抛出null

答案 2 :(得分:0)

您也可以转换为字符串:

(string)Session["LoginType"] == "Admin"

这是在文档Reading Values From Session State

中完成示例的方式