c# - 我可以定义一个只接受原始类型的方法吗?

标签 c# generics primitive-types type-constraints

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

像这个例子:

public Test(PrimitiveType type)
{

}

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

最佳答案

根据您想要实现的目标,您可能需要查看所谓的“可转换类型”,例如实现 IConvertible 接口(interface)的类型如下:

  • bool 值,
  • 字节,
  • 字节,
  • Int16,
  • UInt16,
  • Int32,
  • UInt32,
  • Int64,
  • UInt64,
  • 单例,
  • ,
  • 十进制,
  • 日期时间,
  • Char
  • 字符串

因此,如您所见,这几乎涵盖了您想使用基本类型实现的大部分内容。

所以,通过这样写方法

public void Test(IConvertible primitive)
{
   if (primitive is Double) ....
   if (primitive is String) ....
}

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

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

public void Test<T>(T primitive) where T : IConvertible
{
   if (primitive is Double) ....
   if (primitive is String) ....
}

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

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

关于c# - 我可以定义一个只接受原始类型的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24169901/

相关文章:

c# - .NET 是否有办法检查列表 a 是否包含列表 b 中的所有项目?

快速转换为具有约束的通用类型

Java 原语实现

C# DataSet.Tables[0].GetChanges();总是返回所有行

c# - 始终从 GAC 获取最新的 dll

c# - 为用户添加角色(Windows 身份验证)

Java 是否用 null 初始化变量?

c# - 如何使用 C# 计算每个公用事业(XML 数据)中所有城市的人口?

c - 通用堆栈不推送或弹出值

java - 字符串格式和日志记录基元类型 - Java