C#中使用扩展方法对调用进行验证

利用C# 3.0提供的扩展方法技术,可以为已经编译好的程序集类型增加新的方法,从而应对新的扩展。除了在可扩展性方面所具有的优势之外,如果能够合理地结合泛型与类型推断,扩展方法还可以有效降低代码的重复,提高程序的可重用性。例如,这样的方法实现:

public class CustomerDAL
{
    public IEnumerable<Customer> FindCustomers(string roleName)
    {
        return from customer
            in context.Customer
               where customer.RoleName.Equals(roleName)
               select customer;
    }
}

当方法返回的结果为null时,采用如下方式进行调用,就会抛出NullReferenceException异常:

Customer customer = new CustomerDAL().FindCustomers(Role.Admin).First();

我们需要对返回结果进行验证,如果返回为null,则可以抛出自定义异常,或者创建一个空对象,例如:

public IEnumerable<Customer> FindCustomers(string roleName)
{
    IEnumerable<Customer> customers = from customer
            in context.Customer
            where customer.RoleName.Equals(roleName)
            select customer;
    if (customers == null)
    {
        throw new MyException("Cann't find the customers.");
    }
    return customers;
}

如果系统有许多方法都需要对返回结果进行验证,则这样的验证逻辑就会充斥在各个方法体中,既不利于重用,也会对未来的修改造成极大的阻碍。当然,我们可以引入Null Object模式来替代对null值的判断逻辑,但这种方式仍然需要为多种类型定义不同的Null Object类型。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 验证
, 方法
, 类型
, ienumerable
验证扩展
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-10-31 18:33:36

C#中使用扩展方法对调用进行验证的相关文章

C#3.0 中使用扩展方法来扩展接口

有关扩展方法的一些知识点请参看我的前篇博客:C#3.0 中的扩展方法 (Extension Methods)前篇博客中我重点介绍了两个特殊场景:1.扩展方法跟原来类的方法重名时候的处理逻辑2.扩展方法的嵌套现在我们来看扩展方法使用的第三个场景:使用扩展方法来扩展接口 应用场景举例:我们有时候会发现最初定义的一个接口,在现在环境下,这个接口需要再增加一个函数.有了扩展方法后,我们在这种情况下又多了一种实现的选择.下面以代码来说明这个问题:namespace Hongjun.Guo{interfac

objective-C中的扩展方法与partial class

 在c#中要扩展一个现有类很容易,比如这样: public static class Utils { public static void PrintToConsole(this string strSrc) { Console.WriteLine(strSrc); } } 这样就为String类添加了一个PrintToConsole的方法,使用方法如下: class MainClass { public static void Main (string[] args) { "Hello Wor

.net3.0中的扩展方法(示例)

先定义一个类Utils,在该类中定义了一个string类的扩展方法_IsNull  using System;namespace LinqDemo.App_Code{    public static class Utils    {        /**//// <summary>        /// 传统写法        /// </summary>        /// <param name="s"></param>     

说说NET3.5中的扩展方法

扩展方法配合Lambda表示达,可以方便我们进行数据的查询,看个代码吧: IEnumerable<string> x=new List<string> {"1","zzl","good"}; //为对象赋值 foreach (var info in x.ForUser("zzl")) //从其中筛选zzl这个字符 { Response.Write(info); }   public static cla

ThinkPHP中的create方法与自动令牌验证实例教程_php实例

本文实例形式展示了ThinkPHP中的create方法与自动令牌验证的实现方法,具体步骤如下: 一.数据表结构 user表结构如下: id username password 二.view模板部分 \aoli\Home\Tpl\default\User\create.html页面如下: <form action="__URL__/addit" method="post"> <input type="text" name=&quo

asp.net中CSharpThinking 扩展方法

本章主要描述扩展方法的应用及相关原理. 一, 演变 1.1 扩展方法特征 1)必须在一个静态方法中. 2)至少有一个参数. 3)第一个参数必须附加this关键字作为前缀. 4)第一个参数不能有其他任何修饰符(如 out,ref). 5)第一个参数的类型不能是指针. 6) 如果扩展方法名称与类型的方法一样(如都命名为ToString),则只有类型的方法会被调用,而扩展方法的不会,这是一个优先级问题. 1.2 扩展方法与普通静态方法的比较   C#2 时对一个类进行扩展而又不能应用继承方式时,只能编

asp.net中 C#扩展方法实例

这是msdn上说的,也就是你可以对String,Int,DataRow,DataTable等这些类型的基础上增加一个或多个方法,使用时不需要去修改或编译类型本身的代码. 先做个例子吧,以String为例,需要在字符串类型中加一个从字符串转为数值的功能. 以往我们可能是这样做的,会专门写一个方法做过转换 public static int StrToInt(string s) {     int id;     int.TryParse(s, out id);//这里当转换失败时返回的id为0  

.Net 2.0中使用扩展方法

大家都知道扩展方法是不能直接在2.0中使用的需要引用一个‍System.Core的dll不过现在有更加简单的方法了只要在工程项目中加入以下代码就OK啦‍namespace System.Runtime.CompilerServices{    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Assembly)]    public sealed class ExtensionA

Jquery中使用Post方法不能调用Web Service中的方法

问题描述 代码如下:$(document).ready(function(){varurl="/Webs/MarkService.asmx/GetCat";$.post(url,"name=小花猫",canbalck);});functioncanbalck(data){if(data.readyState==4){varcat=JSON.parse(data.text,null);$("#catSelect").append("<