<Project Sdk="Microsoft.NET.Sdk"> | |
<PropertyGroup> | |
<OutputType>Exe</OutputType> | |
<TargetFramework>net5.0</TargetFramework> | |
<LangVersion>preview</LangVersion> | |
<Nullable>enable</Nullable> | |
</PropertyGroup> | |
</Project> |
using System; | |
Battery battery = new Battery("CR2032", 0.235, 100); | |
Console.WriteLine (battery); | |
for (int i = battery.RemainingCapacityPercentage; i >= 0; i--) | |
{ | |
Battery updatedBattery = battery with {RemainingCapacityPercentage = i}; | |
battery = updatedBattery; | |
} | |
Console.WriteLine (battery); | |
public record Battery(string Model, double TotalCapacityAmpHours, int RemainingCapacityPercentage); |
This comment has been minimized.
This comment has been minimized.
I'm confused, my understanding was that records are immutable and yet here we see battery being reassigned and effectively mutated. Granted the original data in memory battery pointed to is in tact which will presumably be cleaned up by the GC. Is this the point, to allow battery to have a reassigned reference for convenience as well as keeping memory cleaned up? |
This comment has been minimized.
This comment has been minimized.
Inmutable means you can't modify its properties. It doesn't mean you can't reassign a variable to a new record. The |
This comment has been minimized.
Produces the following output:
Alternate version, using mutable data: https://gist.github.com/richlander/83d2ccde88218e56e6b93a55db3f986b.