编程-C#异常处理相关,try catch

问题描述

C#异常处理相关,try catch
 using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication7
{
    class Photo
{//Photo类

    string _title;

    public Photo(string title)
    {//构造函数
            this._title = title;
    }

    public string Title
    {//访问器
        get
        {
            return _title;
        }
    }
    public override string ToString()
    {
        try
        {
            return _title;
        }
        catch (NullReferenceException e)
        {
            throw new NullReferenceException("Not Found");
        }
    }
}

    class Album
    {
        // 该数组用于存放照片
        Photo[] photos;
        public Album(int capacity)
        {
            photos = new Photo[capacity];
        }

        public Photo this[int index]
        {//索引器
            set {
                if (index<0 || index>=photos.Length)
                    Console.WriteLine("Wrong Index");
                else
                    photos[index] = value; }
            get {
                if (index < 0 || index >= photos.Length)
                    return null;
                return photos[index]; }
        }

        public Photo this[string str]
        {//索引器
            get {
                    int i = 0;
                    while (i < photos.Length)
                    {
                        if (photos[i].ToString() == str)
                            return photos[i];
                        i++;
                    };
                    return null;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 创建一个容量为 3 的相册
            Album family = new Album(3);
            // 创建 3 张照片
            Photo first = new Photo("Jeny ");
            Photo second = new Photo("Smith");
            Photo third = new Photo("Lono");
            // 向相册加载照片
             family[0] = first;
             family[1] = second;
             family[2] = third;
            // 按索引检索
            Photo objPhoto1 = family[2];
            Console.WriteLine(objPhoto1.Title);
            // 按名称检索
            Photo objPhoto2 = family["Jeny"];
            Console.WriteLine(objPhoto2.Title);
            Console.Read();
        }    

    }
}

运行后报错,原因在于Photo objPhoto2 = family["Jeny"]中"Jeny"与"Jeny "(Jeny后有空格)不相等,索引器返回值为null。此时objPhoto2为null,不能执行Console.WriteLine(objPhoto2.Title);

请问这个异常是谁呢么类型的异常?我该如何使用异常处理,使其输出“Not Found”?
如果不是在自己重写的Tostring()函数中,那么应当在那里捕获这个异常?

第一次提问,略惶恐,先谢谢前辈们

解决方案

在toString中没有必要使用try...catch
完全可以if判断下objPhoto2是否null
我感觉try...catch没有必要刻意去使用,简单的用if就行,真的是有必要的时候用才是最合理的
真想用的话
try
{
Console.WriteLine(objPhoto2.Title);;
}
catch (NullReferenceException e)
{
throw new NullReferenceException("Not Found");
}

解决方案二:

规范的做法是在索引器内throw InvalidArgumentException();

解决方案三:

C# 中的异常捕捉(try)和异常处理(catch)
第十二章、C#异常处理(try...catch...)
try-catch异常处理

时间: 2024-11-17 06:22:46

编程-C#异常处理相关,try catch的相关文章

Android编程之图片相关代码集锦

本文实例总结了Android编程之图片相关代码.分享给大家供大家参考,具体如下: 1. Bitmap转化为字符串: /** * @param 位图 * @return 转化成的字符串 */ public static String bitmapToString(Bitmap bitmap) { // 将Bitmap转换成字符串 String string = null; ByteArrayOutputStream bStream = new ByteArrayOutputStream(); bi

Java编程中异常处理的优劣

 Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理.不过,我认为很多人其实没有真正掌握正确处理异常情况的方法和策略,最多也就不过了解个大概,知道概念.我想对三种不同程度和质量的Java异常处理进行了讨论,所阐述的处理异常的方式按手法的高下分为:     好,不好和恶劣三种.     同时提供了一些解决这些问题的技巧.     首先解释一些java异常处理中必须搞清楚的定义和机制.Java语言规范将自Error类或RuntimeException类衍生

深入理解Java编程中异常处理的优劣_java

Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理.不过,我认为很多人其实没有真正掌握正确处理异常情况的方法和策略,最多也就不过了解个大概,知道概念.我想对三种不同程度和质量的Java异常处理进行了讨论,所阐述的处理异常的方式按手法的高下分为:好,不好和恶劣三种.同时提供了一些解决这些问题的技巧.首先解释一些java异常处理中必须搞清楚的定义和机制.Java语言规范将自Error类或RuntimeException类衍生出来的任何违例都称作"不可检查&

Java编程中异常处理的优劣之道

Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理.不过,我认为很多人其实并没有真正掌握正确处理异常情况的方法和策略,最多也就不过了解个大概,知道点概念.本文就对三种不同程度和质量的Java异常处理进行了讨论,所阐述的处理异常的方式按手法的高下分为: 好,不好和恶劣三种. 同时向你提供了一些解决这些问题的技巧. 首先解释一些java异常处理中必须搞清楚的定义和机制.Java语言规范将自Error类或RuntimeException类衍生出来的任何违例都

解析C++编程中异常相关的堆栈展开和throw()异常规范_C 语言

C++ 中的异常和堆栈展开在 C++ 异常机制中,控制从 throw 语句移至可处理引发类型的第一个 catch 语句.在到达 catch 语句时,throw 语句和 catch 语句之间的范围内的所有自动变量将在名为"堆栈展开"的过程中被销毁.在堆栈展开中,执行将继续,如下所示: 控制通过正常顺序执行到达 try 语句.执行 try 块内的受保护部分. 如果执行受保护的部分的过程中未引发异常,将不会执行 try 块后面的 catch 子句.执行将在关联的 try 块后的最后一个 ca

yui3的AOP(面向切面编程)和OOP(面向对象编程)_YUI.Ext相关

首先请把手放胸前成沉思状:我上了生活,还是被生活上了自己? 没想出答案把,恩,可以读下文了.从语义角度讲,同一事物的不同表述可以反映人的主观视角的不同,从哲学角度将,世界观影响方法论,我们看事物的角度不同,有时会得出截然相悖的结论,从而会影响我们的做事方式和行为准则,现实生活如此,在丰富多彩的编程语言中更是如此,编程模式充满了对现实世界的各种模拟,包括是面向过程,面向对象,还有面向切面.我们大概已经非常熟悉面向过程和面向对象,切面的英文是Aspects(有时译作方面,我感觉用切面更能贴切的表达A

obj-c编程07:异常处理

    好了,到了相对轻松的话题,也是所有语言无可避免的话题:异常的处理.     我们知道对于一些常见的语言,"异常"是逃不开避不掉的主题:C中相对原始的signal或依赖系统异常支持(比如windows),C++和C#以及java中完善的内置语法,还有ruby中灵活的动态方式,在这里我们看到的是和java类似的obj-c的方法: #import <Foundation/Foundation.h> int main(int argc,char *argv[]) { @au

计算机编程 软件测试-软件测试相关问题,小白求救

问题描述 软件测试相关问题,小白求救 [问题描述]现有一个password_set函数,它描述了一组密码设置规则,具体描述如下:1.密码长度要求不得小于6个字符,否则给出A提示:2.密码长度要求不得大于20个字符,否则给出B提示:3.密码中必须包含大小字母和数字,否则给出C提示::4.密码必须以字母或数字开头,否则出D提示:5.密码中连续重复字符数不得超过3,否则出E提示:6.密码的末位不能是空格,否则出F提示:7.如果以上条件全都满足,则密码设置成功,同时给出"密码设置成功20!"提

一个异常处理的try catch的小问题

问题描述 classDemo{publicstaticvoidfunc(){try{thrownewException();}catch(Exceptione){System.out.println("B");}}publicstaticvoidmain(String[]args){try{func();}catch(Exceptione){System.out.println("C");}System.out.println("D");}}这个