[英]C# trying to simplify Generic Extension Function for Generic Typed Interface
这是代码,最后一行是我正在做的事情的重点:
public interface IHasContext<TContext> {
TContext Context {get; set;}
}
public static class Extensions {
public static void ProcessContext<THasContext, TContext>(this THasContext t)
where THasContext : IHasContext<TContext>
where TContext : class {
//...
}
}
public class SomeClassContext {/*...*/}
public class SomeClass : IHasContext<SomeClassContext> {
public SomeClassContext Context {get; set;}
//...
}
//now in a function I can do:
objSomeClass.ProcessContext<SomeClass, SomeClassContext>();
你看,因为SomeClass
已经知道它包含<SomeClassContext>
,所以我想这样做:
objSomeClass.ProcessContext();
没有<SomeClass, SomeClassContext>
块。 可能吗? 我应该如何改变我的代码来实现它? 谢谢 :)
我不明白为什么你需要两个通用参数。 只需使用一个:
public static class Extensions {
public static void ProcessContext<TContext>(this IHasContext<TContext> t)
where TContext : class {
//...
}
}
然后推理应该工作得很好:
var obj = new SomeClass();
obj.ProcessContext();
两者之间存在一个轻微的语义差异。 如果类型SomeClass
是一个struct
那么你的版本不会包装参数t
,而这个版本将导致装箱。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.