伟德体育官网 2

defualt关键字默认值用法,1中default关键字的新用法

default 关键字有两类用法

私下认可值表明式生成类型的私下认可值。 私下认可值表明式在泛型类和泛型方法中相当管用。 使用泛型类和泛型方法时现身的贰个难点是,怎样在不也许提前领略以下内容的景色下将暗中认可值赋值给参数化类型 T

从 C# 7.1 起头,当编写翻译器能够估算表明式的系列时,文本 default
可用于暗中认可值表达式。 文本 default 生成与等效项 default(T)(其中,T
是猜想的档次卡塔 尔(阿拉伯语:قطر‎相符的值。
那可收缩多次宣称类型的冗余,进而使代码尤其简明。 文本 default
可用于以下任一位置:

  1. switch语句中钦定暗许标签
  2. 默许值表明式
  • T 是援用类型或许值类型。
  • 如果 T 是值类型,它是数值依然顾客定义的组织。
  • 伟德体育官网,变量初阶值设定项
  • 变量赋值
  • 宣示可选参数的暗许值
  • 为方式调用参数提供值
  • 归来语句(或 expression bodied 成员中的表达式卡塔 尔(英语:State of Qatar)

switch 语句

      int caseSwitch = 1;

      switch (caseSwitch)
      {
          case 1:
              Console.WriteLine("Case 1");
              break;
          case 2:
              Console.WriteLine("Case 2");
              break;
          default:
              Console.WriteLine("Default case");
              break;
      }

已知参数化类型 T 的变量 t,仅当 T 为引用类型时,语句 t = null 才有效。 赋值 t = 0 仅对数值类型有效,对协会无效。 施工方案是利用暗中认可值表达式,该表达式对援用类型(类类型和接口类型卡塔尔重返 null,对数值类型再次回到零。 对于客商定义的组织,重回伊始化为零位情势的布局,该协会依照成员是值依旧援用类型,为各类成员变动
0 或 null。 对于可为 NULL
的值类型,default 重回像任何协会同样初步化的System.Nullable<T>。

以下示例彰显了文本 default 在私下认可值表达式中的两种用法:

暗中同意值表明式

default对应各连串型生成私下认可值列表如下:
|类型|默认值|
|-|-|
|任何引用类型|null|
|数值类型|零|
|bool|false|
|enum|表达式 (E)0 生成的值,在那之中 E 是枚举标记符。|
|struct|通过如下设置生成的值:将具有值类型的字段设置为其默许值,将持有引用类型的字段设置为null。|
|可以为 null 的类型|HasValue 属性为 false 且 Value 属性未定义的实例。|

位列一下上述列表中的见惯不惊类型对应的值

在C# 7.1 之前

default(string) // null
default(int) // 0
default(int?) // null
default(dynamic) // null
default(DateTime) // 0001/01/01 0:00:00
default(DateTime?) // null

default(T) 表达式不遏抑泛型类和泛型方法。 暗中同意值表明式可用以此外托管类型

public class Point
{
    public double X { get; }
    public double Y { get; }

    public Point(double x, double y)
    {
        X = x;
        Y = y;
    }
}

public class LabeledPoint
{
    public double X { get; private set; }
    public double Y { get; private set; }
    public string Label { get; set; }

    // Providing the value for a default argument:
    public LabeledPoint(double x, double y, string label = default)
    {
        X = x;
        Y = y;
        this.Label = label;
    }

    public static LabeledPoint MovePoint(LabeledPoint source, 
        double xDistance, double yDistance)
    {
        // return a default value:
        if (source == null)
            return default;

        return new LabeledPoint(source.X + xDistance, source.Y + yDistance, 
        source.Label);
    }

    public static LabeledPoint FindClosestLocation(IEnumerable<LabeledPoint> sequence, 
        Point location)
    {
        // initialize variable:
        LabeledPoint rVal = default;
        double distance = double.MaxValue;

        foreach (var pt in sequence)
        {
            var thisDistance = Math.Sqrt((pt.X - location.X) * (pt.X - location.X) +
                (pt.Y - location.Y) * (pt.Y - location.Y));
            if (thisDistance < distance)
            {
                distance = thisDistance;
                rVal = pt;
            }
        }

        return rVal;
    }

    public static LabeledPoint ClosestToOrigin(IEnumerable<LabeledPoint> sequence)
        // Pass default value of an argument.
        => FindClosestLocation(sequence, default);
}

私下认可文本和档案的次序推理

C# 7.1 default的使用大面积比方
Visual Studio 2017 默认C#语言版本是7.0,须求团结设置7.1
Alt+Enter飞快键展开项目性质,恐怕右键点击项目,接受属性,之后接受生成,点击高等,如下图
伟德体育官网 1

展开高等生成设置,选拔语言版本,选C# 7.1 及以上的本子,如下图
伟德体育官网 2

比如未有C# 7.1 及以上的本子可选,请下载.NET Framework
4.7.2,以往新型版本的是4.7.2,直接下载最新版本的,省事。然后重启VS,就能够看到7.1及以上的可选项。

上述内容出自MSDN。

 

变量起首值设定项

7.1之前:

            var dstring = default(string);
            var dint = default(int);
            var dintNull = default(int?);
            var d = default(dynamic);
            var dt = default(DateTime);
            var dt1 = default(DateTime?);

7.1:

            string s = default;
            int i = default;
            DateTime? dt = default;
            dynamic d = default;

示范代码:

变量赋值

7.1之前:

            var s = "字符串";
            s = default(string);            

7.1:

           var s = "字符串";
            s = default;

 

声称可选参数的暗中认可值

7.1之前:

        void Test(int a, string b = null)
        {

        }           

7.1:

        void Test(int a, string b = default)
        {

        }

int iValue = default(int);
float fValue = default(float);
decimal dValue = default(decimal);
Console.Write(“值类型测量检验:”);
Console.WriteLine(“{0},{1},{2}”, iValue, fValue, dValue);

为格局调用参数提供值

7.1之前:

        static void Test(int a, string b)
        {

        } 
        static void Main(string[] args)
        { 
            Test(0, null);
        } 

7.1:

        static void Test(int a, string b)
        {

        }
        static void Main(string[] args)
        { 
            Test(default, default);
        } 

string strValue = default(string);
DateTime? dt = default(DateTime?);
User user = default(User);
Console.Write(“援用类型测量检验:”);
Console.WriteLine(“{0},{1},{2}”, (null == strValue), (null == user),
(null == dt));
Console.WriteLine();

回到语句

7.1之前:

        static string Test()
        {
            return null;
        }

7.1:

        static string Test()
        {
            return default;
        }

 

expression bodied 成员中的表明式

7.1之前:

public string A => null;

7.1:

public string A => default;

参考:暗许值表达式(C#
编程指南卡塔尔

运营结果:
伟德体育官网 3

发表评论