.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Linq;
using System.Collections;
using System.Collections.Generic;

public class Program
{
    public enum ReportStatus
    {
        Draft,
        Revising,
        Finished
    };
	
	public static void Main()
	{		
		Console.WriteLine();
		
		Console.WriteLine("Draft".ToEnum<ReportStatus>());		
		Console.WriteLine("Revising".ToEnum<ReportStatus>());
		Console.WriteLine("Finished".ToEnum<ReportStatus>());
		
		Console.WriteLine();
		
		Console.WriteLine("draft".ToEnum<ReportStatus>());
		Console.WriteLine("revising".ToEnum<ReportStatus>());
		Console.WriteLine("finished".ToEnum<ReportStatus>());
		
		Console.WriteLine();
		
		Console.WriteLine("0".ToEnum<ReportStatus>());
		Console.WriteLine("1".ToEnum<ReportStatus>());
		Console.WriteLine("2".ToEnum<ReportStatus>());
	}
}



public static class StringExtensions
{
    public static TEnum ToEnum<TEnum>(this string text)
        where TEnum : struct, IComparable, IFormattable, IConvertible 
    {
        TEnum result = default(TEnum);
        return !string.IsNullOrWhiteSpace(text) 
            && Enum.TryParse(text, true, out result)
            && Enum.IsDefined(typeof(TEnum), result.ToString())
                ? result
                : default(TEnum);
    }
}
;