C# 我该如何把两个类似口授的课程组合在一起?

C# 我该如何把两个类似口授的课程组合在一起?,c#,class,C#,Class,我想将HttpContext.Current.Request和HttpContext.Current.Session合并成一个类 基本上我想写col[“key”];让它检查其中一个是否存在密钥,如果不存在,则检查另一个 好吧,他们没有共享一个接口(我用“转到定义”环顾四周,但我很糟糕)。如何编写一个可以将这两种类型都作为参数的类?我试着编写一个接口,但没有成功,因为类没有从它们继承。我尝试分配对象o=请求;然后写入对象o2=o[“键”];但这也导致了编译错误 我肯定这很容易做到,但我不知道怎么做

我想将HttpContext.Current.Request和HttpContext.Current.Session合并成一个类

基本上我想写col[“key”];让它检查其中一个是否存在密钥,如果不存在,则检查另一个

好吧,他们没有共享一个接口(我用“转到定义”环顾四周,但我很糟糕)。如何编写一个可以将这两种类型都作为参数的类?我试着编写一个接口,但没有成功,因为类没有从它们继承。我尝试分配对象o=请求;然后写入对象o2=o[“键”];但这也导致了编译错误


我肯定这很容易做到,但我不知道怎么做。

扩展方法如何?例如:

public class RequestOrSession
{
    public object this[string key]
    {
        get
        {
            HttpContext context = HttpContext.Current;
            if (context == null)
            {
                throw new InvalidOperationException("Where's the HttpContext?");
            }

            // if the same key exists in Request and Session
            // then Request will currently be given priority
            return context.Request[key] ?? context.Session[key];
        }
    }
}
public static object Get(this HttpContext context, string key)
{
    return context.Request[key] ?? context.Session[key];
}
现在你可以这样使用它了

HttpContext.Current.Get(key);

扩展方法怎么样?例如:

public static object Get(this HttpContext context, string key)
{
    return context.Request[key] ?? context.Session[key];
}
现在你可以这样使用它了

HttpContext.Current.Get(key);

HttpRequest有一个索引器可以执行此操作,但不用于会话-虽然速度很慢(来自反射程序的代码):


这不是一个真正的答案,只是一个观察。由于它包含一个代码示例,我没有将其作为注释使用。

HttpRequest有一个索引器可以执行此操作,但不用于会话-虽然速度很慢(来自reflector的代码):


这不是一个真正的答案,只是一个观察。因为它包含一个代码示例,所以我没有将其作为评论。

选民是否愿意留下评论?这不正是OP所要求的吗?下层选民愿意留下评论吗?这不正是OP要求的吗?很好的解决方案。我可能会想一个更好的方法名,而不是Get Through!很好的解决方案。我可能会想一个更好的方法名,而不是Get Through!