In C++ we have std::variant for creating a sum-types.
For example, the following will allow v to hold either a std::string or an int:
#include <variant>
#include <string>
//...
std::variant< std::string, int> v;
v = "aaa"; // now v holds a std::string
v = 5; // now v holds an int
In addition – the compiler will enforce that you assign v only with values convertible to std::string or int.
I am looking for a similar construct in C#.
Had a look at this post: Variant Type in C#,
but it didn’t offer the proper equivalent I am looking for.
Is there one in C#?
Edit:
The SO post Discriminated union in C# is related but does not exactly answer my question because I am looking for a general language construct and not for a solution for a specific case.
However one of the answers mentioned the OneOf library, which is also one of the solutions in the accepted answer here.
>Solution :
You can use Either monad from library language-ext. Install LanguageExt.Core NuGet package.
using LanguageExt;
//...
Either<string, int> v;
v = "aaa";
v = 5;
Or you could use OneOf library. Install OneOf NuGet package.
using OneOf;
//...
OneOf<string, int> v;
v = "aaa";
v = 5;