Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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# 如何不删除单个特定会话变量?_C#_Asp.net - Fatal编程技术网

C# 如何不删除单个特定会话变量?

C# 如何不删除单个特定会话变量?,c#,asp.net,C#,Asp.net,我在删除会话变量时遇到问题 假设我有30个会话变量…我想删除29个会话变量,但只有一个。我该怎么做?请帮助我 我尝试了Session.RemoveAll(),它会删除所有会话。但我的要求是删除除一个会话以外的所有会话。我该怎么做?您可以使用会话。Remove使用键从会话集合中删除 您可以在会话集合中循环 for (int i = 0; i < Session.Contents.Count; i++) { var key = Session.Keys[i]; var

我在删除会话变量时遇到问题

假设我有30个会话变量…我想删除29个会话变量,但只有一个。我该怎么做?请帮助我


我尝试了Session.RemoveAll(),它会删除所有会话。但我的要求是删除除一个会话以外的所有会话。我该怎么做?

您可以使用
会话。Remove
使用
键从会话集合中删除

您可以在会话集合中循环

for (int i = 0; i < Session.Contents.Count; i++)
{
      var key = Session.Keys[i];
      var value = Session[i];

      //remove the key except one
      if(key!="youkey")
           Session.Remove(key);

}
for(int i=0;i
编辑1 正如@JoachimIsaksson所建议的

 for (int i = 0; i < Session.Contents.Count; i++)
 {
      var key = Session.Keys[i];
      var value = Session[i];

      //remove the key except one
      if(key!="youkey")
      {
           Session.Remove(key);
           i++;
       }

 }
for(int i=0;i
编辑2 正如@JoachimIsaksson所建议的,我不确定这是否正确

 for (int i = 0; i < Session.Contents.Count; i++)
 {
      var key = Session.Keys[i];
      var value = Session[i];

      //remove the key except one
      if(key!="youkey")
      {
           Session.Remove(key);
           i--;
       }

 }
for(int i=0;i
您可以使用
会话。删除
使用
键从会话集合中删除

您可以在会话集合中循环

for (int i = 0; i < Session.Contents.Count; i++)
{
      var key = Session.Keys[i];
      var value = Session[i];

      //remove the key except one
      if(key!="youkey")
           Session.Remove(key);

}
for(int i=0;i
编辑1 正如@JoachimIsaksson所建议的

 for (int i = 0; i < Session.Contents.Count; i++)
 {
      var key = Session.Keys[i];
      var value = Session[i];

      //remove the key except one
      if(key!="youkey")
      {
           Session.Remove(key);
           i++;
       }

 }
for(int i=0;i
编辑2 正如@JoachimIsaksson所建议的,我不确定这是否正确

 for (int i = 0; i < Session.Contents.Count; i++)
 {
      var key = Session.Keys[i];
      var value = Session[i];

      //remove the key except one
      if(key!="youkey")
      {
           Session.Remove(key);
           i--;
       }

 }
for(int i=0;i
您只需保存要保留的变量,清除所有并将其放回即可

var value = Session["tokeep"]; 
Session.RemoveAll(); 
Session["tokeep"] = value;

您只需保存想要保留的变量,清除所有变量并将其放回即可

var value = Session["tokeep"]; 
Session.RemoveAll(); 
Session["tokeep"] = value;

嗯,如果你删除键
i
,那么
i+1
不会变成
i
并被跳过下一次迭代吗?@JoachimIsaksson这是我的错误,我已经更新了我的答案。希望这是对的。@mason实际上,不是,因为您在迭代集合时修改了集合,所以第一个版本不会删除所有键。例如,如果集合中有
[a b]
,并删除索引0,则将以
[b]
结束,并在位置1继续,该位置结束循环,因为
内容
只有一个条目<代码>b
也就是说,不考虑删除。问题是,删除索引2处的条目并不能保证不会对整个集合的索引重新编号。换句话说,仅仅备份一个位置并继续可能也会跳过项目。嗯,如果你删除键
i
,那么
i+1
不会变成
i
并在下一次迭代中被跳过吗?@JoachimIsaksson这是我的错误,我已经更新了我的答案。希望这是对的。@mason实际上,不是,因为您在迭代集合时修改了集合,所以第一个版本不会删除所有键。例如,如果集合中有
[a b]
,并删除索引0,则将以
[b]
结束,并在位置1继续,该位置结束循环,因为
内容
只有一个条目<代码>b
也就是说,不考虑删除。问题是,删除索引2处的条目并不能保证不会对整个集合的索引重新编号。换言之,仅仅是支持一个职位并继续下去也很可能会跳过一些项目。我首先想到了这一点,但我认为先分配d,然后再分配是不好的。@hȇkhaṝ 它会导致什么问题?:)值本身不会以任何方式被破坏和重新创建。我认为垃圾收集器必须进行内存的d-分配,然后创建新实例。如果我没有错的话。@hȇkhaṝ 只要任何内容(会话或
变量)保留对该值的引用,该值就不会被垃圾收集。
会话
中的某些内部结构可能会被释放到垃圾收集器,但是
移除所有
也很可能比一次移除一个值更有效。我先是这么想的,但我认为先进行d分配,然后再进行分配并不好。@hȇkhaṝ 它会导致什么问题?:)值本身不会以任何方式被破坏和重新创建。我认为垃圾收集器必须进行内存的d-分配,然后创建新实例。如果我没有错的话。@hȇkhaṝ 只要任何内容(会话或
变量)保留对该值的引用,该值就不会被垃圾收集。
会话
中的某些内部结构可能会被释放到垃圾收集器,但是
RemoveAll
很可能比一次删除一个值更有效。