Skip to content
/ AnyOf Public

Use the AnyOf<TFirst, TSecond, ...> type to handle multiple defined types as input parameters or return values for methods.

License

Notifications You must be signed in to change notification settings

StefH/AnyOf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Nov 24, 2024
a22335b · Nov 24, 2024

History

65 Commits
Oct 16, 2022
Nov 24, 2024
Nov 24, 2024
Nov 24, 2024
Jul 4, 2021
Sep 21, 2021
Nov 24, 2024
Nov 24, 2024
Nov 24, 2024
Jul 4, 2021
Aug 15, 2021
Nov 24, 2024
Sep 30, 2024
Nov 24, 2024

Repository files navigation

AnyOf

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>
  • ...

Install

The normal version:

NuGet Badge

The source-generator version:

NuGet Badge

AnyOf.Newtonsoft.Json

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

NuGet Badge

AnyOf.System.Text.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

NuGet Badge

Usage

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;
            }
        }
    }
}