Use the AnyOf<First, TSecond, ...>
type to handle multiple defined types as input parameters for methods.
This project uses code generation to generate up to 10 AnyOf-types:
AnyOf<TFirst, TSecond>
AnyOf<TFirst, TSecond, TThird>
AnyOf<TFirst, TSecond, TThird, TFourth>
- ...
This package can be used to serialize/deserialize (with Newtonsoft.Json) an object which contains an AnyOf-type.
For more details see wiki : AnyOf.Newtonsoft.Json
This package can be used to serialize/deserialize (with System.Text.Json) an object which contains an AnyOf-type.
For more details see wiki : AnyOf.System.Text.Json
using System;
using AnyOfTypes;
namespace ConsoleAppConsumer
{
internal class Program
{
private static void Main(string[] args)
{
Console.WriteLine(ReturnSomething().CurrentValue);
X(42);
X("test");
}
// This method returns an string, int or bool in a random way.
private static AnyOf<string, int, bool> ReturnSomething()
{
return new Random().Next(3) switch
{
1 => "test",
2 => 42,
_ => true,
};
}
// This method accepts only an int and a string.
private static void X(AnyOf<int, string> value)
{
Console.WriteLine("ToString " + value.ToString());
Console.WriteLine("CurrentValue " + value.CurrentValue);
Console.WriteLine("IsUndefined " + value.IsUndefined);
Console.WriteLine("IsFirst " + value.IsFirst);
Console.WriteLine("IsSecond " + value.IsSecond);
switch (value.CurrentType)
{
case AnyOfType.First:
Console.WriteLine("AnyOfType = First with value " + value.First);
break;
case AnyOfType.Second:
Console.WriteLine("AnyOfType = Second with value " + value.Second);
break;
default:
Console.WriteLine("???");
break;
}
}
}
}