【问题标题】:What are the usages of a generic method in C# without using type argument(<T>) as input parameters or return value?不使用类型参数(<T>)作为输入参数或返回值的C#中泛型方法的用途是什么?
【发布时间】:2020-08-24 14:27:21
【问题描述】:

C#中不使用类型实参作为输入参数或返回值的泛型方法有什么用处?

private void method1<T>()

我刚刚在 ASP.NET Core 代码中进行了探索,看到他们在很多地方都使用了这种泛型方法。

例如在 UseMiddlewareExtensions 中的 UseMiddleware。

public static IApplicationBuilder UseMiddleware<TMiddleware>(this IApplicationBuilder app,
    params object[] args)
{
    return app.UseMiddleware(typeof(TMiddleware), args);
}

这是一种常见的模式还是我错了?

【问题讨论】:

  • 我不太清楚你的问题是什么。你能澄清一下吗?你问如何拨打UseMiddleware?您展示的是IApplicationBuilder 接口的扩展方法,因此该方法将显示为实现该接口的任何类型的成员。
  • 或者您可能在问“为什么泛型方法可以与非泛型方法同名”?目前尚不清楚您在哪里显示“C# 中的泛型方法而不使用类型参数作为输入参数”的示例...
  • 我会说这只是惯用语,它读起来更自然。它还保存了typeof
  • 这是一个例子:private void method1&lt;T&gt;() 我没有使用 T 作为返回值或像这样的输入参数类型private T method1&lt;T&gt;(T a)
  • 但它一种输入参数...具体来说,您是在传入类型本身。当然,你不能以那种形式使用它,因此需要 typeof 调用它。

标签: c# generics methods


【解决方案1】:

这只是一种传入类型的方式,而不是添加额外的类型参数。完全一样:

public static IApplicationBuilder UseMiddleware(this IApplicationBuilder app,
    params object[] args,
    Type middlewhereType)
{
    return app.UseMiddleware(middlewhereType, args);
}

这只是风格选择的问题,使用哪一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多