Posts

C# Convert List IEnumerable<T> to 2D multi-dimensional array

//extension method public static object [,] To2DArray<T>( this IEnumerable<T> lines, params Func<T, object >[] lambdas) { var array = new object [lines.Count(), lambdas.Count()]; var lineCounter = 0; lines.ForEach(line => { for (var i = 0; i < lambdas.Length; i++) { array[lineCounter, i] = lambdas[i](line); } lineCounter++; }); return array; } [Test] public void Test() { var lines = new List<Line>(); lines.Add( new Line() { Id=1, Name=" One ", Age=25 }); lines.Add( new Line() { Id = 2, Name = " Two ", Age = 35 }); lines.Add( new Line() { Id = 3, Name = " Three ", Age = 45 }); //Convert to 2d array //[1,One,25] //[2,Two,35] //[3,Three,45] var range = lines.To2DArray(x => x.Id, x => x.Name, x=> x.Age); //test the result for (var i=0;i<lines.Count;i++) { for (var j=0;j<3;j++) //3 lambdas passed to function { Console.Wr...

MVC4 auto refresh partial view

Image
* Create new MVC4 application and make sure you configure unobtrusive-ajax as described in How to use MVC3 with AJAX * Create Controller /Controllers/HomeController.cs public class HomeController : Controller { public ActionResult Index() { var model = new ViewModel(); model.Now = DateTime.Now.ToString(); return View(model); } public ActionResult Refresh() { var model = new ViewModel(); model.Now = DateTime.Now.ToString(); return PartialView(" IndexPartial ", model); } } public class ViewModel { public string Now { get ; set ; } } * Create view /Views/Home/Index.cshtml @using MVCTest.Controllers @{ ViewBag.Title = "Index"; } < h2 > Index </ h2 > < a id = "button" title = "Refresh now" > Refresh Now </ a > < a id = "toggleButton" title = "Auto refresh every 5 seconds" > Auto Refresh </ a > < div id = "PartialDiv...

Remote debugging from Visual Studio

Image
Copy RemoteDebugger to remote machine from your local Visual Studio directory (This is path for VS2010) C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Remote Debugger Start remote debugging monitor on the server ‘msvsmon.exe’ Go to Tools/Options and select ‘No Authentication (native only)’ and ‘Allow any user to debug’ In your Visual Studio select ‘Debug/Attach to Process’ , specify Transport as ‘Remote (Native only with no authentication)’ and put your server name as Qualifier, click Refresh and you should see the list of processes on the remote machine. Select the process you want to debug and click ‘Attach’

Using NuGet without committing packages to source control

Using NuGet without committing packages to source control

C# ConcurrentQueue with limited number of items

public class LimitedConcurrentQueue<T> : ConcurrentQueue<T> { public int Size { get ; private set ; } public LimitedConcurrentQueue( int size) { Size = size; } public new void Enqueue(T obj) { base .Enqueue(obj); lock ( this ) { while ( base .Count > Size) { T outObj; base .TryDequeue( out outObj); } } } } [Test] public void TestLimitedConcurrentQueue() { var queue = new LimitedConcurrentQueue< int >(3); queue.Enqueue(1); queue.Enqueue(2); queue.Enqueue(3); Console.WriteLine( string .Join(" , ", queue.ToArray())); //gives 1,2,3 queue.Enqueue(4); Console.WriteLine( string .Join(" , ", queue.ToArray())); //gives 2,3,4 }

C# LINQ inner and left outer join

Left outer join extension method is based on How to: Perform Left Outer Joins article. [Test] public void Test() { var list1 = new List< int >() { 1, 2, 3, 4, 5}.Select(x=> new {a=x, b=x*x}); var list2 = new List< int >() { 1, 2, 3, 4 }.Select(x => new { a = x, b = x * x * x }); var innerJoin = list1.Join(list2, x => x.a, y => y.a, (x, y) => new {a = x.a, b = x.b, c = y.b}); innerJoin.ForEach(Console.WriteLine); var leftOuterJoin = list1.LeftOuterJoin(list2, x => x.a, y => y.a, (x, y) => new { a = x.a, b = x.b, c = (y != null ) ? y.b : ( int ?) null }); leftOuterJoin.ForEach(Console.WriteLine); } public static class Extensions { public static IEnumerable<TResult> LeftOuterJoin<TOuter, TInner, TKey, TResult>( this IEnumerable<TOuter> outer, IEnumerable<TInner> inner, Func<TOuter, TKey> outerKeySelector, Func<TInner, TKey> innerKeySelector, Func<TOute...

Run 32bit .Net application with >2GB RAM on 64bit machine

To allow your 32bit application use more than 2GB of RAM you need to modify the *.exe file with editbin utility. (open ‘Visual Studio Command Prompt’ and it will be on the path) editbin /LARGEADDRESSAWARE <your-app.exe> or just add these 2 lines to your Post-build event in Visual Studio call "$(DevEnvDir)..\tools\vsvars32.bat" editbin /LARGEADDRESSAWARE "$(TargetPath)" or these if you are building your project with msbuild outside of Visual Studio call "%VS100COMNTOOLS%\vsvars32.bat" editbin /LARGEADDRESSAWARE "$(TargetPath)" To check if all ok run dumpbin utility as below and check if the output has ‘Application can handle large (>2GB) addresses’ text in FILE HEADER VALUES. dumpbin /headers <your-app.exe>