IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> C# 一些學習小筆記及技巧 -> 正文阅读

[数据结构与算法]C# 一些學習小筆記及技巧

這麼多年,學習及工作中積累了一些零零碎碎的小筆記及技巧(C#),重溫和匯總一下。

1. 類別轉換時,如果你未能確定數值有效,使用TryParse 比 Parse 要更安全, TryParse 不會引發異常。
2. ?同??
1) 數據類型? 表示該類型變量可被賦為Null
例如: int 類型的默認值為0,int? 默認為 null
int i; //默認為0
int? i ; //默認為null
2) ?? 如果變量為null 時,默認的值
例如:
int j; int? i;
j= i ?? 10 ; //j 為 10
3. readonly 與 const 的使用
1) readonly 是運行時常量
2)const 是編譯時常量,它是 static的,因此不能 寫為 static const int constval=100;
3)const 效率相對高。

4. 數值類型 與 引用類型的 相等
1)對于數值類型,如果兩者的值相等,則返回 true
2)對於引用類型,如果指向同一個對象(地址)則返回 true;
3)對於 string 類型,則例外,它是判斷值相等。

5. using 是 try{…} finally{ xx.Dispose();} 的語法魔棒,最后會將對象自動 Dispose()
6. 大多數情況下 用 foreach 代替 for , 因為語法更簡單,以及自動帶 dispose. 但是 如果遍歷的過程中對自身變量進行增刪除操作時,則不能用 foreach.
7. 儘量使用泛型集合List 代替非泛型集合ArrayList,ArrayList的元素是 object ,存在 裝箱拆箱的性能損耗。
8. Linq 中的延遲求值和主動求值
例如:

 List<int> list = new LIst<int>(){0,1,2,3,4,5,6,7};
 //延遲求值 
 var temp1 = form c in list where c> 5
                      select c;
  // 主動求值 
  var temp2 =from c in list where c > 5 
                      select c).ToList<int>();
   list[0] = 11;// 改變 list 某個元素的值
 //延遲求值 
 foreach (var item in temp1)
  {
    console.writeline(item.tostring()); //11,6,7
}
  // 主動求值 
 foreach(var item in temp2)
  {
   console.writeline(item.tostring());//6,7
}

9. IEnumerable 與 IQueryable 的區別
1)IEnumerable 相對適合于 Linq to object,對本地集合進行查詢,排序等,可以用自定義主法。
2)IQueryable 相對適合于Linq to sql , 對遠端資料進行查詢等操作。不可以用自定義方法。
10. 委派
委派有兩個要點。第一委派是方法指針;第二委派是一個類。
例子:

delegate int AddHandler(int i,int j );
delegate int PrintHandler(string msg);
static void Main(stirng[] args)
{
 AddHandler add = Add;
 PrintHandler print = Print;
 print(add(1,2).ToString());
}
static int Add(int i,int j)
{
 return i+j;
}
static void Print(string msg)
{
 console.writeline(msg);
}

注:上面的 委派定義 delegate 也可以直接用 Action,Fun 代替

static void Main(string[] args)
{
 Func<int,int,int> add = Add; // 第一個 int 參數是返回的類型,后面接著是參數類型
 Actoin<String> print =Print;//無返回值,直接帶參數類型
 print(add(1,2).ToString());
}

另: 一個Action委派加 并行的例子

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ThreadSafeCollectionDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            ConcurrentBag<string> bag = new ConcurrentBag<string>();
            Console.WriteLine($"当前包的元素个数【{bag.Count}】,是否为空【{bag.IsEmpty}】");
            Task task1 = Task.Run(() => 
            {
                bag.Add("北洛");
                bag.Add("云无月");
            });
            Task task2 = Task.Run(() =>
            {
                bag.Add("岑缨");
                bag.Add("姬轩辕");
            });
            Task.WaitAll(task1, task2);
            //包Bag支持添加重复的元素,和List<T>一样都可以添加重复元素
            bag.Add("岑缨");
            Console.WriteLine($"当前包的元素个数【{bag.Count}】,是否为空【{bag.IsEmpty}】");
            Action action = new Action(() => 
            {
                string element;
                while (bag.TryTake(out element))
                {
                    Console.WriteLine($"取出元素:【{element}】,当前线程编号:【{Thread.CurrentThread.ManagedThreadId}】");
                }
            });
            //分成两部分取出
            Parallel.Invoke(action, action);
            string result;
            if (bag.TryPeek(out result))
            {
                Console.WriteLine($"包存在元素:【{result}】");
            }
            else
            {
                Console.WriteLine("包当前没有元素");
            }
            Console.WriteLine($"当前包的元素个数【{bag.Count}】,是否为空【{bag.IsEmpty}】");
            Console.ReadLine();
        }      

    }
}
 

(未完,,,待續)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-23 11:02:21  更:2022-04-23 11:02:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:19:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码