如何在代码中缓存该变量?

时间:2019-01-22 17:36:05

标签: c# asp.net-mvc

我已经从另一个开发人员那里继承了一些MVC代码。 有一个称为DataCache的静态类,其中包含许多类似以下的方法:

public static IEnumerable<EntityFieldsList> UserGroupsFields()
{
    if (Cache["userGroupFields"] is List<EntityFieldsList> userGroupFields) return userGroupFields;

    ...some code...

    Cache.Set("userGroupFields", userGroupFields, policy);
    return userGroupFields;
}

我不知道第一行的工作方式。

如何将变量userGroupFields声明为IS比较的一部分?

然后它具有如何在同一行上立即返回的值?肯定会一直是null吗?

3 个答案:

答案 0 :(得分:0)

if (Cache["userGroupFields"] is List<EntityFieldsList> userGroupFields)

用英语,如果Cache["userGroupFields"]的返回值为List<EntityFieldsList>,则定义List<EntityFieldsList> userGroupFields

它使用is类型模式来提供类型的IComparable.CompareTo(Object)方法的实现。

Reference


如果没有名为userGroupFields的全局静态变量,则代码的最后一部分肯定无法正常工作。 Check This

答案 1 :(得分:0)

上一个答案在某种程度上是正确的,但实际上IS运算符确实声明了变量,无论条件是否为真。

请参见此处的示例,尝试交换前两行 https://dotnetfiddle.net/biC0ks

答案 2 :(得分:0)

这是is关键字的所谓type pattern,其格式为:

expr is type varname 
  

其中 expr 是一个表达式,其计算结果为某种类型的实例, type 是要将expr的结果转换为该类型的名称,并且如果is测试为true,则 varname 是_expr的结果转换为的对象。
  如果 expr 不为null,并且以下任一条件为true,则is表达式为true:

     
      
  • expr 是与 type 相同类型的实例。
  •   
  • expr是从 type 派生的类型的实例。换句话说,可以将 expr 的结果转换为 type 的实例。
  •   
  • expr 的编译时类型为 type 的基类,而 expr 的运行时类型为 type 或从 type 派生。变量的编译时类型是其声明中定义的变量类型。变量的运行时类型是分配给该变量的实例的类型。
  •   
  • expr 是实现 type 接口的类型的实例。
  •   
     

如果 expr 为true且is与if语句一起使用,则会分配 varname 且仅在if语句内具有局部范围。

(重点是我的)