RSCG – EnumClass
| name | EnumClass |
| nuget | https://www.nuget.org/packages/EnumClass.Generator/ |
| link | https://github.com/ashenBlade/EnumClass |
| author | ashen.Blade |
enum 2 class
This is how you can use EnumClass .
The code that you start with is
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="EnumClass.Generator" Version="1.3.0" OutputItemType="Analyzer" />
</ItemGroup>
<PropertyGroup>
<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>
<CompilerGeneratedFilesOutputPath>$(BaseIntermediateOutputPath)\GX</CompilerGeneratedFilesOutputPath>
</PropertyGroup>
</Project>
The code that you will use is
// See https://aka.ms/new-console-template for more information Console.WriteLine("Hello,World!"); Console.WriteLine(EnumClassDemo.EnumClass.Colors.None.ToString()); Console.WriteLine(EnumClassDemo.EnumClass.Colors.Red.TestMe());
using EnumClass.Attributes;
namespace EnumClassDemo;
[EnumClass]
public enum Colors
{
None=0,
Red,
Green,
Blue,
}
namespace EnumClassDemo.EnumClass;
public abstract partial class Colors
{
public partial class RedEnumValue
{
public string? TestMe()
{
return ToString();
}
}
}
The code that is generated is
#nullable enable
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
namespace EnumClassDemo.EnumClass
{
public abstract partial class Colors: IEquatable<Colors>,IEquatable<global::EnumClassDemo.Colors>,IComparable<Colors>,IComparable<global::EnumClassDemo.Colors>,IComparable
{
protected readonly global::EnumClassDemo.Colors _realEnumValue;
protected Colors(global::EnumClassDemo.Colors enumValue)
{
this._realEnumValue = enumValue;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static explicit operator global::EnumClassDemo.Colors(Colors value)
{
return value._realEnumValue;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static implicit operator int(Colors value)
{
return (int) value._realEnumValue;
}
public bool Equals(Colors? other)
{
return !ReferenceEquals(other,null) && other._realEnumValue == this._realEnumValue;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool Equals(global::EnumClassDemo.Colors other)
{
return other == this._realEnumValue;
}
public override bool Equals(object? other)
{
if (ReferenceEquals(other,null)) return false;
if (ReferenceEquals(other,this)) return true;
if (other is Colors)
{
return this.Equals((Colors) other);
}
if (other is global::EnumClassDemo.Colors)
{
return this.Equals((global::EnumClassDemo.Colors) other);
}
return false;
}
public static bool operator ==(Colors left,global::EnumClassDemo.Colors right)
{
return left.Equals(right);
}
public static bool operator !=(Colors left,global::EnumClassDemo.Colors right)
{
return !left.Equals(right);
}
public static bool operator ==(global::EnumClassDemo.Colors left,Colors right)
{
return right.Equals(left);
}
public static bool operator !=(global::EnumClassDemo.Colors left,Colors right)
{
return !right.Equals(left);
}
public static bool operator ==(Colors left,Colors right)
{
return !ReferenceEquals(left,null) && left.Equals(right);
}
public static bool operator !=(Colors left,Colors right)
{
return ReferenceEquals(left,null) || !left.Equals(right);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode()
{
return this._realEnumValue.GetHashCode();
}
public static bool TryParse(string value,out Colors? colors)
{
switch (value)
{
case "None":
colors = None;
return true;
case "Red":
colors = Red;
return true;
case "Green":
colors = Green;
return true;
case "Blue":
colors = Blue;
return true;
case "Colors.None":
colors = None;
return true;
case "Colors.Red":
colors = Red;
return true;
case "Colors.Green":
colors = Green;
return true;
case "Colors.Blue":
colors = Blue;
return true;
}
colors = null;
return false;
}
public static bool TryParse(int value,out Colors? colors)
{
switch (value)
{
case 0:
colors = None;
return true;
case 1:
colors = Red;
return true;
case 2:
colors = Green;
return true;
case 3:
colors = Blue;
return true;
}
colors = null;
return false;
}
public int CompareTo(object? other)
{
if (ReferenceEquals(this,other)) return 0;
if (ReferenceEquals(null,other)) return 1;
if (other is Colors)
{
Colors temp = (Colors) other;
int left = ((int)this._realEnumValue);
int right = ((int)temp._realEnumValue);
return left < right ? -1 : left == right ? 0 : 1;
}
if (other is global::EnumClassDemo.Colors)
{
int left = ((int)this._realEnumValue);
int right = ((int)other);
return left < right ? -1 : left == right ? 0 : 1;
}
throw new ArgumentException($"Object to compare must be either {typeof(Colors)} or {typeof(global::EnumClassDemo.Colors)}. Given type: {other.GetType()}","other");
}
public int CompareTo(Colors? other)
{
if (ReferenceEquals(this,other)) return 0;
if (ReferenceEquals(null,other)) return 1;
int left = ((int)this._realEnumValue);
int right = ((int)other._realEnumValue);
return left < right ? -1 : left == right ? 0 : 1;
}
public int CompareTo(global::EnumClassDemo.Colors other)
{
int left = ((int)this._realEnumValue);
int right = ((int)other);
return left < right ? -1 : left == right ? 0 : 1;
}
public abstract void Switch(Action<NoneEnumValue> noneSwitch,Action<RedEnumValue> redSwitch,Action<GreenEnumValue> greenSwitch,Action<BlueEnumValue> blueSwitch);
public abstract TResult Switch<TResult>(Func<NoneEnumValue,TResult> noneSwitch,Func<RedEnumValue,TResult> redSwitch,Func<GreenEnumValue,TResult> greenSwitch,Func<BlueEnumValue,TResult> blueSwitch);
public abstract void Switch<T0>(T0 arg0,Action<NoneEnumValue,T0> noneSwitch,Action<RedEnumValue,T0> redSwitch,Action<GreenEnumValue,T0> greenSwitch,Action<BlueEnumValue,T0> blueSwitch);
public abstract TResult Switch<TResult,T0>(T0 arg0,Func<NoneEnumValue,T0,TResult> noneSwitch,Func<RedEnumValue,T0,TResult> redSwitch,Func<GreenEnumValue,T0,TResult> greenSwitch,Func<BlueEnumValue,T0,TResult> blueSwitch);
public abstract void Switch<T0,T1>(T0 arg0,T1 arg1,Action<NoneEnumValue,T0,T1> noneSwitch,Action<RedEnumValue,T0,T1> redSwitch,Action<GreenEnumValue,T0,T1> greenSwitch,Action<BlueEnumValue,T0,T1> blueSwitch);
public abstract TResult Switch<TResult,T0,T1>(T0 arg0,T1 arg1,Func<NoneEnumValue,T0,T1,TResult> noneSwitch,Func<RedEnumValue,T0,T1,TResult> redSwitch,Func<GreenEnumValue,T0,T1,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,TResult> blueSwitch);
public abstract void Switch<T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Action<NoneEnumValue,T0,T1,T2> noneSwitch,Action<RedEnumValue,T0,T1,T2> redSwitch,Action<GreenEnumValue,T0,T1,T2> greenSwitch,Action<BlueEnumValue,T0,T1,T2> blueSwitch);
public abstract TResult Switch<TResult,T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Func<NoneEnumValue,T0,T1,T2,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,TResult> blueSwitch);
public abstract void Switch<T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Action<NoneEnumValue,T0,T1,T2,T3> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3> blueSwitch);
public abstract TResult Switch<TResult,T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Func<NoneEnumValue,T0,T1,T2,T3,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,TResult> blueSwitch);
public abstract void Switch<T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Action<NoneEnumValue,T0,T1,T2,T3,T4> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4> blueSwitch);
public abstract TResult Switch<TResult,T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Func<NoneEnumValue,T0,T1,T2,T3,T4,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,TResult> blueSwitch);
public abstract void Switch<T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5> blueSwitch);
public abstract TResult Switch<TResult,T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,TResult> blueSwitch);
public abstract void Switch<T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5,T6> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6> blueSwitch);
public abstract TResult Switch<TResult,T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> blueSwitch);
public static readonly NoneEnumValue None = new NoneEnumValue();
public partial class NoneEnumValue: Colors
{
public NoneEnumValue(): base(global::EnumClassDemo.Colors.None) { }
public override string ToString()
{
return "None";
}
public override void Switch(Action<NoneEnumValue> noneSwitch,Action<RedEnumValue> redSwitch,Action<GreenEnumValue> greenSwitch,Action<BlueEnumValue> blueSwitch)
{
noneSwitch(this);
}
public override TResult Switch<TResult>(Func<NoneEnumValue,TResult> noneSwitch,Func<RedEnumValue,TResult> redSwitch,Func<GreenEnumValue,TResult> greenSwitch,Func<BlueEnumValue,TResult> blueSwitch)
{
return noneSwitch(this);
}
public override void Switch<T0>(T0 arg0,Action<NoneEnumValue,T0> noneSwitch,Action<RedEnumValue,T0> redSwitch,Action<GreenEnumValue,T0> greenSwitch,Action<BlueEnumValue,T0> blueSwitch)
{
noneSwitch(this,arg0);
}
public override TResult Switch<TResult,T0>(T0 arg0,Func<NoneEnumValue,T0,TResult> noneSwitch,Func<RedEnumValue,T0,TResult> redSwitch,Func<GreenEnumValue,T0,TResult> greenSwitch,Func<BlueEnumValue,T0,TResult> blueSwitch)
{
return noneSwitch(this,arg0);
}
public override void Switch<T0,T1>(T0 arg0,T1 arg1,Action<NoneEnumValue,T0,T1> noneSwitch,Action<RedEnumValue,T0,T1> redSwitch,Action<GreenEnumValue,T0,T1> greenSwitch,Action<BlueEnumValue,T0,T1> blueSwitch)
{
noneSwitch(this,arg0,arg1);
}
public override TResult Switch<TResult,T0,T1>(T0 arg0,T1 arg1,Func<NoneEnumValue,T0,T1,TResult> noneSwitch,Func<RedEnumValue,T0,T1,TResult> redSwitch,Func<GreenEnumValue,T0,T1,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,TResult> blueSwitch)
{
return noneSwitch(this,arg0,arg1);
}
public override void Switch<T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Action<NoneEnumValue,T0,T1,T2> noneSwitch,Action<RedEnumValue,T0,T1,T2> redSwitch,Action<GreenEnumValue,T0,T1,T2> greenSwitch,Action<BlueEnumValue,T0,T1,T2> blueSwitch)
{
noneSwitch(this,arg0,arg1,arg2);
}
public override TResult Switch<TResult,T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Func<NoneEnumValue,T0,T1,T2,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,TResult> blueSwitch)
{
return noneSwitch(this,arg0,arg1,arg2);
}
public override void Switch<T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Action<NoneEnumValue,T0,T1,T2,T3> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3> blueSwitch)
{
noneSwitch(this,arg0,arg1,arg2,arg3);
}
public override TResult Switch<TResult,T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Func<NoneEnumValue,T0,T1,T2,T3,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,TResult> blueSwitch)
{
return noneSwitch(this,arg0,arg1,arg2,arg3);
}
public override void Switch<T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Action<NoneEnumValue,T0,T1,T2,T3,T4> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4> blueSwitch)
{
noneSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Func<NoneEnumValue,T0,T1,T2,T3,T4,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,TResult> blueSwitch)
{
return noneSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override void Switch<T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5> blueSwitch)
{
noneSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,TResult> blueSwitch)
{
return noneSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override void Switch<T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5,T6> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6> blueSwitch)
{
noneSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> blueSwitch)
{
return noneSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode()
{
return 0;
}
}
public static readonly RedEnumValue Red = new RedEnumValue();
public partial class RedEnumValue: Colors
{
public RedEnumValue(): base(global::EnumClassDemo.Colors.Red) { }
public override string ToString()
{
return "Red";
}
public override void Switch(Action<NoneEnumValue> noneSwitch,Action<RedEnumValue> redSwitch,Action<GreenEnumValue> greenSwitch,Action<BlueEnumValue> blueSwitch)
{
redSwitch(this);
}
public override TResult Switch<TResult>(Func<NoneEnumValue,TResult> noneSwitch,Func<RedEnumValue,TResult> redSwitch,Func<GreenEnumValue,TResult> greenSwitch,Func<BlueEnumValue,TResult> blueSwitch)
{
return redSwitch(this);
}
public override void Switch<T0>(T0 arg0,Action<NoneEnumValue,T0> noneSwitch,Action<RedEnumValue,T0> redSwitch,Action<GreenEnumValue,T0> greenSwitch,Action<BlueEnumValue,T0> blueSwitch)
{
redSwitch(this,arg0);
}
public override TResult Switch<TResult,T0>(T0 arg0,Func<NoneEnumValue,T0,TResult> noneSwitch,Func<RedEnumValue,T0,TResult> redSwitch,Func<GreenEnumValue,T0,TResult> greenSwitch,Func<BlueEnumValue,T0,TResult> blueSwitch)
{
return redSwitch(this,arg0);
}
public override void Switch<T0,T1>(T0 arg0,T1 arg1,Action<NoneEnumValue,T0,T1> noneSwitch,Action<RedEnumValue,T0,T1> redSwitch,Action<GreenEnumValue,T0,T1> greenSwitch,Action<BlueEnumValue,T0,T1> blueSwitch)
{
redSwitch(this,arg0,arg1);
}
public override TResult Switch<TResult,T0,T1>(T0 arg0,T1 arg1,Func<NoneEnumValue,T0,T1,TResult> noneSwitch,Func<RedEnumValue,T0,T1,TResult> redSwitch,Func<GreenEnumValue,T0,T1,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,TResult> blueSwitch)
{
return redSwitch(this,arg0,arg1);
}
public override void Switch<T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Action<NoneEnumValue,T0,T1,T2> noneSwitch,Action<RedEnumValue,T0,T1,T2> redSwitch,Action<GreenEnumValue,T0,T1,T2> greenSwitch,Action<BlueEnumValue,T0,T1,T2> blueSwitch)
{
redSwitch(this,arg0,arg1,arg2);
}
public override TResult Switch<TResult,T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Func<NoneEnumValue,T0,T1,T2,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,TResult> blueSwitch)
{
return redSwitch(this,arg0,arg1,arg2);
}
public override void Switch<T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Action<NoneEnumValue,T0,T1,T2,T3> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3> blueSwitch)
{
redSwitch(this,arg0,arg1,arg2,arg3);
}
public override TResult Switch<TResult,T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Func<NoneEnumValue,T0,T1,T2,T3,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,TResult> blueSwitch)
{
return redSwitch(this,arg0,arg1,arg2,arg3);
}
public override void Switch<T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Action<NoneEnumValue,T0,T1,T2,T3,T4> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4> blueSwitch)
{
redSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Func<NoneEnumValue,T0,T1,T2,T3,T4,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,TResult> blueSwitch)
{
return redSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override void Switch<T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5> blueSwitch)
{
redSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,TResult> blueSwitch)
{
return redSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override void Switch<T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5,T6> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6> blueSwitch)
{
redSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> blueSwitch)
{
return redSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode()
{
return 1;
}
}
public static readonly GreenEnumValue Green = new GreenEnumValue();
public partial class GreenEnumValue: Colors
{
public GreenEnumValue(): base(global::EnumClassDemo.Colors.Green) { }
public override string ToString()
{
return "Green";
}
public override void Switch(Action<NoneEnumValue> noneSwitch,Action<RedEnumValue> redSwitch,Action<GreenEnumValue> greenSwitch,Action<BlueEnumValue> blueSwitch)
{
greenSwitch(this);
}
public override TResult Switch<TResult>(Func<NoneEnumValue,TResult> noneSwitch,Func<RedEnumValue,TResult> redSwitch,Func<GreenEnumValue,TResult> greenSwitch,Func<BlueEnumValue,TResult> blueSwitch)
{
return greenSwitch(this);
}
public override void Switch<T0>(T0 arg0,Action<NoneEnumValue,T0> noneSwitch,Action<RedEnumValue,T0> redSwitch,Action<GreenEnumValue,T0> greenSwitch,Action<BlueEnumValue,T0> blueSwitch)
{
greenSwitch(this,arg0);
}
public override TResult Switch<TResult,T0>(T0 arg0,Func<NoneEnumValue,T0,TResult> noneSwitch,Func<RedEnumValue,T0,TResult> redSwitch,Func<GreenEnumValue,T0,TResult> greenSwitch,Func<BlueEnumValue,T0,TResult> blueSwitch)
{
return greenSwitch(this,arg0);
}
public override void Switch<T0,T1>(T0 arg0,T1 arg1,Action<NoneEnumValue,T0,T1> noneSwitch,Action<RedEnumValue,T0,T1> redSwitch,Action<GreenEnumValue,T0,T1> greenSwitch,Action<BlueEnumValue,T0,T1> blueSwitch)
{
greenSwitch(this,arg0,arg1);
}
public override TResult Switch<TResult,T0,T1>(T0 arg0,T1 arg1,Func<NoneEnumValue,T0,T1,TResult> noneSwitch,Func<RedEnumValue,T0,T1,TResult> redSwitch,Func<GreenEnumValue,T0,T1,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,TResult> blueSwitch)
{
return greenSwitch(this,arg0,arg1);
}
public override void Switch<T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Action<NoneEnumValue,T0,T1,T2> noneSwitch,Action<RedEnumValue,T0,T1,T2> redSwitch,Action<GreenEnumValue,T0,T1,T2> greenSwitch,Action<BlueEnumValue,T0,T1,T2> blueSwitch)
{
greenSwitch(this,arg0,arg1,arg2);
}
public override TResult Switch<TResult,T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Func<NoneEnumValue,T0,T1,T2,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,TResult> blueSwitch)
{
return greenSwitch(this,arg0,arg1,arg2);
}
public override void Switch<T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Action<NoneEnumValue,T0,T1,T2,T3> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3> blueSwitch)
{
greenSwitch(this,arg0,arg1,arg2,arg3);
}
public override TResult Switch<TResult,T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Func<NoneEnumValue,T0,T1,T2,T3,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,TResult> blueSwitch)
{
return greenSwitch(this,arg0,arg1,arg2,arg3);
}
public override void Switch<T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Action<NoneEnumValue,T0,T1,T2,T3,T4> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4> blueSwitch)
{
greenSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Func<NoneEnumValue,T0,T1,T2,T3,T4,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,TResult> blueSwitch)
{
return greenSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override void Switch<T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5> blueSwitch)
{
greenSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,TResult> blueSwitch)
{
return greenSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override void Switch<T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5,T6> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6> blueSwitch)
{
greenSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> blueSwitch)
{
return greenSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode()
{
return 2;
}
}
public static readonly BlueEnumValue Blue = new BlueEnumValue();
public partial class BlueEnumValue: Colors
{
public BlueEnumValue(): base(global::EnumClassDemo.Colors.Blue) { }
public override string ToString()
{
return "Blue";
}
public override void Switch(Action<NoneEnumValue> noneSwitch,Action<RedEnumValue> redSwitch,Action<GreenEnumValue> greenSwitch,Action<BlueEnumValue> blueSwitch)
{
blueSwitch(this);
}
public override TResult Switch<TResult>(Func<NoneEnumValue,TResult> noneSwitch,Func<RedEnumValue,TResult> redSwitch,Func<GreenEnumValue,TResult> greenSwitch,Func<BlueEnumValue,TResult> blueSwitch)
{
return blueSwitch(this);
}
public override void Switch<T0>(T0 arg0,Action<NoneEnumValue,T0> noneSwitch,Action<RedEnumValue,T0> redSwitch,Action<GreenEnumValue,T0> greenSwitch,Action<BlueEnumValue,T0> blueSwitch)
{
blueSwitch(this,arg0);
}
public override TResult Switch<TResult,T0>(T0 arg0,Func<NoneEnumValue,T0,TResult> noneSwitch,Func<RedEnumValue,T0,TResult> redSwitch,Func<GreenEnumValue,T0,TResult> greenSwitch,Func<BlueEnumValue,T0,TResult> blueSwitch)
{
return blueSwitch(this,arg0);
}
public override void Switch<T0,T1>(T0 arg0,T1 arg1,Action<NoneEnumValue,T0,T1> noneSwitch,Action<RedEnumValue,T0,T1> redSwitch,Action<GreenEnumValue,T0,T1> greenSwitch,Action<BlueEnumValue,T0,T1> blueSwitch)
{
blueSwitch(this,arg0,arg1);
}
public override TResult Switch<TResult,T0,T1>(T0 arg0,T1 arg1,Func<NoneEnumValue,T0,T1,TResult> noneSwitch,Func<RedEnumValue,T0,T1,TResult> redSwitch,Func<GreenEnumValue,T0,T1,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,TResult> blueSwitch)
{
return blueSwitch(this,arg0,arg1);
}
public override void Switch<T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Action<NoneEnumValue,T0,T1,T2> noneSwitch,Action<RedEnumValue,T0,T1,T2> redSwitch,Action<GreenEnumValue,T0,T1,T2> greenSwitch,Action<BlueEnumValue,T0,T1,T2> blueSwitch)
{
blueSwitch(this,arg0,arg1,arg2);
}
public override TResult Switch<TResult,T0,T1,T2>(T0 arg0,T1 arg1,T2 arg2,Func<NoneEnumValue,T0,T1,T2,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,TResult> blueSwitch)
{
return blueSwitch(this,arg0,arg1,arg2);
}
public override void Switch<T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Action<NoneEnumValue,T0,T1,T2,T3> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3> blueSwitch)
{
blueSwitch(this,arg0,arg1,arg2,arg3);
}
public override TResult Switch<TResult,T0,T1,T2,T3>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,Func<NoneEnumValue,T0,T1,T2,T3,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,TResult> blueSwitch)
{
return blueSwitch(this,arg0,arg1,arg2,arg3);
}
public override void Switch<T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Action<NoneEnumValue,T0,T1,T2,T3,T4> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4> blueSwitch)
{
blueSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,Func<NoneEnumValue,T0,T1,T2,T3,T4,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,TResult> blueSwitch)
{
return blueSwitch(this,arg0,arg1,arg2,arg3,arg4);
}
public override void Switch<T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5> blueSwitch)
{
blueSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,TResult> blueSwitch)
{
return blueSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5);
}
public override void Switch<T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Action<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6> noneSwitch,Action<RedEnumValue,T0,T1,T2,T3,T4,T5,T6> redSwitch,Action<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6> greenSwitch,Action<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6> blueSwitch)
{
blueSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
public override TResult Switch<TResult,T0,T1,T2,T3,T4,T5,T6>(T0 arg0,T1 arg1,T2 arg2,T3 arg3,T4 arg4,T5 arg5,T6 arg6,Func<NoneEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> noneSwitch,Func<RedEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> redSwitch,Func<GreenEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> greenSwitch,Func<BlueEnumValue,T0,T1,T2,T3,T4,T5,T6,TResult> blueSwitch)
{
return blueSwitch(this,arg0,arg1,arg2,arg3,arg4,arg5,arg6);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode()
{
return 3;
}
}
private static readonly Colors[] _members = new Colors[4] { None,Red,Green,Blue,};
public static System.Collections.Generic.IReadOnlyCollection<Colors> GetAllMembers()
{
return _members;
}
}
}
Code and pdf at
https://ignatandrei.github.io/RSCG_Examples/v2/docs/EnumClass
Leave a Reply