C# NullReferenceException解决案例讲解

 更新时间:2021年08月20日 11:36:12   作者:keneyr  
这篇文章主要介绍了C# NullReferenceException解决案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

最近一直在写c#的时候一直遇到这个报错,看的我心烦。。。准备记下来以备后续只需。

参考博客:

https://segmentfault.com/a/1190000012609600

一般情况下,遇到这种错误是因为程序代码正在试图访问一个null的引用类型的实体而抛出异常。可能的原因。。

一、未实例化引用类型实体

比如声明以后,却不实例化

using System;
using System.Collections.Generic;
namespace Demo
{
	class Program
	{
		static void Main(string[] args)
		{
			List<string> str;
			str.Add("lalla lalal");
		}
	}
}

改正错误:

using System;
using System.Collections.Generic;
namespace Demo
{
	class Program
	{
		static void Main(string[] args)
		{
			List<string> str = new List<string>();
			str.Add("lalla lalal");
		}
	}
}

二、未初始化类实例

其实道理和一是一样的,比如:

using System;
using System.Collections.Generic;
namespace Demo
{
	public class Ex
	{
		public string ex{get; set;}
	}
	public class Program
	{
		public static void Main()
		{
			Ex x;
			string ot = x.ex;
		}
		
	}
}

修正以后:

using System;
using System.Collections.Generic;
namespace Demo
{
	public class Ex
	{
		public string ex{get; set;}
	}
	public class Program
	{
		public static void Main()
		{
			Ex x = new Ex();
			string ot = x.ex;
		}
		
	}
}

三、数组为null

比如:

using System;
using System.Collections.Generic;
namespace Demo
{
	public class Program
	{
		public static void Main()
		{
			int [] numbers = null;
			int n = numbers[0];
			Console.WriteLine("hah");
			Console.Write(n);
			
		}
	}
}

using System;
using System.Collections.Generic;
namespace Demo
{
	public class Program
	{
		public static void Main()
		{
			long[][] array = new long[1][];
			array[0][0]=3;
			Console.WriteLine(array);
			
		}
	}
}

四、事件为null

这种我还没有见过。但是觉得也是常见类型,所以抄录下来。

public class Demo
{
    public event EventHandler StateChanged;
 
    protected virtual void OnStateChanged(EventArgs e)
    {        
        StateChanged(this, e);
    }
}

如果外部没有注册StateChanged事件,那么调用StateChanged(this,e)会抛出NullReferenceException(未将对象引用到实例)。

修复方法如下:

public class Demo
{
    public event EventHandler StateChanged;
 
    protected virtual void OnStateChanged(EventArgs e)
    {      
        if(StateChanged != null)
        {  
            StateChanged(this, e);
        }
    }
}

然后在Unity里面用的时候,最常见的就是没有这个GameObject,然后你调用了它。可以参照该博客:

https://www.cnblogs.com/springword/p/6498254.html

到此这篇关于C# NullReferenceException解决案例讲解的文章就介绍到这了,更多相关C# NullReferenceException内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#绘制柱状图和折线图的方法

    C#绘制柱状图和折线图的方法

    这篇文章主要为大家详细介绍了C#绘制柱状图和折线图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C#不登录电脑启动程序

    C#不登录电脑启动程序

    本文主要介绍了创建系统服务;开启服务,启动程序。具有一定的参考价值,下面跟着小编一起来看下吧
    2017-01-01
  • C#获取web.config配置文件内容的方法

    C#获取web.config配置文件内容的方法

    这篇文章主要介绍了C#获取web.config配置文件内容的方法,涉及C#配置文件属性获取的相关技巧,需要的朋友可以参考下
    2015-05-05
  • C#遍历文件夹及子目录下所有图片

    C#遍历文件夹及子目录下所有图片

    这篇文章主要为大家详细介绍了C# 遍历文件夹及子目录下所有图片的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • C#根据Word模版生成Word文件

    C#根据Word模版生成Word文件

    这篇文章主要为大家详细介绍了C#根据Word模版生成Word文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • C# 生成随机数的方法示例

    C# 生成随机数的方法示例

    本文介绍了C#中的Random类,用于生成随机数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 可替代log4j日志的c#简单日志类队列实现类代码分享

    可替代log4j日志的c#简单日志类队列实现类代码分享

    简单日志类队列实现。可按天周月年大小分割文件。可简单替代log4j
    2013-12-12
  • C# List实现行转列的通用方案

    C# List实现行转列的通用方案

    本篇通过行转列引出了System.Linq.Dynamic,并且介绍了过滤功能,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • C# cmd中修改显示(显示进度变化效果)的方法

    C# cmd中修改显示(显示进度变化效果)的方法

    好多人想在运行或者调试含有大量数据或者比较慢C#程序的时候能够显示自己的程序完成的程度,这里有一个方法能发不断地修改cmd的同一行,以达到显示完成百分比的目的
    2013-04-04
  • datagridview实现手动添加行数据

    datagridview实现手动添加行数据

    这篇文章主要介绍了datagridview实现手动添加行数据,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04

最新评论