Documentation - JasonBock/SpackleNet GitHub Wiki

What is Spackle?

Spackle is a project that contains a number of helper methods I've used to supplement the core classes in .NET. Following is a brief list of code examples that illustrate what you can do with Spackle. Note that this list all-inclusive - you're encouraged to look through the unit tests to see what else Spackle has.

Collection Manipulation

You can perform rotations, shuffling, and element swapping with IList<T>-based objects:

var items = new List<string> { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
items.Rotate(7, RotateDirection.Negative);
// items is now { "h", "i", "j", "a", "b", "c", "d", "e", "f", "g" }
items.Swap(2, 4);
// items is now { "h", "i", "b", "a", "j", "c", "d", "e", "f", "g" }
items.Shuffle();
// items are now in a different order (hopefully!),
// something like { "c", "a", "b", "g", "d", "f", "e", "i", "j", "h" }

You can also create a read-only collection from an enumeration:

var collection = new HashSet<string> { "A", "B", "A" }.AsReadOnly();

Binding

This is a powerful way to change the value of a property, field, or local variable in a scope (via the use of the using keyword):

using(Cursors.Wait.Bind(() => someWindow.Cursor))
{
  // Within this block, someWindow.Cursor will be set to Cursors.Wait.
  // Upon exiting the block, someWindow.Cursor will be set back to its original value.
}

Timing Extension

If you've ever wanted to do a quick performance test on a piece of code, look no further than the Time() extension method:

Console.Out.WriteLine(new Action<int, int, int>(
  (arg1, arg2, arg3) =>
  {
    var x = arg1 + arg2 + arg3;
  }).Time(0, 0, 0).TotalMilliseconds);

If you want to do real performance testing, I highly encourage you to use Benchmark.NET.

String Extensions

Ever want to change a string to a Uri?

"http://www.goodsite.com".AsUri();

Ranges

Spackle defines a generic Range class to define and intersect other ranges:

var range = new Range<int>(3, 10);
var isInRange = range.Contains(5); // isInRange is true
var newRange = range.Intersect(new Range<int>(5, 12)); // newRange is (5, 10)

In C# 8, the Range type was introduced. Support was added in Spackle for this type for intersections and unions as well as partitioning a range. Look at the partitioning tests to see how it works.

Secure, Random Generators

The SecureRandom class combines the simplicity of the Random class with the security of the RandomNumberGenerator.

Where can I get Spackle?

The latest release of Spackle is available through NuGet. You can also clone the repo it via the GitHub site.

⚠️ **GitHub.com Fallback** ⚠️