MMLib.ToString.Abstraction
1.0.0
dotnet add package MMLib.ToString.Abstraction --version 1.0.0
NuGet\Install-Package MMLib.ToString.Abstraction -Version 1.0.0
<PackageReference Include="MMLib.ToString.Abstraction" Version="1.0.0" />
paket add MMLib.ToString.Abstraction --version 1.0.0
#r "nuget: MMLib.ToString.Abstraction, 1.0.0"
// Install MMLib.ToString.Abstraction as a Cake Addin #addin nuget:?package=MMLib.ToString.Abstraction&version=1.0.0 // Install MMLib.ToString.Abstraction as a Cake Tool #tool nuget:?package=MMLib.ToString.Abstraction&version=1.0.0
MMLib.ToString
This is my first attempt with a C# Source code generator.
We all love the new record
type. One of the completely marginal features is that it has an override ToString()
method.
public record Person(int Id, string Name);
Person person = new (2, "Milan");
Console.WriteLine(person); //Output: Person {Id = 2, Name = Milan}
Why don't standard classes have such an output? Why do I have to implement this over and over again in each class? How many times have you override a standard ToString
for debug purpouse?
I decided to try the source generator to allow it to generate a similar override for all classes marked with my attribute (I want to use the Source code generator for other purposes, this came to me as a nice example to try 😉)
[ToString()]
public partial class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Foo Foo { get; set; } = new Foo()
{
Id = 1,
Bar = "bar",
Created = DateTime.Now,
Name = "somebody"
};
}
[ToString()]
public partial class Foo
{
public int Id { get; set; }
public string Bar { get; set; }
public string Name { get; set; }
public DateTime Created { get; set; }
}
var p = new Person() { Id = 1, Name = "Nobody" };
Console.WriteLine(p);
//Output:
//Person {Id = 1, Name = Nobody, Foo = Foo {Id = 1, Bar = bar, Name = somebody, Created = 24. 4. 2021 20:39:04}}
Just do two things. Mark your class as partial
and add my attribute [ToString]
.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 397 | 4/26/2021 |