c#泛型方法返回null的问题
2023-09-27 14:28:34 时间
c#的泛型方法实现和java实现有点不同,在java中,所有的泛型方法运行时类型必须是引用类型,所以和非泛型一样可以返回null。
但是c#中有点不同,可以同时是值类型和引用类型,而值类型不能赋值null,所以不能在泛型方法中直接返回null,因为null不能赋值给值类型。所以在泛型方法中需要返回特定类型的默认值,也就是对于引用类型null,值类型则是约定的默认值,如下所示。
在泛型类和泛型方法中产生的一个问题是,在预先未知以下情况时,如何将默认值分配给参数化类型 T:
-
T 是引用类型还是值类型。
-
如果 T 为值类型,则它是数值还是结构。
给定参数化类型 T 的一个变量 t,只有当 T 为引用类型时,语句 t = null 才有效;只有当 T 为数值类型而不是结构时,语句 t = 0 才能正常使用。 解决方案是使用 default 关键字,此关键字对于引用类型会返回 null,对于数值类型会返回零。 对于结构,此关键字将返回初始化为零或 null 的每个结构成员,具体取决于这些结构是值类型还是引用类型。 对于可以为 null 的值类型,默认返回 System.Nullable<T>,它像任何结构一样初始化。
public class MyMethod1
{
public K Get1<K>(int num)
{
//没有定义K类型的变量,可以使用default(K)返回泛型参数的默认值
return default(K);
}
}
相关文章
- C# 枚举(Enum 转载11)
- C#:封装和方法(转载6)
- C#调用DLL的几种方法
- C#创建自己的扩展方法
- C#TextBox控件实现数据绑定的方法
- C#控件 ToolStripProgressBar 用法
- c#网络通信框架networkcomms内核解析之九 自定义处理方法的运行机制
- C# 线程(二):关于线程的相关概念
- C#编写的 8种初级+高级排序方法(转)
- 解决C# WINFORM程序只允许运行一个实例的几种方法详解
- 2022-04-25 Unity XML2——C#读写XML
- C#中WinForm窗体间相互传值的几种方法
- C# CS1591缺少对公共可见类型或成员的 XML 注释 问题解决
- .NET(C#) 扩展方法(Extension)
- .NET(C#) 操作MySQL报错Character set 'utf8mb3' is not supported 解决方法
- .NET Core(C#) Windows和Linux上重新宽带拨号(PPPoE)实现换IP的方法及示例代码
- .NET(C#) 反射(Reflection)用途和相关类方法介绍及示例代码
- .NET Core(C#)泛型(方法,类,委托,接口)<T>使用示例代码
- c#命名规范(转载)
- C# 7.2 通过 in 和 readonly struct 减少方法值复制提高性能
- C# 设计模式 责任链