首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在C#中,是否有任何我不应该使用的内置异常?

在 C# 中,有一些内置的异常类型是不应该被使用的,因为它们主要用于表示运行时错误,而不是表示应用程序中的逻辑错误。这些异常类型包括:

  1. System.Exception:这是所有异常类型的基类,用于表示一般的运行时错误。
  2. System.NullReferenceException:当尝试访问空引用时,会引发这个异常。
  3. System.IndexOutOfRangeException:当尝试访问数组或集合中不存在的元素时,会引发这个异常。
  4. System.DivideByZeroException:当尝试将数除以零时,会引发这个异常。

这些异常类型是 C# 运行时异常处理机制的一部分,用于在程序运行时报告错误,并提供有用的错误信息。在开发应用程序时,应该合理地处理这些异常,避免程序崩溃或产生不合理的操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

scalaoption和some

本系列 前几期文章介绍了 Scala 中一些面向对象编程方法,这些方法实际上与 Java 编程区别不是很大。...Scala 函数编程将提供一些新设计结构和理念以及一些内置构造,它们使某些场景(例如并发性)编程变得非常简单。...C# 2.0 引入了可变为 null 值类型 概念,重要是添加了语法支持,认为任何特定值类型(基本指原语类型)都可以通过将 null 封装到一个泛型/模板类 Nullable,从而提供 null...使用 Option(s) 什么情况下,“无” 并不代表 “什么也没有”?当它为 0 时候,与 null 什么关系。...如果返回类型是 Int,则不能返回 null,这个 “标志” 通常表示没有在数据库中找到该用户(您可能认为应该抛出一个异常,但是大多数时候数据库丢失值并不能视为异常,因此不应该在这里抛出异常)。

1.2K50

一文看懂 .NET 异常处理机制、原则以及最佳实践

什么时候该抛出异常,抛出什么异常?什么时候该捕获异常,捕获之后怎么处理异常?你可能已经使用异常一段时间了,但对 .NET/C# 异常机制依然一些疑惑。那么,可以阅读本文。...当然如果任务已全部完成,仅仅在对外通知时候出现了异常,那么这个时候不需要恢复状态,因为实际上已经完成了任务。 你可能会有些担心如果没有任何手段可以恢复错误怎么办?那这个时候就不要处理异常!...两种方法来避免异常: 先判断再使用。 例如读取文件之前,先判断文件是否存在;例如读取文件流时先判断是否已到达文件末尾。...任何情况下都不应该抛出这些异常: 过于抽象,以至于无法表明其含义 Exception 这可是顶级基类,这都抛出来了,使用者再也无法正确地处理此异常了 SystemException 这是各种异常基类,...异常分类 该不该引发异常 小节我们说到一个异常会被引发,是因为某个方法声称任务没有成功完成(失败),而失败原因四种: 方法使用者用错了(没有按照方法契约使用) 方法执行代码写错了 方法执行时所在环境不符合预期

57741

应该抛出什么异常不应该抛出什么异常?(.NETC#)

(.NET/C#) 2018-02-04 13:25 .NET/C# 建议异常处理原则 描述了如何 catch 异常以及重新 throw...让我们把异常归类到这些错误 本文重点在于指导我们何时应该抛出什么异常,也就是说——我们角色是——任务编写者。那么,编写者责任编写出一段没有错误代码。...永远不应该让实现错误抛出 这一节标题其实说了三件事情: 永远不应该主动用 throw 句式抛出“实现错误”章节中提到任何异常 如果你调用某个别人实现代码时遇到了“实现错误”章节中提到异常,那说明...于是,当发生了环境错误,我们更加关注于这样环境是什么导致了异常,以及程序是否正确处理了这样异常并恢复错误。...程序异常 异常处理,每一位开发者应该从根源上自己代码消灭“实现异常”(而不是“逃避”),同时使用异常帮助下正确调用其他方法,那么代码中将只剩下“环境异常”(和小部分性能导致“实现异常

1.6K20

NullReferenceException,就不应该存在!

它让这么多人印象深刻,是因为它在项目中实在是太常见了,常见到每一个 C#/.NET 入门者必然会遇到。 然而,这个异常不应该存在!...异常就是要提供足够我们诊断错误信息,让我们开发避免发生这样错误。...ArgumentNullException 就是一个不错替代异常,说它好因为两点: 错误发生最开始就报告了错误,避免错误蔓延。...相比于异常,null 并不能告知我们到底发生了什么。 使用方不知道究竟应不应该判空,也难以理清楚判空究竟意味着什么。...所以,为了解决这些困惑,建议开发以如下方式对待我们 null: 对任何可被外部模块调用方法参数进行 null 判断,并在参数为 null 时抛出 ArgumentNullException。

1.1K10

100天精通Golang(基础入门篇)——第23天:错误处理艺术: Go语言实战指南

引言 Go语言中,错误被视为一种数据类型,使用内置 error 类型来表示。区分 错误 和 异常 是非常重要。...Go错误处理 Go 语言中,错误被视为一种数据类型,使用内置 error 类型来表示。就像其他基本类型(如 int, float64)一样,错误值可以被存储变量,或者从函数返回等等。...Go错误处理 Go 语言中,错误被视为一种数据类型,使用内置 error 类型来表示。就像其他基本类型(如 int, float64)一样,错误值可以被存储变量,或者从函数返回等等。...新版本语言中,错误描述可以随时更改,我们代码将会中断。 是否办法可靠地获取文件名?答案是肯定,它可以做到,标准Go库使用不同方式提供更多关于错误信息。让我们一看一看。...所以,一旦Golang程序部署后,在任何情况下发生异常不应该导致程序异常退出,我们在上层函数中加一个延迟执行recover调用来达到这个目的,并且是否进行recover需要根据环境变量或配置文件来定

7810

C#.NET 如何确认一个路径是否是合法文件路径

很多方法要求传入一个字符串作为文件名或者文件路径,不过方法实际执行到使用文件名时候才会真正使用到这个文件名;于是这这种时候才会因为各种各样异常发现文件名或者文件路径是不合法。...实际上由我们自己写代码判断一个字符串是否是一个合法文件路径是非常困难,因为: 不同操作系统路径格式是不同; 同一个操作系统各种各样不同路径用途。...使用 new FileInfo(string fileName) 类型和 Path.GetFullPath(string path) 方法来判断,则会使用到以上代码,不过副作用是路径不合法时候抛出异常...但有时候是作为与用户交互来判断路径或者文件名是否合法,那么这个时候使用异常就不太合适了。毕竟 C#/.NET 异常机制不应该参与正常逻辑流程。...那么可以使用 Path.GetInvalidFileNameChars() 和 GetInvalidPathChars() 来判断字符串是否包含不合法文件名字符或者路径字符。

3.8K20

一文解决现代编程语言选择困难:命令式编程

因此选择一门编程语言时,不能只看是否支持类型系统, 学习难度 即便编程语言是完美无瑕,如果一位新手上船需要前期投入数月甚至是数年精力,那么又会有多少人使用呢?...一种做法是手工检查是否生成异常,但是在编程过程可能会忘记对异常做检查,因此这种做法是非常不可靠,而且会在代码添加大量额外处理。...空值 NullsC# ,所有引用均可为空。 错误处理 抛出并捕获错误是 C# 首选错误处理机制。 不可变性 未内置对不可变数据结构支持。...评判 尽管我本人职业生涯主要使用C#,但还是对这种语言评价不高。与对 Java 评判一样,建议读者寻找更现代替代语言。C# 本质上依然是 Java,只是具有更现代语法。...但使用不可为空类型并非编程默认,也并非 TypeScript 惯用做法。 错误处理 TypeScript 使用抛出和捕获异常处理错误。

1.2K30

C#开发人员应该知道13件事情

要将格式不正确字符串正常转换为数字,请使用TryParse()方法; 而不是抛出异常,它返回一个布尔值,指示解析是否成功。 使用异常处理范围 catch内部写代码,并且仔细处理成程序块。...对于公开了工作API代码来说,将异常包含于自定义异常,是特别有用异常是方法可见接口一部分,应该与参数和返回值一起被控制。可能导致更多异常方法,是不应该使用在可维护解决方案。...注意访问器副作用 如果你所使用属性副作用,请考虑是否使用属性或调试器设置,来防止调试器自动调用getter。...不应该去捕获NullReferenceException,而应该尝试使用它们之前测试对象是否为null。这也使得代码更容易被最小化try / catch块读取。...了解了C#开发应该知道13件事情,有助于我们更好地使用C#进行开发,当然开发时,也可以借助一些使用C#编写开发工具。

2.2K90

使用C#+FFmpeg+DirectX+dxva2硬件解码播放h264流

_extend函数是新加入,并且dxva2_device_create函数(这个函数是ffmpeg原始流程改动不影响原本任何功能)适时调用;简单来说,原来ffmpeg也能基于dxva2...编译产出   C#使用我们产出方式需要使用p/invoke和unsafe代码。...先贴出针对ffmpeg写一个工具类,然后给大家稍微讲解一下 FFHelper.cs 上文中主要有几个地方是知识点,大家做c#的如果需要和底层交互可以了解一下 结构体使用   结构体c#与c/c...指针使用   c#两种存储内存地址(指针)方式,一是使用interop体系IntPtr类型(大家可以将其想象成void*),一是不安全上下文(unsafe)中使用结构体类型指针(此处不讨论...如若不然,你绘制画面会进行意向不到缩放 网络掉包导致硬件解码器错误 见代码 其他directx底层异常 代码加了一个try-catch,捕获异常类型是DirectXException,c/c

3.2K11

Kotlin 和 Checked ExceptionKotlin 和 Checked Exception

对于这种评价语言请求,一般都不予理睬。作为一个专业语言研究者,职责不应该是去评价别人设计语言。...很多语言(包括 C++,C#,JavaScript,Python……)都有异常机制,但它们不要求你函数类型里面声明可能出现异常类型,也不使用静态类型系统对异常处理进行检查和验证。...每调用一个函数(不管是标准库函数,第三方库函数,还是队友写函数,甚至自己写函数),都会疑惑这个函数是否会抛出异常。...因为 Java CE,所以当你看到一个函数没有声明异常,就可以放心省掉 try-catch。所以这个 C# 问题,自然而然就被避免了,你不需要在很多地方疑惑是否需要写 try-catch。...使用任何语言都无法逃脱这个问题,所以必须把它想清楚。《编程智慧》一文已经讲述了如何正确进行出错处理。

69720

c#面试题抽象类和接口区别-金三银四面试:C#程序员经常遇到30道基础面试题,想你所想

14、请解释流与文件什么不同?   15、程序集与命名空间什么不同?   16、请编写一个捕获所有异常异常处理代码?   17、委托与事件是什么关系?为什么要使用委托?   ...25、JAVA代码是半编译半解释C#代码是否也是这样?   26、私有程序集与共享程序集什么区别?   27、请解释进程与线程区别?进程与程序区别?   ...params关键字可以指定在参数数目可变处定义参数方法。方法声明params关键字之后不允许任何其他参数,并且方法声明只允许一个params关键字。   22、C#没有运算符重载?...具体地说,不应该使用不安全上下文尝试C#编写C代码。   23、C#中有很多类被定义为public什么意义?   public关键字将公共访问权限授予一个或多个被声明编程元素。...定义具有内部访问能力成员程序集外部引用该成员是错误。   25、JAVA代码是半编译半解释C#代码是否也是这样

1.9K20

ASP.NET CoreGetService()和GetRequiredService()之间区别

上篇文章《.NET Core 3.0WPF中使用IOC图文教程》,我们尝试WPF应用.NET Core内置IOC进行编程,解析MainWindow时候用了GetRequiredService...但是你可能也注意到了类似的GetRequiredService()扩展方法 - 问题是,它们之间什么区别呢,您应该使用哪种方法? 我们研究任何代码之前,让我们先讨论一下这些方法预期行为。...如果服务不可用,则使用GetRequiredService()会立即抛出异常。如果您使用GetService(),那么您需要在调用代码检查是否为null,并且通常需要抛出异常。...但是,认为前两个优势仍然存在,并使GetRequiredService值得使用。此外,如果您以后添加第三方容器,您已经使用最佳实践了。 “可选服务,有时只DI容器中注册。” 。...因此,使用第三方容器时最好使用GetRequiredService()。就个人而言,我会在任何地方使用它,即使使用内置DI容器。

1.3K60

ASP.NET CoreGetService()和GetRequiredService()之间区别

文章转载于公众号【DotNetCore】,作者依乐祝 上篇文章《.NET Core 3.0WPF中使用IOC图文教程》,我们尝试WPF应用.NET Core内置IOC进行编程,解析MainWindow...但是你可能也注意到了类似的GetRequiredService()扩展方法 - 问题是,它们之间什么区别呢,您应该使用哪种方法? 我们研究任何代码之前,让我们先讨论一下这些方法预期行为。...如果您使用GetService(),那么您需要在调用代码检查是否为null,并且通常需要抛出异常。那个空检查代码需要在任何地方重复。 失败很快。...但是,认为前两个优势仍然存在,并使GetRequiredService值得使用。此外,如果您以后添加第三方容器,您已经使用最佳实践了。 “可选服务,有时只DI容器中注册。” 。...因此,使用第三方容器时最好使用GetRequiredService()。就个人而言,我会在任何地方使用它,即使使用内置DI容器。

1.4K20

Go哪些特殊语言特性?

我们知道数组是没有容量这个概念(其实是有的,只不过容量就是长度),而切片容量其实就类似于 C#List容量(知道大部分 C#er 使用 List 时候根本不会去关心 Capacity...p 并没有和接口任何关系,但是却可以正常被doSayHello这个函数引用,主要就是因为 Go 所有接口都是隐式实现。...Go 没有 Exception Go 没有异常概念,相反地提供了一个 error 机制。...对 C#来说,如果一段代码运行存在问题,那我们可以手动抛出一个 Exception,调用方可以捕获对应异常进行之后处理。而 Go 没有异常,替代方案是 error 机制。...目前浅显理解,panic其实才是 C# Exception 概念,因为程序运行遇到 panic 后就会彻底崩溃了,Go 设计者最开始设计估计是认为所有的错误都应该用 error 处理

14510

为什么不应该公开用来同步加锁对象?为什么不应该 lock(this)lock(string) 或者 lock 任何非私有对象?

---- 原因 不应该 lock(this) 是因为你永远不知道别人会如何使用对象,永远不知道别人会在哪里加锁。于是稍不注意就可能死锁! 实例 看看下面的两段代码。...} } } 第二段代码使用了这个类一个实例。为了响应放到了后台线程,但为了线程安全,加了锁。...—— 死锁 DouB_Walterlv 方法完全看不出来为什么死锁,只能进入到 DoSafety 才发现试图 lock this 对象刚刚在另一个线程被 lock (_foo) 了。...,另一个线程调用了同样 lock 这个对象 B 处代码,必然死锁。...如果你试图实现某些接口中 SyncRoot 属性,却遇到了上述矛盾(这样写法不安全),那么可以阅读另一篇博客了解如何实现这样问题”接口: 为什么实现 .NET ICollection

48510

【处理手记】Configuration system failed to initialize异常另类原因

c#程序某台电脑上,执行某个操作时,总是会报如图错误: ?...度娘一番,发现市面上常见原因是配置文件特定节点位置不对,或者配置文件损坏等等,而这个程序根本没有使用内置配置文件方案,而是用ini,所以不适用问题。...由于这个程序不是,所以首先reflator出源码(c#这点让纠结,一方面怕自己程序被人反,另一方面又得益于此~可以反别人,NND),调试追踪之下,发现居然是WebRequest.Create(...)引发异常,这方法多数会因为传入uri字串不合法而引发格式错误异常,这次能引发上述错误还是头一次见(想Create方法内部也是由其它类引发,但没深究),anyway,既然是内置类引发非主流异常

1.1K20

必备 .NET - C# 异常处理

本期内容将回顾许多变更,并提供更新后编码指南,因为这些指南与异常处理(即捕获异常)相关。 捕获异常: 回顾 很好理解是,引发特定异常类型可以让捕获程序使用异常类型本身来确定问题。... C# 6.0 捕获异常 常规异常处理指南是避免捕获您无法完全处理异常。...对于 C# 6.0 及更高版本,catch 块可以使用额外条件表达式。C# 6.0 支持条件子句,不再限制 catch 块是否只能根据异常类型进行匹配。...首先,登记所有异常(特别是 Main 主体,其中执行代码量是最多,而且上下文量似乎是最少工作量似乎非常巨大,最简单程序除外。其次,许多可能意外引发异常。...总结 本文中,介绍了更新后异常处理指南(与捕获异常有关),主要是由于过去几个版本 C# 和 .NET Framework 改进才需要更新

2.3K60

【深入浅出C#】章节 6: 异常处理和调试:异常概念和处理机制

1.4 finally 块 C# ,finally 块是 try-catch 结构可选部分,用于包含无论是否发生异常都要执行代码。...无论 try 块是否抛出异常,finally 块代码都会被执行。...2.2 多重 catch 块 C# ,我们可以使用多个 catch 块来捕获不同类型异常,并针对不同类型异常进行不同处理。...这样可以使代码更加灵活和可靠,同时也能提供更多异常信息,便于调试和排查问题。 3.3 捕获和处理自定义异常 C# ,捕获和处理自定义异常与捕获内置异常非常相似。...五、最佳实践和注意事项 使用异常处理时,以下是一些最佳实践和注意事项: 只异常情况下使用异常处理:异常处理应该用于处理预期外错误情况,而不应该用于控制程序正常流程。

81940
领券