zoukankan      html  css  js  c++  java
  • C#中一个问号和两个问号(a ?? b)的作用

    不卖关子,直接开门见山:

    C#中两个问号的作用是判断??左边的对象是否为null,如果不为null则使用??左边的对象,如果为null则使用??右边的对象。

    比如:a = b ?? c,如果b为null,则a = c,如果b不为null,则a = b。

    下面一段代码演示了这两种情况:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    static void Main(string[] args)
    {
        NewFuck();
        Shit();
        Console.ReadKey();
    }
     
    private static void NewFuck()
    {
        string fuck = "Fuck";
        Console.WriteLine(fuck ?? "fuck not found.");
    }
     
    private static void Shit()
    {
        object shit = null;
        string b = (string)shit ?? "shit not found.";
        Console.WriteLine(b);
    }

    很明显,这种类似三目表达式的运算符可以用来在妹子面前装B,看个直观的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    //文艺Fuck
    private static void NewFuck()
    {
        string fuck = "Fuck";
        Console.WriteLine(fuck ?? "fuck not found.");
    }
     
    //普通Fuck
    private static void Fuck()
    {
        string fuck = "Fuck";
        string s = fuck != null ? fuck : "fuck not found.";
        Console.WriteLine(s);
    }    
     
    //2BFuck
    private static void SBFuck()
    {
        string fuck;
        fuck = "Fuck";
        string s;
        if (fuck != null)
        {
            s = fuck;
        }
        else
        {
            s = "fuck not found.";
        }
        Console.WriteLine(s);
    }

    这三个方法在结果上是相同的,都会在屏幕上输出Fuck。当然,写个例子只是Demo级别的,我们在实际编程的时候用??运算符往往更有用,可以省去很多麻烦。比如处理页面QueryString的时候:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 原先要这样处理参数:
    string tmd = String.Empty;
    if (Request["Select"] != null)
    {
        tmd = Request["Select"];
    }
    else
    {
        tmd = "All";
    }
     
    // 现在重构为:
    string tmd1 = Request["Select"] ?? "All";
    怎么样?有没有觉得屌爆了。Session什么的也可以这么处理。顺便提一句,实际项目中处理参数比这个要复杂。往往包括类型转换等操作。类型转换建议用as操作符,强转不好。
     
     

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    namespace ConsoleApplication1

    {

        class Program

        {

            static void Main(string[] args)

            {

                int? a;

                a = null;//此时输出3

                //a = 6;//此时输出6

                int b = a ?? 3;

                Console.Write(b);

                Console.ReadKey();

            }

        }

    }

    变量定义中含有一个问号,意思是这个数据类型是NullAble类型的。

     变量定义中含有两个问号,双目运算符,意思是取所赋值??左边的,如果左边为null,取所赋值??右边的。

  • 相关阅读:
    Mac上安装Python3虚拟环境(VirtualEnv)教程
    django 安装验证码插件captcha
    OS path 的常见应用
    os 相对路径与绝对路径
    RecursionError: maximum recursion depth exceeded while calling a Python object
    java爬虫爬取博客园数据
    SVN
    Jwt验证
    Vuex
    SPA项目开发之CRUD+表单验证
  • 原文地址:https://www.cnblogs.com/Percy_Lee/p/5082012.html
Copyright © 2011-2022 走看看