Skip to content


Subversion checkout URL

You can clone with
Download ZIP
A .Net port of ActiveSupport library of Ruby on Rails.
C# PowerShell
Tree: 857a795bb0

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.


A .Net port of ActiveSupport library of Ruby on Rails. The goal is to extend Base Class Library for Common Usage with human readable syntax.


You can use NSupport by using either Nuget OR DLL download.


Install-Package NSupport

More information about nuget package at

DLL download

You can download the latest released DLL and add reference to your project.


NSupport extends the BCL by adding extension methods, so you need to add the using reference to your code.

    using NSupport;

NSupport extends DateTime and DateTimeOffset to allow you to write as below and more:

    var june18 = new DateTime(2011,6,18);

    june18.Tomorrow(); // 2011/06/19

    june18.Yesterday(); // 2011/06/17

    june18.Nextyear(); // 2012/06/18

    june18.EndOfDay(); // 2011/06/18 23:59:59

    june18.BeginnerOfMonth(); // 2011/06/01

    june18.EndOfMonth(); // 2011/06/30 23:59:59

    june18.BeginningOfWeek(); // 2011/06/12

    june18.NextWeek(DayOfWeek.Friday); // 2011/06/24

    june18.BeginningOfQuarter(); // 2011/04/01

    june18.IsToday(); // true if today is june 18 2011 regardless of time

    june18.Change(years: 2010); // 2010/06/18

it also extends Integer to enable to write as:

    2.IsEven(); // true
    1.IsEven(); // false
    0.IsOdd(); // false

    15.IsMultipleOf(3); // true

    1.Byte(); // 1
    1.Kilobyte(); // 1024
    2.Megabytes(); // 2*1024*1024

    // looping 10 times
    10.Times(() => {
        // do something which will be executed for 10 times.

when Integer loves TimeSpan

    1.Hour(); // Timespan of 1 hour
    30.Minutes().Ago(); // 30 minutes ago 
    (2.Hours() + 20.Minutes()).FromNow();  // 2 hours and 20 minutes from now

    10.Hours().Since(new DateTime(2011,6,18)); // 2011/06/18 10:00:00

converting string to numbers.

    "10".ToInt32(); // convert to int 10
    "10,000".ToDecimal(); // convert to decimal 10000 

    "5".AsInt32(); // convert to int? 5
    "notValidNumber".AsInt32(); // return null

    var i = "notValidNumber".AsInt32() ?? -1; // i will have -1 (no more int.TryParse :) )  

formatting string.

    "{0} is {1} years old".FormatWith("Michael", 23); // Michael is 23 years old.   

securing text

  var password = "awesomeSecretPassword";
  var salt = "123jfe3EJV24098EC"; // or Guid.NewGuid().ToString("N");

  // hash password, so that no one can retrieve password
  var digestPassword = password.ToHashString(salt);

  var importantText = "this is super important text, so it need to be encrypt.";
  var secretKey = "thisIsSecretKey";

  // encrypt text so that other cannot read but I have key, so I can decrypt back to original one
  var encryptedText = importantText.Encrypt(secretKey);

  // decrypt to original
    var decryptedText = encryptedText.Decrypt(secertKey); // decryptedText == importantText


If you find any bug, please file a bug in Github Issue.

If you have any idea for extending BCL or any doubt in using NSupport, please post message in discussion board.

If you want to hack NSupport, start by forking my repo on GitHub:

Something went wrong with that request. Please try again.