using System.Collections.Generic;
using System.Diagnostics;
namespace ConsoleApplication2
static readonly Random rand = new Random();
const string Alphabet = "abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.+-*/";
private const string Numbers = "0123456789i.+";
public static void Main()
private static void Benchmark(int sampleSize)
var mostlyInvalidInput = GenerateListOfRandomStrings(sampleSize, Alphabet);
var stopwatch1 = Stopwatch.StartNew();
foreach (var s in mostlyInvalidInput)
var stopwatch2 = Stopwatch.StartNew();
foreach (var s in mostlyInvalidInput)
var mostlyValidInput = GenerateListOfRandomStrings(sampleSize, Numbers);
var stopwatch3 = Stopwatch.StartNew();
foreach (var s in mostlyValidInput)
var stopwatch4 = Stopwatch.StartNew();
foreach (var s in mostlyValidInput)
Console.WriteLine("Sample Size: {0}", sampleSize);
Console.WriteLine("Original; Mostly Invalid: {0}ms", stopwatch1.ElapsedMilliseconds);
Console.WriteLine("Linq; MostlyInvalid: {0}ms", stopwatch2.ElapsedMilliseconds);
Console.WriteLine("Original; Mostly Valid: {0}ms", stopwatch3.ElapsedMilliseconds);
Console.WriteLine("Linq; Mostly Valid: {0}ms", stopwatch4.ElapsedMilliseconds);
private static List<string> GenerateListOfRandomStrings(int size, string alphabet)
var result = new List<string>();
for (var i = 0; i < size; i++)
result.Add(GenerateString(10, alphabet));
static string GenerateString(int size, string alphabet)
char[] chars = new char[size];
for (int i = 0; i < size; i++)
chars[i] = alphabet[rand.Next(alphabet.Length)];
return new string(chars);
private static readonly char[] ValidChars = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '.', 'i' };
private static bool IsValidStringOrig(string input)
if (!ValidChars.Contains(c))
private static bool IsValidStringLinq(string input)
return input.All(c => ValidChars.Contains(c));