返回flag

//修改前namespace CleanCSharp.Errors.Dirty
{
    public class SomeClass
    {
        public int DoSomeProcess(int? id)
        {
            if (id == null)
            {
                return -1; // null id
            }
            string data = LoadData();
            if (string.IsNullOrWhiteSpace(data))
            {
                return -2; // data is corrupt
            }
            ProcessData(data);

            return 0; // no error, all good
        }
        private string LoadData()
        {
            return "some data";
        }
        private void ProcessData(string data)
        {
            // do something
        }
    }
}
修改前,调用
namespace CleanCSharp.Errors.Dirty
{
    public class ConsumerOfSomeClass
    {
        public void Consume()
        {
            var sc = new SomeClass();
            const int idToProcess = 42;
            int returnCode = sc.DoSomeProcess(idToProcess);
            switch (returnCode)
            {
                case -1: // null id
                         // do something

            break;
                case -2: // corrupt data
                         // do something
                    break;
                case 0: // no error
                    Save(idToProcess);
                    break;
            }
        }
        private void Save(int id)
        {
            // save
        }
    }
}
//修改后
using System;
using System.IO;
namespace CleanCSharp.Errors.Clean
{
    public class SomeClass
    {
        public void DoSomeProcess(int? id)
        {
            if (id == null)
            {
                throw new ArgumentNullException("id");
            }
            string data = LoadData();
            ProcessData(data);
        }
        private string LoadData()
        {
            var demoData = "";
            if (string.IsNullOrWhiteSpace(demoData))
            {
                throw new
                InvalidDataException(
                "The data stream contains no data.");
            }
            return demoData;
        }
        private void ProcessData(string data)
        {
            // do something
        }
    }
}
//修改后
using System;
using System.Diagnostics;
using System.IO;
namespace CleanCSharp.Errors.Clean
{
    public class ConsumerOfSomeClass
    {
        public void Consume()
        {
            var sc = new SomeClass();
            const int idToProcess = 42;
            try
            {
                sc.DoSomeProcess(idToProcess);
            }
            catch (ArgumentNullException ex)
            {
                // null id

                // do something such as logging
                // if cannot respond to this
                // exception propagate up the
                // call stack
                throw;
                // Notice the throw is not: throw ex;
            }
            catch (InvalidDataException ex)
            {
                // bad data
                // do something
                throw;
            }
            catch (Exception ex)
            {
                // any other exceptions that may occur
                // do something
                throw;
            }
            Save(idToProcess);
        }
        private void Save(int id)
        {
            // save
        }
    }

}
时间: 2024-10-18 01:10:00

返回flag的相关文章

a标签根据js返回值判断页面是否跳转

a标签再跳转之前先判断是否符合条件,符合可以跳转,不符合不可以跳转. 自己遇到的问题是:在js方法中根据条件就return结果,但是不行. 原因是:在js方法中return后不会结束整个js方法(action里面会结束整个方法),所以下面的例子始终会返回false 例如(错误的): function updateTrainClass(classId){ var url = '${createLink(controller:'trainClass', action: 'judgeBeforeUpd

servlet+jsp 增删改查

个人觉得这种模式是MVC模式 先写一个类,类里面有几个属性. 写一个接口.里面有增删改查的方法.                   (写在service里) 写一个类实现这个接口(实现里面的增删改查等操作)     (写在service里) 连接数据库 写 servlet操作,  处理增删改查的信息. Jsp页面  (写页面显示或者上传,添加的页面布局等)与servlet实现交互,从而实现以上功能. 增删改查具体实例如下————  具体代码: XinxManager.java package

Jarvis OJ Pwn writeup

Jarvis OJ Pwn writeup1.[XMAN]level02.[XMAN]level13.[XMAN]level2(简单64位栈溢出)4.[XMAN]level2(x64)5.[XMAN]level3(32位下两次溢出拿shell)6.[XMAN]level3_x64(基本64位栈溢出,简单ROP)7.[XMAN]level4(DynELF泄露system地址)8.[XMAN]level5(mprotect函数)9.Test Your Memory(简单栈溢出,覆盖返回地址)10.S

字符串的查找删除---C++中string.find()函数与string::npos

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串 输入: 输入只有一组数据 输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止 输出: 删除输入的短字符串(不区分大小写)并去掉空格 #include <stdio.h> #include <string> #include <iostream> #include <ctype.h> using namespace std; int main() { char st

POJ1753Flip Game(DFS + 枚举)

Flip Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 37050   Accepted: 16122 Description Flip game is played on a rectangular 4x4 field with two-sided pieces placed on each of its 16 squares. One side of each piece is white and the

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸事件了. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45198549,非允许请勿用于商业或盈利用途,违者必究. 在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不

Java 多线程的实现方法

package com.jckb; /**多线程实现的两种方法 * * @author gx * */ public class Test2 { public static void main(String[] args) { Mythread m = new Mythread(); m.start();// 不能直接调用run方法 // m.run();//是方法调用,不是线程的启动 Thread t = new Thread(new Mythread2()); t.start(); } }

C++ 中string.find() 函数的用法总结(转载)

#include<stdio.h> #include<iostream> using namespace std; void main() { ////find函数返回类型 size_typestring s("1a2b3c4d5e6f7g8h9i1a2b3c4d5e6f7g8ha9i");string flag;string::size_type position; //find 函数 返回jk 在s 中的下标位置 position = s.find(&quo

libevent学习六

events Libevent的基本操作单元是event.每个event都意味着一个条件集合,包括: 1. 一个准备好读或写的文件描述符. 2. 一个"将"准备好读或写的文件描述符(边缘模式下) 3. 一个超时事件 4. 一个信号事件 5. 一个人为触发的事件 Event有相似的生命周期.一旦你通过Libevent方法去构造了一个event,并把它与event_base相关联,那么这个event就变成"被初始化".然后你可以把它"添加"到even