C#试图简化泛型接口的泛型扩展函数
下面是代码,最后一行是我正在做的重点:C#试图简化泛型接口的泛型扩展函数,c#,generics,extension-methods,C#,Generics,Extension Methods,下面是代码,最后一行是我正在做的重点: public interface IHasContext<TContext> { TContext Context {get; set;} } public static class Extensions { public static void ProcessContext<THasContext, TContext>(this THasContext t) where THasContext : IHasCont
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>();
没有
块。可能吗?我应该如何修改代码来实现它?谢谢:)我不明白为什么需要两个通用参数。只需使用一个:
public static class Extensions {
public static void ProcessContext<TContext>(this IHasContext<TContext> t)
where TContext : class {
//...
}
}
这两者之间有一个细微的语义差异。如果类型
SomeClass
是一个struct
,那么您的版本将不会装箱参数t
,而此版本将导致装箱。我不明白为什么需要两个通用参数。只需使用一个:
public static class Extensions {
public static void ProcessContext<TContext>(this IHasContext<TContext> t)
where TContext : class {
//...
}
}
这两者之间有一个细微的语义差异。如果类型
SomeClass
是一个struct
,那么您的版本将不会装箱参数t
,而此版本将导致装箱。Oh!谢谢我无法接受这个想法。谢谢你的帮助!哦谢谢我无法接受这个想法。谢谢你的帮助!
var obj = new SomeClass();
obj.ProcessContext();