gpt4 book ai didi

C# - 将 SomeClass 传递给函数而不是 typeof(SomeClass)

转载 作者:行者123 更新时间:2023-11-30 16:19:50 27 4
gpt4 key购买 nike

我已经实现了一个 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 会假装 typeFromtypeTo 未定义。


编辑:Attribute 不支持泛型的使用(否则显然是正确的,如下所述)。

最佳答案

您不能将类型用作变量。通常,您可以使用泛型来摆脱 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
没有别的办法。

关于C# - 将 SomeClass 传递给函数而不是 typeof(SomeClass),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933381/

27 4 0
文章推荐: javascript - AngularJS:如何更改使用 ng-repeat 渲染的按钮文本 onclick
文章推荐: javascript - 我如何捕获在我的容器