I recently realized that I had missed one important class in the core Sasa.dll assembly, so my blog series isn't technically complete. So here's my twenty-fourth post in the series:
- Sasa.Func - Type-Safe Delegate Combinators
- Sasa.Option - Handling Optional Values
- Sasa.Result - Handling Exceptional Values
- Sasa.Numbers - Generic Number Extensions
- Sasa.Strings - General String Extensions
- Sasa.Types - Runtime Types And CLR Metadata
- Sasa.Weak - Typed Weak References
- Sasa's Tuples
- Sasa's Core Interfaces
- Sasa.Events - Type-Safe, Null-Safe, Thread-Safe Events
- Sasa.Web.Url64 - URL-Safe Base64 Encoding
- Sasa.Operators<*> - Generic Arithmetic and Logical Operators
- Sasa.IO.FilePath - Easy and Safe Path Manipulations
- Sasa.IO.Streams - Convenient Stream Extensions
- Sasa.Linq.Enumerables - Extensions on IEnumerable<T>
- Sasa.Either - Simple Sums for .NET
- Sasa.Atomics - Simpler, More Scalable Atomic Operations
- Sasa.Collections.Arrays - Purely Functional Array Combinators
- Sasa.IO.DisposableFile - Simple Temporary File Handling
- Sasa.TypeConstraint and IL Rewriting - Generic Constraints (No Longer) Forbidden in C#
- Sasa Wrap-Up - Lazy
, Value, and Dictionary Extensions
Sasa.Enums
Sasa.Enums provides a statically typed API for working with enums, analogous to the dynamically typed System.Enum. Every method call in System.Enum that accepts a System.Type representing the enum type, here accepts a type parameter that is constrained to be of type enum.
Sasa.Enums.HasFlag
The Sasa.Enums.HasFlag extension method checks for the presence of flag bits set in an enum that has the FlagsAttribute applied:
[Flags]
enum Foo
{
Bar = 1,
Other = 2,
}
var value = Foo.Bar | Foo.Other;
Console.WriteLine(value.HasFlag(Foo.Bar))
Console.WriteLine(Foo.Other.HasFlag(Foo.Bar))
// output:
// true
// false
Sasa.Enums.IsDefined
The Sasa.Enums.IsDefined extension method checks whether the given enum value is valid:
enum Foo
{
Bar,
}
var defined = Foo.Bar;
Console.WriteLine(defined.IsDefined());
var undefined = (Foo)10;
Console.WriteLine(undefined.IsDefined());
// output:
// true
// false
Sasa.Enums.Names
The Sasa.Enums.Names static method provides a enumerable sequence of strings corresponding to the enum's descriptive names. Essentially, this is the equivalent of System.Enum.GetNames, except it's statically typed with an enum constraint, and it returns a cached immutable sequence so it avoids the overhead of allocating an array for every call:
enum Foo
{
Bar,
Other,
}
foreach (var x in Enums.Names<Foo>())
{
Console.WriteLine(x);
}
// output:
// Bar
// Other
Sasa.Enums.ToEnum
The Sasa.Enums.ToEnum set of extension methods provides simple enum parsing:
enum Foo
{
Bar,
Other,
}
Foo bar = "Bar".ToEnum<Foo>();
if (bar == Foo.Bar)
Console.WriteLine(bar);
// output:
// Bar
An exception is thrown if the provided string is not a valid enum name.
Sasa.Enums.TryParse
The Sasa.Enums.TryParse set of extension methods implements non exception-throwing pattern of parsing enums:
enum Foo
{
Bar,
Other,
}
Foo bar;
if ("Bar".TryParse<Foo>(out bar);)
Console.WriteLine(bar);
// output:
// Bar
Sasa.Enums.Values
The Sasa.Enums.Values method provides all the underlying values of the given enum type. Like the Enums.Names method, it returns a cached immutable sequence so it avoids the overhead of allocating arrays for every call:
enum Foo
{
Bar,
Other,
}
foreach (var x in Enums.Values<Foo>())
{
Console.WriteLine(x);
}
// output:
// Bar
// Other
Comments