棄元

来源:https://www.cnblogs.com/bibi-feiniaoyuan/archive/2020/03/15/discards.html
-Advertisement-
Play Games

棄元就是使用下劃線_作為一個占位符,但不占存儲空間。 元組(ValueTuple、Tuple)使用棄元例子。 using System; namespace ConsoleApp4 { class Program { public static void Main() { // ValueTuple ...


棄元就是使用下劃線_作為一個占位符,但不占存儲空間。

元組(ValueTuple、Tuple)使用棄元例子。

using System;

namespace ConsoleApp4
{
    class Program
    {
        public static void Main()
        {
            // ValueTuple和Tuple都可以使用棄元
            var (_, _, _, pop1, _, pop2) = QueryCityDataForYears("New York City", 1960, 2010);
           
            Console.WriteLine($"Population change, 1960 to 2010: {pop2 - pop1:N0}");
        }

        private static (string,double,int,int,int,int) QueryCityDataForYears(string name,int year1,int year2)
        {
            int population1 = 0, population2 = 0;
            double area = 0;

            if (name == "New York City")
            {
                area = 468.48;
                if (year1 == 1960)
                {
                    population1 = 7781984;
                }
                if (year2 == 2010)
                {
                    population2 = 8175133;
                }
                return (name, area, year1, population1, year2, population2);
            }
            return ("", 0, 0, 0, 0, 0);
            }     
    }   
}
View Code

對象析構,析構函數的參數決定了元組的參數 。

using System;

namespace ConsoleApp4
{
    class Program
    {
        public static void Main()
        {
            var p = new Person("John", "Quincy", "Adams", "Boston", "MA");

            // Deconstruct(out string fname, out string lname, out string city, out string state) 
            var (fName,_,city,_) = p;
          
            Console.WriteLine($"Hello {fName} of {city}!");            
        }

        private static (string,double,int,int,int,int) QueryCityDataForYears(string name,int year1,int year2)
        {
            int population1 = 0, population2 = 0;
            double area = 0;

            if (name == "New York City")
            {
                area = 468.48;
                if (year1 == 1960)
                {
                    population1 = 7781984;
                }
                if (year2 == 2010)
                {
                    population2 = 8175133;
                }
                return (name, area, year1, population1, year2, population2);
            }
            return ("", 0, 0, 0, 0, 0);
            }     
    }

    public class Person
    {
        public string FirstName { get; set; }
        public string MiddleName { get; set; }
        public string LastName { get; set; }
        public string City { get; set; }
        public string State { get; set; }

        public Person(string fname, string mname, string lname,
                      string cityName, string stateName)
        {
            FirstName = fname;
            MiddleName = mname;
            LastName = lname;
            City = cityName;
            State = stateName;
        }

        // 返回FirstName、LastName的元組
        public void Deconstruct(out string fname,out string lname)
        {
            fname = FirstName;
            lname = LastName;
        }        

        public void Deconstruct(out string fname, out string mname, out string lname)
        {
            fname = FirstName;
            mname = MiddleName;
            lname = LastName;
        }

        public void Deconstruct(out string fname, out string lname,
                                out string city, out string state)
        {
            fname = FirstName;
            lname = LastName;
            city = City;
            state = State;
        }
    }
}
View Code

switch,case分支可以使用占位符,相當default的作用。

using System;
using System.Globalization;

namespace ConsoleApp4
{
    class Program
    {
        public static void Main()
        {
            object[] objects = { CultureInfo.CurrentCulture,
                           CultureInfo.CurrentCulture.DateTimeFormat,
                           CultureInfo.CurrentCulture.NumberFormat,
                           new ArgumentException(), null };
            foreach (var obj in objects)
                ProvidesFormatInfo(obj);

            Console.ReadLine();
        }

        private static void ProvidesFormatInfo(object obj)
        {
            switch (obj)
            {
                // 實現了IFormatProvider,if obj is IFormatProvider fmt 
                case IFormatProvider fmt:
                    Console.WriteLine($"{fmt} object");
                    break;
                case null:
                    Console.WriteLine("null");
                    break;
                case object _:
                    Console.WriteLine("without format information");
                    break;
            }
        }      
    }
}
View Code

具有out參數的調用方法,有時只想知道是否能轉換而不需要其轉換之後的值。

 bool isDate = DateTime.TryParse("8989", out _);

獨立的棄元 (好像沒有用....)

 _ = "";

 

當上下文存在下劃線標識符,則無法再用下劃線作為占位符,即不能使用棄元。

private static void ShowValue(int _)
{
    byte[] arr = { 0, 0, 1, 2 };
    // 此時無法作為占位符,因為和參數的有效標識符衝突
    _ = BitConverter.ToInt32(arr, 0);
    Console.WriteLine(_);
}
// The example displays the following output:
//       33619968
private static void ShowValue(int _)
{
    string value = _.ToString();
    int newValue = 0;
    // 無法作為占位符,類型和參數標識符_也不一樣,編譯報錯
    _ = Int32.TryParse(value, out newValue);
    return _ == newValue;
}       

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • In [1]: import os import matplotlib.image as mpimg from PIL import Image import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl m ...
  • Redis 在當前的技術社區里是非常熱門的。從來自 Antirez 一個小小的個人項目到成為記憶體數據存儲行業的標準,Redis已經走過了很長的一段路。 隨之而來的一系列最佳實踐,使得大多數人可以正確地使用 Redis。 下麵我們將探索正確使用 Redis 的10個技巧。 1、停止使用 KEYS Ok ...
  • 最近在使用ASP.NET Core的時候出現了一個奇怪的問題。在一個Controller上使用了一個ActionFilter之後經常出現EF報錯。 這個異常說Context在完成前一個操作的時候第二個操作依據開始。這個錯誤還不是每次都會出現,只有在併發強的時候出現,基本可以判斷跟多線程有關係。看一下 ...
  • 如何自行實現一個多租戶系統 註意:前情概要描述的文字比較多,說的是我的思考過程,不感興趣的可以直接到跳到 “解析租戶信息” 一節。 現如今框架滿天飛的環境下,好像很少機會需要自己來實現一個模塊。畢竟這樣能節省很多的開發時間,提高效率。 這就是框架的好處,也是我們使用框架的直接原因。 情況總有例外,假 ...
  • 前言 我們一般可以在Linux伺服器上執行 命令來運行我們的.net Core WebApi應用。但是這樣運行起來的應用很不穩定,關閉終端視窗之後,應用也會停止運行。為了讓其可以穩定運行,我們需要讓它變成系統的守護進程,成為一種服務一直在系統中運行,出現異常時也能重新啟動。 Linux系統有自己的守 ...
  • 前言 在探究地球內部的結構中,如何做到在地球錶面不用深入地球內部就可以知道內部的構造呢?其實,向地球發射“地震波”。利用這種方式,可以判斷地球放回的情況,大體上,我們也可以斷定地球內部的構造了。 從這個例子中,通過一個對象的外部去瞭解對象內部的構造,都是利用了波的反射功能。而利用這種原理,在編程程式 ...
  • 目 錄 1. 概述... 2 2. iNeuOS平臺演示... 2 3. 設備驅動管理... 2 4. 服務驅動管理... 3 5. 雲組態自定義畫布... 4 6. 快速切換組態頁面菜單... 5 7. 自定義右鍵菜單項,顯示組態子頁面... 5 8. 工況關聯數據點... 6 9. 修改用戶密碼 ...
  • 本次是在原有ApiTemplate項目之上,增加一個用戶登錄許可權控制模塊,用於驗證ApiTemplate項目在面對一些簡單問題時,如何抽象並支持未來的擴展。用戶登錄許可權控制模塊看上去很簡單,但由於業餘時間總是有限的。所以藉助此機會實踐一次用戶敏捷開發。首先拆分模塊,本次只實現用戶登錄和登出。apit ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...