C#-将SomeClass传递给函数,而不是typeof(SomeClass)
本文关键字:SomeClass typeof 函数 C#- | 更新日期: 2023-09-27 18:00:07
我已经实现了一个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
不支持使用Generics。
不能将类型用作变量。一般来说,您可以使用泛型来摆脱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
没有其他办法。
您不能这样做。除非使用泛型或typeof,否则类型不能作为参数传递。Daniel Hilgarth的解决方案很好,但如果您的类打算用作属性,则不会起作用,因为c#不允许使用泛型属性。