【问题标题】:How to not specify the type argument in a generic method when the required argument is null?当所需参数为空时,如何不在泛型方法中指定类型参数?
【发布时间】:2013-07-17 15:17:55
【问题描述】:

我有一个方法:

public HttpRequestMessage CreateRequest<T>(T genericObject = default(T))
{
    ...
    if (!Equals(genericObject, default(T)))
    ...
}

我可以这样称呼它:

var request = CreateRequest<int>();

鉴于我实际上并没有使用默认类型(我希望它默认设置为 null),当我调用时如何停止将泛型类型定义为 int(或任何其他类型)方法?

编辑 关键是,我通常确实需要指定类型并使用参数。但是有时我不需要使用参数,我希望将其设置为 Null 或零,而不是在上面的示例中编写像“int”这样的随机类型

【问题讨论】:

  • 真的不清楚你的意思 - 编译器需要 一些 指示 T 应该是什么...
  • null 不是类型。您将需要指定您希望该方法返回的内容或编写具有某种返回类型的非泛型方法。

标签: c# generics methods arguments default


【解决方案1】:

你不能,因为是你方法的签名。

您可以创建另一个没有任何通用参数的方法,因此您可以这样调用它:

var request = CreateRequest();

【讨论】:

  • 这是正确答案!泛型方法总是需要对象类型引用。如果为 null 则表示不需要它,那么您需要一个非通用方法。
  • 重点是,我通常确实需要指定类型并使用参数。但是有时我不需要使用该参数,我希望将其设置为 Null 或零,而不是在上面的示例中编写像“int”这样的随机类型。
  • @AntonJ:这是架构上的决定,所以请计算一下您使用和不使用参数的频率,以及添加或不添加没有任何通用参数的方法。这一切都取决于您的方便。
【解决方案2】:

我不认为你可以。对于泛型函数,您要么必须指定泛型参数,要么必须传递可以从中推断出泛型参数的东西。

要绕过它,您可以编写一个非泛型包装器。

【讨论】:

    猜你喜欢
    • 2011-02-04
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 1970-01-01
    相关资源
    最近更新 更多