C# 语句,那些被忽略的用法 ( 一 )

 作为一个编程界的小白,记录一下一些C# 的用法。没事研究一下微软的文档,还是挺有意思的。

 

1. 使用 “yield return 返回值” 或者 yield break; 来代替迭代器?

using System;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            foreach (var item in (new MyClass()))
            {
                Console.WriteLine(item);
            }
            
            Console.ReadKey();
        }
    }

    public class MyClass : IEnumerable
    {
        public IEnumerator GetEnumerator()
        {
            for (int i = 0; i < 10; i++)
            {
                yield return i;
            }

            yield break;
        }
    }
}

其实还可以这么写:

static System.Collections.Generic.IEnumerable<int> Range(int start, int end) 
{
    for (int i = start; i < end; i++) 
    {
        yield return i;
    }
    yield break;
}
static void YieldStatement(string[] args)
{
    foreach (int i in Range(-10,10)) 
    {
        Console.WriteLine(i);
    }
}

 

2. unchecked 和 checked 可用于检测算术溢出

using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {

            int num = int.MaxValue;

            Console.WriteLine(num);

            unchecked
            {
                Console.WriteLine(num +  1);
            }

            checked
            {
                Console.WriteLine(num + 1);
            }

            Console.ReadKey();
        }
    }
}

因为变量类型储存大小问题,如果你想避免算术溢出,可以用checked做检测,这样会直接抛出异常。

 

3. 用 " goto " 去往你想去的任何地方

 

 public static void GoToStatement(string[] args)
        {
            int i = 0;
            goto check;
            loop:
            Console.WriteLine(args[i++]);
            check:
            if (i < args.Length)
                goto loop;
        }

用 “goto” 实现了一个循环,但是微软其实不建议大家这样做,破坏了程序的结构和流程。容易翻车

 

4.  “lock ” 多线程肯定不陌生

 public class SimpleSinger
    {
        private static SimpleSinger Simple { get; set; }
        private static readonly object Sync = new object();

        private SimpleSinger() { }

        public static SimpleSinger Instance()
        {
            if (Simple == null)
            {
                lock (Sync)
                {
                    if (Simple == null)
                    {
                        Simple = new SimpleSinger();
                    }
                }
            }
            
            return Simple;
        }
    }

肯定用单例模式+lock方法最直接简单的了

 

5.  “using” 的用法,这个你一定不陌生

using System;
using static System.Console;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            System.Console.WriteLine("A");
            Console.WriteLine("B");
            WriteLine("C");

            Console.ReadKey();
        }

    }

}

C# 6.0 以后可以使用 “using static ” 来引用静态类,比如这样 “using static System.Console;”

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值