我有一个请求属性,我正在装饰一些服务,但由于其中发生了一些逻辑,我需要将泛型类型传递给它。看起来像这样:
[SomeAttribute(typeof(MyClass))]
这很有效,但如果我做一些事情,例如......
[SomeAttribute<MyClass>]
...我会收到“注释不能通用”编译时错误。
在我的属性执行逻辑中,我需要执行以下操作:
someClass.doSomething<MyClass>(someString);
所以,我的问题是......
- 我可以将
MyClass
转换为某种形式的T
以便我可以这样使用它吗? - 是否有其他方法可以在属性中传递
T
而不会出现编译错误?
非常感谢!
最佳答案
正如错误消息所示,.NET 注释不能是通用的,因此您只能传入后期绑定(bind)的 Type
。从后期绑定(bind)类型调用泛型方法的唯一方法是使用反射,例如:
var mi = typeof(MyClass).GetMethod("doSomething");
var genericMi = mi.MakeGenericMethod(typeof(MyAttributeType));
var doSomethingFn = (Func<string, object>) genericMi.CreateDelegate(
typeof(Func<string, object>));
然后您可以缓存并调用通用方法的已编译委托(delegate),该方法采用字符串
并返回对象
,例如:
object response = doSomethingFn(someString);
关于c# - 在 ServiceStack 请求过滤器上传递/公开 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815174/