Skip to content

Support for for null-coalescing assignment (??=, C# 8) #2552

@greenozon

Description

@greenozon

Are there any plans to add support for for null-coalescing assignment(??=, C# 8).

Right now ILSpy produces correct code, but it's huge and not very readable

eg:

orig:

        public void test2()
        {
            List<int> nums = null;
            int? i = null;
            // need C# 8.0+
            nums ??= new List<int>();
            nums.Add(i ??= 12);
            nums.Add(i ??= 122);
            Console.WriteLine(string.Join(" ", nums));
            Console.WriteLine(i);
            
        }

Decompiled as:

public void test2()
{
	List<int> nums = null;
	int? i = null;
	if (nums == null)
	{
		nums = new List<int>();
	}
	List<int> list = nums;
	int valueOrDefault = i.GetValueOrDefault();
	int item;
	if (!i.HasValue)
	{
		valueOrDefault = 12;
		i = valueOrDefault;
		item = valueOrDefault;
	}
	else
	{
		item = valueOrDefault;
	}
	list.Add(item);
	List<int> list2 = nums;
	valueOrDefault = i.GetValueOrDefault();
	int item2;
	if (!i.HasValue)
	{
		valueOrDefault = 122;
		i = valueOrDefault;
		item2 = valueOrDefault;
	}
	else
	{
		item2 = valueOrDefault;
	}
	list2.Add(item2);
	Console.WriteLine(string.Join(" ", nums));
	Console.WriteLine(i);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions