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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#设计模式实现之迭代器模式

    目录 前言: 一.餐馆合并菜单 二.改进菜单实现 三.迭代器模式 总结 前言: 迭代器模式平时用的不多,因为不管C#还是Java都已经帮我封装了,但是你是否知道平时经常在用的东西本质是怎么回事呢. 看完迭代器模式你就知道C# foreach循环是怎么实现的了,我的另一篇C# Foreach循环本质与枚举器就讲解了foreach的本质,其中用到的就是迭代器模式. 按照惯例,例子走起.(写了几个小时浏览器崩溃,我看见在自动保存啊,结果没内容,再撸一遍精简点的吧) 一.餐馆合并菜单 现在有两个餐馆和并

  • C# ExecuteScalar()方法案例讲解

    执行查询,并返回查询所返回的结果集中第一行的第一列.所有其他的列和行将被忽略. 1.返回的是一个object类型,也就是说是所有数据类型的基类,可根据select所得的第一列的数据类型转换为对应的数据类型 例: string strConn = "Data Source=(local);Initial Catalog=paperManage;Integrated Security=True"; SQLConnection objConn = new SQLconnection(strC

  • C# log4net使用案例详解

    这边先介绍简单的使用:在控制台输出和写入文件 首先添加log4net的nuget包 然后在app.config中添加配置项==configSections只能有一个,且是configuration的首个节点 <?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" typ

  • C#中Foreach循环遍历的本质与枚举器详解

    目录 前言 1.创建一个控制台应用程序 2.编写测试代码并分析 3.总结 前言 对于C#里面的Foreach学过 语言的人都知道怎么用,但是其原理相信很多人和我一样都没有去深究.刚回顾泛型讲到枚举器让我联想到了Foreach的实现,所以进行一番探究,有什么不对或者错误的地方大家多多斧正. 1.创建一个控制台应用程序 2.编写测试代码并分析 在Program类中写一个foreach循环 class Program { static void Main(string[] args) { List p

  • C#DirectoryInfo类用法详解

    DirectoryInfo类是System.IO命名空间的一部分.它用于创建,删除和移动目录.它提供了执行与目录和子目录相关的操作的方法.这是一个密封的类,所以不能继承它. DirectoryInfo类提供了下面列出的构造函数,方法和属性. C# DirectoryInfo语法 [SerializableAttribute] [ComVisibleAttribute(true)] public sealed class DirectoryInfo : FileSystemInfo C#  Dir

  • C# 使用CancellationTokenSource取消多线程

    目录 几点关键问题解释: 同时取消多个线程: 有时间我们在使用多线程的时候,需要取消线程的执行,可以使用CancellationTokenSource来取消对Task开辟多线程的取消 如下:我们点击一个按钮开启线程,然后点击取消按钮取消该线程的执行 CancellationTokenSource cts ; /// <summary> /// 开启线程 /// </summary> private void button1_Click(object sender, EventArg

  • C# SelectedIndexChanged事件详解

    SelectionChangeCommitted事件 在设定datasource和displaymember和valuemember时,以及手动改变combobox索引和值时都不触发该事件, 只是在界面选择combobox不同值时触发. SelectedIndexChanged事件  当 SelectedIndex 属性更改时发生,索引改变时触发. SelectedValueChanged事件   当 SelectedValue 属性更改时发生,值改变时触发. 区别: SelectedIndex

  • C# MemoryStream类案例详解

    MemoryStream位于System.IO命名空间,为系统内存提供流式的读写操作.常作为其他流数据交换时的中间对象操作. MemoryStream类封装一个字节数组,在构造实例时可以使用一个字节数组作为参数,但是数组的长度无法调整.使用默认无参数构造函数创建实例,可以使用Write方法写入,随着字节数据的写入,数组的大小自动调整. 在对MemoryStream类中数据流进行读取时,可以使用seek方法定位读取器的当前的位置,可以通过指定长度的数组一次性读取指定长度的数据.ReadByte方法

  • C#的TimeSpan案例详解

    TimeSpan结构:表示一个时间间隔. 它含有以下四个构造函数: TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数. (DateTime.Tick:是计算机的一个计时周期,单位是一百纳秒,即一千万分之一秒) TimeSpan(Int32, Int32, Int32)将 TimeSpan结构的新实例初始化为指定的小时数.分钟数和秒数. TimeSpan(Int32, Int32, Int32, Int32)将 TimeSpan结构的新实例初始化为指定的天数.小时

  • C# NullReferenceException解决案例讲解

    最近一直在写c#的时候一直遇到这个报错,看的我心烦...准备记下来以备后续只需. 参考博客: https://segmentfault.com/a/1190000012609600 一般情况下,遇到这种错误是因为程序代码正在试图访问一个null的引用类型的实体而抛出异常.可能的原因.. 一.未实例化引用类型实体 比如声明以后,却不实例化 using System; using System.Collections.Generic; namespace Demo { class Program {

  • Android之OOM异常解决案例讲解

    02-03 08:56:12.411: E/AndroidRuntime(10137): FATAL EXCEPTION: main 02-03 08:56:12.411: E/AndroidRuntime(10137): java.lang.IllegalStateException: Could not execute method of the activity 02-03 08:56:12.411: E/AndroidRuntime(10137): at android.view.Vie

  • Java之SSM中bean相关知识汇总案例讲解

    bean 的生命周期 对象创建 实例化Bean对象,默认选择无参构造方法,如果只有一个有参构造那么调用有参构造,如果只有多个有参构造那么报错,除非其中一个有参构造添加了@AutoWired注解: 设置Bean的属性: 依赖注入以及判断是否实现了Aware相关接口(BeanNameAware, BeanFactoryAware, ApplicationContextAware) 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用BeanPostProcessor.pos

  • Java之网络编程案例讲解

    Java基础之网络编程 基本概念 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的. 网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信.这就好比在道路中行驶的汽车一定要遵守交通规则一样,协议中对数据的传输格 式.传输速率.传输步骤等做了统一规定,通信双方必须同时遵守,最终完成数据交换. TCP协议(传输控制协议):是面向连接的传输层协议,应用程序在使用TCP之前,必须先建立TCP连接,在传输数据完毕后,必须释放已经建立的连接(跟打电话是否类似).

  • Python进行区间取值案例讲解

    需求背景: 进行分值计算.如下图,如果只是一两个还好说,写写判断,但是如果有几十个,几百个,会不会惨不忍睹.而且,下面的还是三种情况. 例如: 解决: # 根据值.比较list, 值list,返回区间值, other_value 即不在的情况 def get_value_by_between(self, compare_value, compare_list, value_list, other_value, type="compare", left=False, right=True

  • Java之字节码以及优势案例讲解

    一.Java编译器 Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器,.这台虚拟的机器在任何平台上都提供给编译程序一个共同的接口.编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码来将虚拟机代码转换为特定的系统机器码执行.在Java中,这种提供虚拟机理解的代码叫做字节码(即扩展名为 .class的文件),它不面向任何特定的处理器,仅仅只面向虚拟机. 1.利用记事本写一段Java代码 2.将记事本命名为 hello.java 3.cmd+r

  • PHP之mysql位运算案例讲解

    位运算,赋值状态时异或对应位数1的整形,判断状态则与运算对应位数1的整形.最大用处就是同时判断32位状态,节省存储空间,便于扩展,  如果你不知道什么是位运算的话, 那么请你先去看看基础的C语言教程吧. 与运算 a & b  , 或运算 a | b ,  异或运算 a ^ b , 或者 你也可以将 与运算理解为 + 法  例如 1|2 = 3   (1+2 = 3) 1|2|4 = 7 (1+2+4 = 7) 将 异或运算理解为 - 法 例如 3^2 = 1 (3-2 = 1) 3^1 = 2

  • Python之进行URL编码案例讲解

    为什么要对URL进行encode 在写网络爬虫时,发现提交表单中的中文字符都变成了TextBox1=%B8%C5%C2%CA%C2%DB这种样子,观察这是中文对应的GB2312编码,实际上是进行了GB2312编码和urlencode. 那么为什么要对URL进行encode? 因为在标准的url规范中中文和很多的字符是不允许出现在url中的.为了字符编码(gbk.utf-8)和特殊字符不出现在url中,url转义是为了符合url的规范. 具体代码 urlencode编码:urllib中的quote

  • Java之ThreadLocal使用常见和方式案例讲解

    目录 1 两大使用场景-ThreadLocal的用途 2 典型场景1:每个线程需要一个独享的对象 3 典型场景2:当前用户信息需要被线程内所有方法共享 4 ThreadLocal方法使用总结 5 ThreadLocal原理 6 ThreadLocal使用问题内存泄露 7 实际应用场景-在spring中的实例分析 [面试高频]- ThreadLocal的使用场景以及使用方式是怎么样的 1 两大使用场景-ThreadLocal的用途 典型场景1:每个线程需要一个独享的对象(通常是工具类,典型需要使用

随机推荐