Onl*_*ind 2 c# generics primitive-types type-constraints
我想创建一个只接受基本类型的构造函数,我该怎么做?
像这个例子:
public Test(PrimitiveType type)
{
}
Run Code Online (Sandbox Code Playgroud)
我需要在构造函数中执行它并且它是可选的,所以我想创建一个无参数构造函数和带参数的构造函数.
根据您想要实现的目标,您可能希望查看所谓的"可转换类型",例如实现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)
无法使用单个重载\xc2\xb9 来完成此操作(当然,您可以为每个基本类型编写重载)。您可以使其仅接受值类型,但随后它将接受任何类型struct,而不仅仅是原始类型。
\xc2\xb9 好吧,不可能在编译时强制执行它,但是您可以在运行时检查类型并当然抛出异常......
\n