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
如何创建一个行为类似于会话[]集合的集合?C#_C#_Asp.net_Generics - Fatal编程技术网

如何创建一个行为类似于会话[]集合的集合?C#

如何创建一个行为类似于会话[]集合的集合?C#,c#,asp.net,generics,C#,Asp.net,Generics,我迫切需要镜像ASP.NET中会话集合的行为(在检索项目时的行为)。我在这上面花了很长时间,但到目前为止什么都没有得到 会话就像一个字典,不同的是,如果您访问一个会话,并且该值不存在,那么您会得到null,而不是抛出异常。这就是我需要复制的全部内容 我尝试重写索引器以添加空检查,但它引发堆栈溢出异常: public class CriteriaCollection : Dictionary<string, object> { private object GetData(st

我迫切需要镜像ASP.NET中会话集合的行为(在检索项目时的行为)。我在这上面花了很长时间,但到目前为止什么都没有得到

会话就像一个字典,不同的是,如果您访问一个会话,并且该值不存在,那么您会得到
null
,而不是抛出异常。这就是我需要复制的全部内容

我尝试重写索引器以添加空检查,但它引发堆栈溢出异常:

public class CriteriaCollection : Dictionary<string, object>
{
    private object GetData(string key)
    {
        object value = null;
        if (this.ContainsKey(key))
        {
            value = this[key];
        }
        return value;
    }

    private void SetData(string key, object value)
    {
        this[key] = value;
    }

    public new object this[string key]
    {
        get { return GetData(key); }
        set { SetData(key, value); }
    }
}
公共类标准集合:字典
{
私有对象GetData(字符串键)
{
对象值=空;
如果(本文件包含密钥))
{
值=此[键];
}
返回值;
}
私有void SetData(字符串键、对象值)
{
此[键]=值;
}
公共新对象此[字符串键]
{
获取{return GetData(key);}
set{SetData(键,值);}
}
}

由于您已经创建了自己的索引器,因此需要在自己的代码中调用旧的索引器


用代码中的
base[key]
替换
this[key]

我是否也应该使用base.ContainsKey?还是没关系?@NickG
ContainsKey
应该可以正常工作,您没有覆盖它或创建新版本,因此
this
base
版本是相同的。@Silvermind-不,我不能,因为值只能是NameValueCollection中的字符串。我需要其他类型(如int)。@Silvermind,但允许重复键-这并不理想。好的,我删除了我的注释。