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