我实施了ActionFilterAttribute
,将SomeClass
映射到SomeOtherClass
。这是构造函数:
public class MapToAttribute : ActionFilterAttribute
{
private Type _typeFrom;
private Type _typeTo;
public int Position { get; set; }
public MapToAttribute(Type typeFrom, Type typeTo, int Position = 0)
{
this.Position = Position;
this._typeFrom = typeFrom;
this._typeTo = typeTo;
}
...
}
目前的方式是:
MapTo(typeof(List<Customer>), typeof(List<CustomerMapper>), 999)
出于美学原因,我宁愿能够做到
MapTo(List<Customer>, List<CustomerMapper>, 999)
我已经尝试过了
public MapToAttribute(object typeFrom, object typeTo, int Position = 0)
{
this.Position = Position;
this._typeFrom = typeof(typeFrom);
this._typeTo = typeof(typeTo);
}
但无济于事,因为Visual Studio会假装typeFrom
和typeTo
未定义。
编辑:Attribute
s不支持使用泛型(否则明显正确,如下所述)。
答案 0 :(得分:2)
您不能将类型用作变量。通常,您可以使用泛型来摆脱typeof
:
public class MapToAttribute<TFrom, TTo> : ActionFilterAttribute
{
private Type _typeFrom;
private Type _typeTo;
public int Position { get; set; }
public MapToAttribute(int Position = 0)
{
this.Position = Position;
this._typeFrom = typeof(TFrom);
this._typeTo = typeof(TTo);
}
...
}
用法:
new MapToAttribute<List<Customer>, List<CustomerMapper>>(999);
<强>问题:强>
C#不允许使用通用属性,因此您会遇到typeof
没有其他办法。
答案 1 :(得分:1)
你做不到。除非使用泛型或typeof,否则不能将类型作为参数传递。 Daniel Hilgarth的解决方案非常棒,但如果您的类要用作属性,则无法使用,因为c#不允许使用泛型属性。