我可以定义一个只接受基本类型的方法吗?

Onl*_*ind 2 c# generics primitive-types type-constraints

我想创建一个只接受基本类型的构造函数,我该怎么做?

像这个例子:

public Test(PrimitiveType type)
{

}
Run Code Online (Sandbox Code Playgroud)

我需要在构造函数中执行它并且它是可选的,所以我想创建一个无参数构造函数和带参数的构造函数.

Ale*_*kin 6

根据您想要实现的目标,您可能希望查看所谓的"可转换类型",例如实现IConvertible接口的类型,具体如下:

  • Boolean,
  • SByte,
  • Byte,
  • Int16,
  • UInt16,
  • Int32,
  • UInt32,
  • Int64,
  • UInt64,
  • Single,
  • Double,
  • Decimal,
  • DateTime,
  • Char,和
  • String.

因此,正如您所看到的,这几乎涵盖了您希望使用原始类型实现的内容.

所以,通过编写这样的方法

public void Test(IConvertible primitive)
{
   if (primitive is Double) ....
   if (primitive is String) ....
}
Run Code Online (Sandbox Code Playgroud)

您将输入类型限制为以下(无结构等).

或者,您也可以将其实现为通用方法:

public void Test<T>(T primitive) where T : IConvertible
{
   if (primitive is Double) ....
   if (primitive is String) ....
}
Run Code Online (Sandbox Code Playgroud)

由于你设置了这个约束,你总是可以将你的类型转换为一个,如:

public void Test<T>(T primitive) where T : IConvertible
{
   var myval = Convert.ToDecimal(primitive);
   ....
}
Run Code Online (Sandbox Code Playgroud)

  • 虽然有很多类型实现了不是基元的"IConvertible". (3认同)

Tho*_*que 3

无法使用单个重载\xc2\xb9 来完成此操作(当然,您可以为每个基本类型编写重载)。您可以使其仅接受值类型,但随后它将接受任何类型struct,而不仅仅是原始类型。

\n\n
\n\n

\xc2\xb9 好吧,不可能在编译时强制执行它,但是您可以在运行时检查类型并当然抛出异常......

\n