292 Target-typed ‘new‘ expressions

示例

Program.cs

class Employee
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public AddressDetails? PersonAddressDetails { get; set; }

    public Employee(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;
    }
}

class AddressDetails
{
    public string? City { get; set; }
    public int? ZipCode { get; set; }
}

class EmployeeBusinessLogic
{
    public Employee? GetEmployee()
    {
        //return null;
        //return new Employee();
        //return new("John", "Doe"); //equivalent to new Employee("John", "Doe")
        //Employee e = new("John", "Doe");
        Employee e = new("John", "Doe");
        return e;
    }
}

class DataPrinter
{
    public static void PrintEmployee(Employee e)
    {
        if (e != null)
        {
            Console.WriteLine($"{e.FirstName} {e.LastName}");
        }
    }
}
class Program
{
    static void Main()
    {
        EmployeeBusinessLogic employeeBusinessLogic = new EmployeeBusinessLogic();
        Employee? employee = employeeBusinessLogic.GetEmployee();

        //we are checking if it is null before the "if" statement
        bool isValid = employee == null;
        if (isValid)
        {
            Console.WriteLine("The variable is null");
        }
        else //compiler can't understand above condition that checks if the variable is null
        {
            Console.WriteLine(employee!.FirstName.ToUpper()); //!. operator (null forgiving operator) says that, the "employee" variable is NOT NULL, I'm sure.
            Console.WriteLine(employee!.LastName.ToUpper());
            Console.WriteLine(employee!.PersonAddressDetails?.City);
            Console.WriteLine(employee!.PersonAddressDetails?.ZipCode); //?. operator (null propagation operator) says that, access that "City" or "ZipCode" property ONLY if  "employee" variable is NOT NULL; otherwise, make the whole expression as null.
        }

        DataPrinter.PrintEmployee(new("one", "two")); //Employee class name will be taken automatically here, based on the definition of the PrintEmployee method

        //"new" expression works here, because we have not used "var"
        using (FileStream f = new("", FileMode.Create, FileAccess.Read))
        {

        }
        Console.ReadKey();
    }
}

//Employee    = non-nullable (null values are not accepted)
//Employee?  = nullable (accepts null values)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄健华Yeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值