C# 如何不删除单个特定会话变量?
我在删除会话变量时遇到问题 假设我有30个会话变量…我想删除29个会话变量,但只有一个。我该怎么做?请帮助我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
我尝试了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
很可能比一次删除一个值更有效。