﻿<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>C# Frequently Asked Questions</title>
    <atom:link
      href="https://review.docs.microsoft.com/archive/blogs/csharpfaq/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/feed.xml</link>
    <description>The C# team posts answers to common questions and describes new language features</description>
    <lastBuildDate>Wed, 23 Dec 2015 03:32:31 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>New C# T-Shirt Designs on the .NET Blog - Tell Us What You Think</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/new-c-t-shirt-designs-on-the-net-blog-tell-us-what-you-think</link>
      <pubDate>Thu, 21 May 2015 16:54:00 GMT</pubDate>
      <dc:creator><![CDATA[Anthony D. Green [MSFT]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2015/05/21/new-c-t-shirt-designs-on-the-net-blog-tell-us-what-you-think/</guid>
      <description><![CDATA[[HTTP 301: Hey, just so you know, we're posting on&nbsp;the .NET team blog&nbsp;now. Head over there...]]></description>
      <content:encoded><![CDATA[<p><span style="color: #008000;"><strong>[HTTP 301: Hey, just so you know, we're posting on&nbsp;<a href="https://blogs.msdn.com/b/dotnet"><span style="color: #008000;">the .NET team blog</span></a>&nbsp;now. Head over there for new content from the C# team and more. Below is an summary from&nbsp;<a href="https://blogs.msdn.com/b/dotnet/archive/2015/05/21/save-the-day-with-a-visual-basic-csharp-or-fsharp-t-shirt.aspx"><span style="color: #008000;">my latest post</span></a>]</strong></span></p>
<p>Mads and Dustin showed off their cool VB and C# team t-shirts at BUILD and tons of people liked them and asked where they could get one.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/35/13/5657.img1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-13/5657.img1.png"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/35/13/5657.img1.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-13/5657.img1.png" alt="" border="0" /></a></p>
<p>So, we're thinking about making them available for purchase online. I've been working on some new designs and would love to know what you think. See the designs and leave your feedback on&nbsp;<a href="https://blogs.msdn.com/b/dotnet/archive/2015/05/21/save-the-day-with-a-visual-basic-csharp-or-fsharp-t-shirt.aspx">the full post over on the .NET team blog</a>.</p>
<p>Regards,</p>
<p><strong>-ADG</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>Roslyn ships v1.0-rc2 with "Go-Live" license</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/roslyn-ships-v1-0-rc2-with-go-live-license</link>
      <pubDate>Fri, 01 May 2015 11:55:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2015/05/01/roslyn-ships-v1-0-rc2-with-go-live-license/</guid>
      <description><![CDATA[For the last six years you've heard us go on and on about this Roslyn thing and how it's the...]]></description>
      <content:encoded><![CDATA[<p>For the last six years you've heard us go on and on about this Roslyn thing and how it's the platform for the future and would change everything and that we were all-in on it and "it's going to be great just wait and see". Well, the wait is over. This morning, at&nbsp;<a href="https://www.buildwindows.com/">BUILD</a>, Principal Program Managers of the Managed Languages Team Mads Torgersen and Dustin Campbell showed during their "<a href="https://channel9.msdn.com/Events/Build/2015/3-711">What's New in C# 6 and Visual Basic 14</a>" talk that Roslyn is here and Roslyn is ready. As of yesterday Roslyn has a&nbsp;<strong>"Go-Live"</strong>&nbsp;license.</p>
<p><a title="&quot;What's New in C# 6 and Visual Basic 14&quot; @ BUILD 2015" href="https://channel9.msdn.com/Events/Build/2015/3-711"><img style="display: block; margin-left: auto; margin-right: auto;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/35/13/0714.build-mads-dustin.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-13/0714.build_2D00_mads_2D00_dustin.png" alt="" border="0" /></a></p>
<p>This is the culmination of over half a decade of design and investment from some of the brightest minds at Microsoft and in consultation with you, our very passionate community, and with this latest release (included in&nbsp;<a href="https://blogs.msdn.com/b/somasegar/archive/2015/04/29/introducing-visual-studio-code-visual-studio-2015-rc-application-insights-public-preview-and-net-core-for-linux-and-mac.aspx">Visual Studio 2015 RC</a>) we're throwing the doors wide open for all of you to join us in realizing a phenomenal return on that investment!</p>
<p><strong>What does "Go-Live" mean?</strong></p>
<p>First, it means that the C# 6 and Visual Basic 14 compilers are language complete and officially supported by Microsoft for use&nbsp;<span>in production</span>&nbsp;environments.</p>
<p>Secondly, it means that the .NET Compiler Platform ("Roslyn") APIs are officially supported by Microsoft for use&nbsp;<span>in production</span>&nbsp;environments. That means that you can get started writing (and shipping) your own code smart tools, refactorings, diagnostics, fixes, and whatever else you can imagine. And most excitingly it means you can start making your new and existing .NET libraries&nbsp;<strong>Code Aware Libraries</strong>.</p>
<p>If you hadn't heard, a Code Aware Library is a .NET library distributed via NuGet which comes with domain-specific guidance like live code analysis and code fixes to ensure correct usage and that consumers follow best practices. We feel this is the next evolution of what it means to ship a .NET library and that over time analyzers will be as essential to library authoring as doc comments are today. In fact, the&nbsp;<a href="https://www.nuget.org/packages/Microsoft.VisualStudio.Azure.CodeAnalysis/">Azure SDK team is shipping a Code Aware Library</a>&nbsp;right now to ensure their developers write the best Azure apps possible.</p>
<p>You'll hear us talk a lot more about .NET Analyzers and Code Aware Libraries in the near future but I highly recommend checking out these resources and getting started writing analyzers now:</p>
<ul>
<li>Alex Turner's 5-minute Channel 9&nbsp;<a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/714">intro to Code Aware Libraries</a></li>
<li>My 20-minute&nbsp;<a href="https://channel9.msdn.com/Series/ConnectOn-Demand/225">intro to writing .NET Analyzers</a>.</li>
<li>Dustin Campbell's deep-dive into "<a href="https://channel9.msdn.com/Events/Build/2015/3-725">Analyzers and the Rise of Code Aware Libraries</a>" at BUILD 2015.</li>
</ul>
<p>And also check out these cool community created analyzers:</p>
<ul>
<li><a href="https://github.com/code-cracker/code-cracker">Code-Cracker</a></li>
<li><a href="https://nr6pack.net/">NR6Pack</a></li>
<li><a href="https://github.com/dotnetanalyzers">.NET Analyzers</a></li>
<li><a href="https://visualstudiogallery.msdn.microsoft.com/a4445ad0-f97c-41f9-a148-eae225dcc8a5">C# Essentials</a></li>
</ul>
<p><strong>Does this mean that Roslyn is done?</strong></p>
<p>Roslyn v1.0 will RTM alongside Visual Studio 2015 (because it powers the entire code editing experience inside of VS it kind of has to). Our team will be working hard until then fixing any problems discovered and tuning performance. But we're already imagining opening more scenarios beyond v1.0 for after RTM. Ever since our first CTP in 2011 enthusiasts and tools developers have engaged us with their feedback and their aspirations and that engagement has only grown in the last year since we open sourced. We're listening and have accumulated a backlog of proposals for new APIs that we have a strong interest in and some of which we've already begun actively investigating:</p>
<ul>
<li><strong>C# and Visual Basic Scripting APIs</strong>&nbsp;(and&nbsp;<a href="https://github.com/dotnet/roslyn/issues?utf8=%E2%9C%93&amp;q=label%3AArea-Interactive+label%3A%22Design+Notes%22">Interactive</a>) continue to be top of mind in this category. We know just how these APIs will open up exciting new experiences for everyone and will ship them with a go-live license as soon as we can.</li>
<li>There's also a strong interest in a richer set of<strong>&nbsp;APIs for analyzing control flow graphs</strong>&nbsp;that we know would enable powerful diagnostic analyzers like dispose checking and nullability detection.</li>
<li>We're also looking into new&nbsp;<strong>APIs for analyzing semantic trees in an efficient and language-neutral way</strong>&nbsp;to broaden the set of analyzers which can be written once and work equally well for both C# and Visual Basic.</li>
</ul>
<p>And the list (and Roslyn) goes on.</p>
<p><strong>Call to Action</strong></p>
<p>If you're a library author, get started making your library a Code Aware Library&nbsp;<strong><span>NOW</span></strong>. Or if you're just a dev looking to make some tools to help them analyze codebases, code faster, or find and fix mistakes sooner,&nbsp;<a href="https://github.com/dotnet/roslyn/wiki/Getting-Started-on-Visual-Studio-2015-RC">download the SDK</a>&nbsp;and see how Roslyn can help. And even if you're not even remotely interested in any of that stuff, that's OK, you can start using expression-bodied members, getter-only auto-props, string interpolation, the null-conditional (?.) operator and other&nbsp;<a href="https://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx">new language features</a>&nbsp;to remove boilerplate, make your code cleaner, and modernize your existing projects right now. But no matter which of those describes you, you can always join the discussions on&nbsp;<a href="https://github.com/dotnet/roslyn">GitHub</a>&nbsp;and&nbsp;<a href="https://visualstudio.uservoice.com/forums/121579-visual-studio/category/30931-languages-c">UserVoice</a>&nbsp;to engage the product team and help shape the futures of C# and Visual Basic.</p>
<p>Regards,</p>
<p><strong><a href="https://social.msdn.microsoft.com/Profile/Anthony%20D.%20Green%20%5BMSFT%5D">Anthony D. Green</a><br /></strong>Program Manager<br /><strong>Visual Basic, C#, and F# Languages Team</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>A Journey Through Open Source: The Trials &amp; Triumphs in Roslyn's First Year of Open Source</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/a-journey-through-open-source-the-trials-triumphs-in-roslyns-first-year-of-open-source</link>
      <pubDate>Mon, 06 Apr 2015 09:07:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2015/04/06/a-journey-through-open-source-the-trials-triumphs-in-roslyns-first-year-of-open-source/</guid>
      <description><![CDATA["I am looking for someone to share in an adventure."
&mdash; Gandalf, The Hobbit, J.R.R....]]></description>
      <content:encoded><![CDATA[<div style="margin: 10 0 0 0;">
<blockquote style="font-family: Georgia, serif; font-size: 18px; font-style: italic; width: auto; margin: 0 auto; padding: 0.35em 40px; line-height: 1.45; position: relative; color: #383838; border-bottom: 3px solid #ccc; display: table;">
<p>"I am looking for someone to share in an adventure."</p>
<span>&mdash; <cite style="font-size: 80%;"><em><a href="https://en.wikiquote.org/wiki/The_Hobbit">Gandalf, The Hobbit, J.R.R. Tolkien</a></em></cite></span></blockquote>
</div>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/5875.roslynbirthday.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/5875.roslynbirthday.jpg" alt="" /></p>
<p>On April 3, 2014, Anders Hejlsberg set us on our open source journey when he <a href="https://visualstudiomagazine.com/articles/2014/04/03/microsoft-open-sources-roslyn-compiler.aspx">made the .NET Compiler Platform (aka &ldquo;Roslyn&rdquo;) source code public</a><span>&nbsp;live on stage in San Francisco</span>. Without much open source experience to guide us (or a Grey Wizard), we anxiously yet excitedly hit the open roads. This post details the real and true story of the trials and triumphs we&rsquo;ve experienced in Roslyn&rsquo;s first year of open source.</p>
<h1>The Call to Adventure</h1>
<p>Previously, in order for developers to build a code-focused tool or application they would have to develop their own semantic analysis engine that would imitate what our compiler would do. Guessing how the &ldquo;black box&rdquo; of the compiler works is expensive, time intensive, and doesn&rsquo;t always lead to the correct behavior. We built Roslyn in order to remedy this problem by <a href="https://www.microsoft.com/en-us/download/details.aspx?id=27744">re-architecting our compiler as a platform</a>. Providing APIs for the compiler platform lowers the barrier-to-entry for developers to build all sorts of code-based innovations: meta-programming, interactive use of C# and VB, code generation/transformation, code analysis, refactoring, and more. With this goal in mind, our team began our work on redesigning the C# and VB compilers in 2009.</p>
<h1>Crossing the Threshold</h1>
<p>The decision to make Roslyn open source did not come out of the blue. In our original architecture discussions in 2009, we dreamt of open sourcing our language compilers. Access to the platform source code as well as the APIs would empower developers to take their code-based innovations to a whole new level and explore new depths. Our vision enabled us to proactively define principles that would make it easier to go open source if that&rsquo;s what we decided to do in the future.</p>
<p>Despite this dream of going open source, we didn&rsquo;t cross the threshold until about five years later. We saw the success the F#, ASP.NET, and TypeScript teams experienced with their open source approach and we quickly followed in their footsteps at Build in 2014.</p>
<h1>Trial and First Failure</h1>
<p>When we began this journey in April 2014, we did not have a specific map to follow. Instead, we decided to find our path in the open&mdash;allowing everyone to see us stumble into Rivendell, dredge through the snowstorms on Caradhras, and explore every cave and nook and cranny in our search for the perfect path. We took a risk with this &ldquo;learning in the open&rdquo; approach, but we believed in establishing an open development process from the start. Luckily, the community has been extremely supportive with helping us find the best course-corrections.</p>
<p>Naturally, we didn&rsquo;t avoid all the cobwebs or snowstorms in our pathfinding. But our open strategy allowed us to catch our mistakes early and adjust to find better ways to manage our project. For example, we now publish our <a href="https://github.com/dotnet/roslyn/issues?q=is%3Aopen+is%3Aissue+label%3A%22Design+Notes%22">language design notes each week</a>, test our external build scripts, and increase our responsiveness to <a href="https://github.com/dotnet/roslyn/issues">issues/questions</a></p>
<h1>Meeting Allies</h1>
<p>Along the way we have made some great allies (we love dwarves, hobbits, elves, and mankind!) who have really helped and supported us along this journey. The immediate community feedback on our C# Language Design was vital in some of the decisions we made for C# 6.0. For example, <a href="https://roslyn.codeplex.com/discussions/541421">this discussion</a> made us realize we had to yank primary constructors. We also gained valuable insights into <a href="https://roslyn.codeplex.com/discussions/540883">null-conditional operator syntax</a> and <a href="https://roslyn.codeplex.com/discussions/540869">string-interpolation</a>.</p>
<p>Furthermore, the community has already made some truly awesome tools. Here is a sample of community-driven projects that are a part of The Fellowship of the Roslyn Project:</p>
<ul>
<li><a href="https://csharppad.com/">C# Pad</a> is an interactive shell that lets you run and execute C# in your browser.</li>
<li><a href="https://codeconnect.io/">CodeConnect.io</a> creates visualizations of your call stack at design-time and includes refactoring and search features.</li>
<li><a href="https://duoco.de/">DuoCode</a> cross compiles your C# 6.0 code into JavaScript code</li>
<li><a href="https://github.com/daveaglick/LINQPad.CodeAnalysis">LINQPad.CodeAnalysis</a> is a library that adds capabilities to LINQPad to make it easier to work with Roslyn.</li>
<li><a href="https://github.com/mono/roslyn">Mono/Roslyn</a> is a cross-platform, open source implementation of the .NET Framework.</li>
<li><a href="https://o.oz-code.com/ozcode-v2-announcement">OzCode v2.0</a> uses Roslyn to provide magical debugging experiences.</li>
<li><a href="https://fluentco.de/">Scrawl</a> by FluentCo.de is a light-weight editor for modern web developers.</li>
<li><a href="https://scriptcs.net/">scriptcs</a> is an open source project that lets you use C# as a scripting language and provides a command-line C# REPL.</li>
<li><a href="https://tryroslyn.azurewebsites.net/">Try Roslyn</a> demonstrates Roslyn and shows how to repro a compiler bug.</li>
<li><a href="https://www.vswebessentials.com/features/markdown">WebEssentials Markdown editor</a> is powered by Roslyn.</li>
</ul>
<p>Based on the quantity and quality of projects in the community that use Roslyn, it is clear we made the right move by open sourcing our platform.</p>
<h1>Growth &amp; New Skills</h1>
<p>We originally put our source code on CodePlex because it was fast and easy to do--as well as the established &ldquo;place&rdquo; for Microsoft open projects at the time. However, many of you told us that you would prefer GitHub as a platform and so <a href="https://blogs.msdn.com/b/csharpfaq/archive/2015/01/10/moving-to-github.aspx">we moved our source there</a>.</p>
<p>When we moved we also changed our workflow to follow some of the best practices we saw <a href="https://blogs.msdn.com/b/dotnet/archive/2014/11/12/net-core-is-open-source.aspx">other Microsoft teams</a> using. Before the move, we were using a &ldquo;source open with limited contributions&rdquo; model. This means that our issue tracking and code review system were all internal and while we made an effort to bring community contributions into our code base, we did not directly merge their code (instead we copy/pasted their code and merged it ourselves).</p>
<p>Since our move, we have adopted a &ldquo;fully open source&rdquo; model where we are developing and working entirely in the open. We file bugs and design notes in GitHub&rsquo;s issue tracking system and submit all of our code changes as pull-requests. We use GitHub&rsquo;s code review system as our own and use Markdown to link issues or communicate about code. We also established a crisper idea of what we accept for pull-requests, what sign-offs we require for pull-requests to be merged, what style guide we recommend, and what an acceptable time frame for closing a pull-request is (roughly 1o days, if you were wondering).</p>
<p>This workflow change was critical in getting widespread community participation. By making core committers on the team follow the same code submission process as everyone else in the community we democratized participation in the project and increased the levels of transparency. And now, gone are the days of users telling us what they want and not knowing when it&rsquo;s going to get done! Developers can look at our issue tracker and see if anyone has started working on their issues yet. Issues are assigned to <a href="https://github.com/dotnet/roslyn/milestones">milestones</a> to communicate our prioritization&mdash;which is always up for discussion or <a href="https://github.com/dotnet/roslyn/issues?q=is%3Aopen+is%3Aissue+label%3A%22Up+for+Grabs%22">up-for-grabs</a>.</p>
<h1>Transformation</h1>
<p>Moving to a workflow that has our team working in the open as much as possible and using the same contribution model as the community has allowed us to almost double our community engagement in a third of the time:</p>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/2068.CommunityTable.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/2068.CommunityTable.png" alt="" /></p>
<p>Our user base for Roslyn is also steadily increasing (the more the merrier!). This graph illustrates how our pull-request users and issue-logging users are growing since our new model:</p>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/5342.RoslynUserGrowth.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/5342.RoslynUserGrowth.jpg" alt="" /></p>
<p>Here are some additional statistics on our response-rates and engagement that we track to ensure our core team is suitably prioritizing acceptance of code over net-new development:</p>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/7624.ResponseStats.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/7624.ResponseStats.png" alt="" /></p>
<p>Our response rate for issues is half that for pull-requests&mdash;which is expected due to our high volume of incoming issues! Regardless, we are happy with these numbers and are always looking for ways to make them better.</p>
<p>We have also been open sourcing more code. Since January we have open sourced three more components of our platform:</p>
<ul>
<li><a href="https://github.com/dotnet/roslyn/commit/ef547b73e65129809e01392585406815c904d021">Scripting</a></li>
<li><a href="https://github.com/dotnet/roslyn/commit/6f53207a6f0c20db549b303cc37b4473ef3e7a83">Expression Evaluators</a></li>
<li><a href="https://github.com/dotnet/roslyn/commit/2d5f9cc04da1474628534bcd064652f96f6ebc14">Visual Studio Language Services</a></li>
</ul>
<p>Our <a href="https://github.com/dotnet/roslyn/issues?q=is%3Aissue+label%3A%22Design+Notes%22+label%3AInteractive-Scripting+is%3Aopen">Interactive design meeting notes</a> are also now in the open.</p>
<h1>Acceptance</h1>
<p>With the first year of our journey under our belt, there is still plenty more to do. Currently, we are trying to iron out some finer details on our open source system. To start, we still haven&rsquo;t ported our historical issues from CodePlex into GitHub. We also haven&rsquo;t really figured out labeling for issues on GitHub and we&rsquo;d love a way that we could make labelling more democratic:</p>
<blockquote class="twitter-tweet" lang="en">
<p>I inspired a new issue label in <a href="https://twitter.com/hashtag/Roslyn?src=hash">#Roslyn</a>! <a href="https://t.co/jNjT1c0hdv">https://t.co/jNjT1c0hdv</a></p>
&mdash; Schabse Laks (@Schabse) <a href="https://twitter.com/Schabse/status/576954960371453952">March 15, 2015</a></blockquote>
<script charset="utf-8" type="text/javascript" src="https://platform.twitter.com/widgets.js"></script>
<p>Also we need to figure out how we map commits to different product releases. How do we best communicate what code has made it into which release, product, or NuGet package? Do you have any ideas on how to make this clear, transparent but democratic without polluting the history too much?</p>
<p>To top it off, we are working on <a href="https://github.com/dotnet/roslyn/wiki/FAQ#what-components-can-i-dogfood-in-visual-studio">making it easier for F5 builds to pick up the changes you made to the compiler and workspace layer</a>.</p>
<h1>The Road Ahead</h1>
<p>We still have a long road ahead (fraught with who knows what perils?) but the journey has been thrilling so far. We cannot thank the community enough: thank you, thank you, thank you! You all have created fabulous technologies already with Roslyn and your quality feedback and code contributions have been critical to our success. As Galadriel reminds us, &ldquo;Even the smallest [pull-request] can change the course of the future.&rdquo; It has also been an absolute pleasure getting to work and know you all better through <a href="https://gitter.im/dotnet/roslyn?utm_source=badge&amp;utm_medium=badge&amp;utm_campaign=pr-badge&amp;utm_content=badge">Gitter</a>, <a href="https://github.com/dotnet/roslyn/issues">GitHub</a>, <a href="https://twitter.com/search?q=%23roslyn&amp;src=typd">Twitter</a>, etc. So thank you all for being our very own Samwise Gamgees and wish us well on the remainder of this journey! For those of you who haven&rsquo;t joined our fellowship, <a href="https://github.com/dotnet/roslyn/">check us out</a> and help us on our journey into Year Two.</p>
<blockquote style="font-family: Georgia, serif; font-size: 18px; font-style: italic; width: auto; margin: 0 auto; padding: 0.35em 40px; line-height: 1.45; position: relative; color: #383838; border-bottom: 3px solid #ccc; border-top: 3px solid #ccc; display: table;">
<p>"End? No, the journey doesn't end here."</p>
<span>&mdash; <cite style="font-size: 80%;"><em><a href="https://www.goodreads.com/quotes/701843-pippin-i-didn-t-think-it-would-end-this-way-gandalf">Gandalf, The Lord of the Rings, J.R.R. Tolkien</a></em></cite></span></blockquote>
<p>Over 'n' out <br /><strong>Kasey Uhlenhuth</strong>, Program Manager, <strong>Managed Languages Team</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>Edit &amp; Continue and Make Object ID Improvements in CTP 6</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/edit-continue-and-make-object-id-improvements-in-ctp-6</link>
      <pubDate>Mon, 23 Feb 2015 09:45:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2015/02/23/edit-continue-and-make-object-id-improvements-in-ctp-6/</guid>
      <description><![CDATA[It's the beginning of a new year! According to Back to the Future Part II, everyone will be riding...]]></description>
      <content:encoded><![CDATA[<p>It's the beginning of a new year! According to <em>Back to the Future Part II</em>, everyone will be riding hoverboards in a couple months (and, let's be honest, Doc would love the <a href="https://www.microsoft.com/microsoft-hololens/en-us">HoloLens</a>). In the meantime, let's explore the enhancements we've made to the Visual Studio debugging experience. In <a href="https://www.visualstudio.com/en-us/news/vs2015-vs">CTP 6</a>, we improved the edits supported by Edit &amp; Continue and now support <a href="https://blogs.msdn.com/b/zainnab/archive/2010/03/04/make-objectid-vstipdebug0015.aspx">Make Object ID</a> in <a href="https://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015.aspx">the new 2015 C# and VB expression evaluators</a>.</p>
<p>Before you read more about our improvements in CTP 6, make sure you have read <a href="https://blogs.msdn.com/b/csharpfaq/archive/2014/12/11/better-together-c-6-and-the-visual-studio-2015-debugger.aspx">Anthony's post on debugging improvements in Visual Studio 2015 Preview</a>.</p>
<h2>Edit &amp; Continue is reaching its potential.</h2>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/7870.monkeyhoverboard2.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/7870.monkeyhoverboard2.jpg" alt="Hoverboards" /></p>
<p><span style="font-size: 12px;">Edit &amp; Continue lets you modify and add to your source code while debugging without ever having to restart your session. I'm happy to say we </span><a style="font-size: 12px;" href="https://blogs.msdn.com/b/visualstudioalm/archive/2014/05/13/net-edit-and-continue-survey.aspx">listened to you all</a> and have fleshed out the Edit &amp; Continue experience. Say goodbye to the days of pre-2005 language support and small edits! See the list below to see what source code edits are possible while debugging*:</p>
<ul>
<li>Adding methods, fields, constructors, properties, events, indexers, field and property initializers, and nested and top-level types (including delegates, enums, interfaces, abstract and generic types)</li>
<li>Modifying bodies of constructors (including constructor initializers), expression-bodied members, and field and property initializers</li>
<li>Adding and modifying methods that use the following post-2005 types and features:
<ul>
<li><a href="https://msdn.microsoft.com/en-us/library/hh191443.aspx">Async/await</a></li>
<li>Operations with <a title="https://msdn.microsoft.com/en-us/library/dd264741.aspx" href="https://msdn.microsoft.com/en-us/library/dd264741.aspx">dynamic objects</a></li>
<li><a href="https://msdn.microsoft.com/en-us/library/dscyy5s0.aspx">Iterators</a></li>
<li><a href="https://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx">C# 6.0 language features</a>: string interpolation, null-conditional operators, etc.</li>
</ul>
</li>
<li>Reordering type members and <a href="https://msdn.microsoft.com/en-us/library/d5x73970.aspx">type parameter constraints</a></li>
<li>Refactoring code (extract method and inline temporary variable) using <code>Ctrl + .</code></li>
<li style="list-style-type: none;"><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/1651.CSharpInlineVariable.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/1651.CSharpInlineVariable.jpg" alt="Example of inlining a variable while debugging" /></li>
</ul>
<p>*The following types of edits are not supported:</p>
<ul>
<li>Deletion of members, types, or entire method bodies</li>
<li>Modifying method signatures and renaming</li>
<li>Modifying <a href="https://msdn.microsoft.com/en-us/library/512aeb7t.aspx">generics</a>, <a href="https://msdn.microsoft.com/en-us/library/ms173156.aspx">interfaces</a>, and <a href="https://msdn.microsoft.com/en-us/library/sf985hc5.aspx">abstract types</a></li>
<li>Adding or modifying enum members to an existing enum</li>
<li>Modifying await expressions wrapped inside other expressions (e.g., <code>G(await F());</code>)</li>
</ul>
<h2>Object IDs are a hidden gem and we've modified the syntax.</h2>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/3250.objectidImage2.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/3250.objectidImage2.jpg" alt="Object IDs" /></p>
<p>Did you know <a href="https://blogs.msdn.com/b/zainnab/archive/2010/03/04/make-objectid-vstipdebug0015.aspx">you can tag an object in the debugger and refer to it later using Make Object ID</a> (even when the object is out of scope)? Did you know you could compare references of objects and verify that they refer to the same object with an Object ID tag? While Object IDs have been around for several years, few know and take advantage of this feature.</p>
<p>An Object ID is a unique identifier for an object. Because garbage collection unpredictably shifts object memory addresses, we can&rsquo;t use pointers to track objects. Instead, our debugger gives you a unique identifier and keeps track of the object's current location for you (using an aliasing mechanism in the CLR). You can use the Object ID when debugging to compare references of objects and be absolutely certain they refer to the same object. You can also use an Object ID to monitor an object when it is out of scope in the debugger.</p>
<p>Below, I am stopped at a breakpoint on line 13. I have created a Watch for <code>Circle a</code> and made an Object ID for it (<code>$1</code>). Now if I step into the initialization of <code>Circle b</code>, putting <code>Circle a</code> out of scope, I can still inspect the value of <code>Circle a</code> via its Object ID:</p>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/8715.CSharpObjectID.PNG" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/8715.CSharpObjectID.PNG" alt="Object IDs track objects even when they are out of scope" /></p>
<p>Another change to note is that we've changed the Object ID syntax for C# and Visual Basic. It is now a dollar-sign ($) followed by a numeric for both languages (e.g., <code>$1</code>). The previous syntax for Object IDs was <code>[number]#</code> for C# (e.g., <code>1#</code>) and <code>ObjID[number]</code> for Visual Basic (e.g., <code>ObjID1</code>). We chose to alter the Object ID syntax for the following reasons:</p>
<ul>
<li>The new syntax will allow us to provide a better IntelliSense experience by showing defined Object IDs in the completion list after typing the &ldquo;$&rdquo; prefix character (planned for RTM)</li>
<li>The new syntax is now consistent with <a href="https://msdn.microsoft.com/en-us/library/ms164891.aspx">other pseudo-variables</a>, (e.g. <code>$exception</code>, <a href="https://blogs.msdn.com/b/visualstudioalm/archive/2013/06/27/seeing-function-return-values-in-the-debugger-in-visual-studio-2013.aspx"><code>$ReturnValue</code></a>)</li>
</ul>
<p>Try out all these new features in <a href="https://www.visualstudio.com/downloads/visual-studio-2015-ctp-vs">Visual Studio 2015 CTP 6</a>. Let us know what you think using Visual Studio&rsquo;s <a href="https://msdn.microsoft.com/en-us/library/zzszcehe.aspx">Send a Smile feature</a>! And don&rsquo;t forget to log issues on our <a href="https://github.com/dotnet/roslyn">GitHub</a>.</p>
<p>Over 'n' out <br /> <strong>Kasey Uhlenhuth</strong>, Program Manager, <strong>Managed Languages Team</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>We're moving to GitHub!</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/were-moving-to-github</link>
      <pubDate>Sat, 10 Jan 2015 15:00:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2015/01/10/were-moving-to-github/</guid>
      <description><![CDATA[It&rsquo;s official. We&rsquo;re moving to GitHub!
We are moving the Roslyn OSS code from...]]></description>
      <content:encoded><![CDATA[<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/5340.githubBanner.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/5340.githubBanner.jpg" alt="" /></p>
<p>It&rsquo;s official. We&rsquo;re moving to GitHub!</p>
<p>We are moving the Roslyn OSS code from CodePlex to GitHub. GitHub has a vibrant open source community that we want to actively be a part of and contribute to. We are also going to take this time to modify our pull request process. Please see below for more details:</p>
<p><strong>WHEN:</strong>&nbsp; This upcoming Wednesday or Thursday, depending on whether we encounter any problems.</p>
<p><strong>WHERE:</strong> <span style="text-decoration: line-through;">Under the <a href="https://www.github.com/dotnet" target="_blank">.NET Foundation</a>. More details coming soon.</span>&nbsp;<a title="HERE!" href="https://github.com/dotnet/roslyn">HERE!</a> (Edit: 1/16/15)</p>
<p><strong>WHY:</strong> We are moving our code to GitHub as well as switching to use git internally. This means we will have fewer moving parts and will get us much closer to the same environment you&rsquo;d be using on Roslyn code. It will be <em>so</em> worth it.</p>
<p><strong>HOW:</strong> This will be a simple switch &ndash; turn off CodePlex, turn on GitHub. You&rsquo;ll be able to see our check-ins on GitHub that same day.</p>
<p><strong>DETAILS:</strong></p>
<ul>
<li>Your pull requests may pile up for a couple of weeks because we are going to take the opportunity to also streamline our (currently very complex) pull request process. We&rsquo;ll reopen in a couple weeks with a much easier process. (At this point, we&rsquo;d advise holding off on any requests sent to CodePlex.)</li>
<li>We&rsquo;ll be using GitHub Issues for both discussions and bugs after the switch.</li>
<li>We will try to move over outstanding bugs from CodePlex, but this is the trickier part of the plan.</li>
<li>We will do our best to preserve check-in history.</li>
</ul>
<p>While we are excited about this move, we might experience some hiccups along the way. Thanks for your patience while we take this next big step!</p>
<p>Stay tuned for more information later this week.</p>
<p>Over 'n' out <br /> <strong>Kasey Uhlenhuth</strong>, Program Manager, <strong>Managed Languages Team</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>Better together: C# 6 and the Visual Studio 2015 Debugger</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/better-together-c-6-and-the-visual-studio-2015-debugger</link>
      <pubDate>Thu, 11 Dec 2014 18:00:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2014/12/11/better-together-c-6-and-the-visual-studio-2015-debugger/</guid>
      <description><![CDATA["Lambdas! Lambdas! Lambdas! Lambdas! ..."
If you hadn't heard, Visual Studio 2015 will support the...]]></description>
      <content:encoded><![CDATA[<p><strong><em>"Lambdas! Lambdas! Lambdas! Lambdas! ..."</em></strong></p>
<p><a href="https://blogs.msdn.com/b/visualstudioalm/archive/2014/11/12/support-for-debugging-lambda-expressions-with-visual-studio-2015.aspx">If you hadn't heard</a>, Visual Studio 2015 will support the use of lambda expressions in the debugger windows.</p>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/2783.csharp-lambdas-in-watch.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/2783.csharp_2D00_lambdas_2D00_in_2D00_watch.png" alt="" border="0" /></p>
<p>We're all very excited to deliver on this longstanding <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2049821-allow-the-evaluation-of-lambda-expressions-while-d">TOP customer request</a>. When LINQ was introduced in 2008 it was a game changer for the way .NET developers think about and code with data. So, to finally be able to use these powerful coding constructs with the Visual Studio debugger is a match made in Redmond.</p>
<p><strong>But wait. There's more!</strong></p>
<p>The new expression evaluators (the language-specific components that enable you to run snippets of code in various debugger contexts) are the culmination of years of collaboration between the Managed Languages and Visual Studio Debugger teams, and a prime example of why <a href="https://roslyn.codeplex.com/">the "Roslyn" project</a> has been such an important investment to the future of C# and VB. But they're not the only things we've been working on. We're still working very hard to enable <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4079440-edit-continue-allow-the-modification-of-lambdas">Edit and Continue in and around lambda and query expressions</a>, and inside of <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6015600-edit-continue-in-async-methods">Async</a> and <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/4079445-edit-continue-allow-the-modification-of-iterato">iterator</a> methods (which requires deep collaboration between the VB/C# team, the VS debugger team, and the CLR team to enable) and we'll tell you more about how that's going in a future post :)</p>
<p><strong>The road behind and the road ahead</strong></p>
<p>Visual Studio has always had a world class debugging experience with tools like the <a href="https://msdn.microsoft.com/en-us/library/0taedcee.aspx">Watch</a> and <a href="https://msdn.microsoft.com/en-us/library/vstudio/f177hahy.aspx">Immediate</a> windows, and <a href="https://msdn.microsoft.com/en-us/library/vstudio/5557y8b4(v=vs.120).aspx#BKMK_Specify_a_breakpoint_condition_using_a_code_expression">conditional breakpoints</a>. And since then we've only made it better with additions such as <a href="https://msdn.microsoft.com/en-us/library/vstudio/83hd8f1e.aspx">Design-Time Expression Evaluation</a> and <a href="https://msdn.microsoft.com/en-us/library/bcew296c.aspx">Edit and Continue</a>. In parallel, the C# and Visual Basic languages have increased in expressiveness with each release, often in ways not even dreamed of when we initially built many of the foundational components of the debugger.</p>
<p>For example, the introduction of a query expression, lambda expression, yield statement, or await expression can result in the body of a method being fundamentally rewritten and even whole new methods and types being created behind the scenes. This is all mostly hidden from the developer but the debugger has to understand everything. And in the case of Edit and Continue or the expression evaluators the debugger must actually understand how to execute that rewrite on the fly. The gulf in understanding and capability between the debugger and the compiler has meant that with each release the sets of language features you can use/manipulate at design-time and at debug time have grown further apart.</p>
<p>But, I'm proud to say, that all changes with Visual Studio 2015.</p>
<p>We've rebuilt the expression evaluators on top of the "Roslyn" compilers to ensure they understand modern language constructs, and with the capability to execute exotic IL transformations that they simply weren't able to before. We're also rebuilding Edit and Continue to similarly leverage the "Roslyn" compilers to enable edits in and around more language constructs.</p>
<p>This doesn't mean every language feature will work everywhere overnight. There is still work to do to ensure everything is wired together correctly. But, it does mean that the work of plumbing language features through the debugger is a few orders of magnitude smaller than it used to be. And that's what's really got me excited! We can build great debugging experiences for existing language features <strong><em>and</em></strong> we can ensure <strong>new</strong> features have those great experiences out of the box.</p>
<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/1072.csharp-new-features-in-immediate.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x0/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/1072.csharp_2D00_new_2D00_features_2D00_in_2D00_immediate.png" alt="" border="0" /></p>
<p>The new conditional-access and interpolated string expressions are just two examples of new language features which will work in the debugger windows and with Edit and Continue on Day 1.</p>
<p><strong>Call to action: Spread the word and send us your feedback</strong></p>
<p>Help us shout it from the rooftops "LAMBDAS WORK IN THE DEBUG WINDOWS!" (Tweet it, share it, tell your friends, text your parents). Remember, <strong>this is just the beginning</strong>! If you haven't already, <a href="https://www.microsoft.com/en-us/download/details.aspx?id=44934">download the Visual Studio 2015 Preview</a> and try it out. <a href="https://msdn.microsoft.com/en-us/library/zzszcehe.aspx">Send us your feedback</a> about what you like, what you don't like, and <a href="https://visualstudio.uservoice.com/">what you'd love to see us enable next</a>.</p>
<p>Warmest regards (and Happy Holidays),</p>
<p><strong>Anthony D. Green<br /> </strong>Program Manager<br /> <strong>Visual Basic and C# Languages Team</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>New Features in C# 6</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/new-features-in-c-6</link>
      <pubDate>Thu, 20 Nov 2014 14:02:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2014/11/20/new-features-in-c-6/</guid>
      <description><![CDATA[C# 6 is the version of C# that ships with VS 2015 Preview. The philosophy behind this version is...]]></description>
      <content:encoded><![CDATA[<p><a href="https://twitter.com/MadsTorgersen" target="_blank"><img title="8053_mads160_png-160x160" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; margin: 0px 15px 0px 0px; display: inline; border-top-width: 0px" border="0" alt="8053_mads160_png-160x160" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/metablogapi/8267.8053_mads160_png160x160_6CD9160B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48-metablogapi/8267.8053_5F00_mads160_5F00_png160x160_5F00_6CD9160B.png" width="64" align="left" height="64" /></a> <strong>C# 6</strong> is the version of C# that ships with <a href="https://go.microsoft.com/fwlink/?LinkId=517033">VS 2015 Preview</a>. The philosophy behind this version is straightforward: improve simple everyday coding scenarios, without adding much conceptual baggage. The features should make code lighter without making the language heavier.</p>  <p>Some features are mostly syntactic sugar (<em>expression-bodied members</em>, <em>string interpolation</em>, <em>nameof</em>), some complete what felt a bit like unfinished work (<em>getter-only auto-properties</em>, <em>await in catch and finally</em>) or expand existing features in a natural way (<em>using static</em>, <em>index initializers</em>). Some expose expressiveness from IL that C# didn’t previously surface (<em>exception filters</em>, <em>parameterless constructors in structs</em>). Some are almost just “bug fixes” to the design, and you’ll hardly know that you’re making use of them (<em>improved overload resolution</em>, <em>extension Add methods in collection initializers</em>).</p>  <p>In the following, I’ll take you through each of these language features. We’ll start at the expression level, and work our way “outwards”. We’re quite confident that this is the set that will end up in the shipping version, but we already know that some of them will change a little. I’ll let you know when we get there.</p>  <h4>Expression-level features</h4>  <h3></h3>  <p><strong>nameof expressions</strong> are a new form of string literal that require <em>more</em> syntax and are <em>more</em> restricted than the existing kinds. What’s not to like?</p>  <p>Actually there’s a lot to like. Oftentimes you need to provide a string that names some program element: when throwing an <font face="Consolas">ArgumentNullException</font> you want to name the guilty argument; when raising a <font face="Consolas">PropertyChanged</font> event you want to name the property that changed, etc.</p>  <p>Using ordinary string literals for this purpose is simple, but error prone. You may spell it wrong, or a refactoring may leave it stale. <font face="consolas">nameof</font> expressions are essentially a fancy kind of string literal where the compiler checks that you have something of the given name, and Visual Studio knows what it refers to, so navigation and refactoring will work:</p>  <blockquote>   <p><font face="Consolas">(if x == null) throw new ArgumentNullException(<strong>nameof(x)</strong>);</font></p> </blockquote>  <p>You can put more elaborate dotted names in a <font face="consolas">nameof</font> expression, but that’s just to tell the compiler where to look: only the final identifier will be used:</p>  <blockquote>   <p><font face="Consolas">WriteLine(<strong>nameof(person.Address.ZipCode)</strong>); // prints &quot;ZipCode&quot;</font></p> </blockquote>  <p><em>Note: there are small design changes to nameof since the Preview was built. In the preview, dotted expressions like in the last example, where person is a variable in scope, are not allowed. Instead you have to dot in through the type.</em></p>  <p><strong>String interpolation</strong> lets you more easily format strings. <font face="Consolas">String.Format</font> and its cousins are very versatile, but their use is somewhat clunky and error prone. Particularly unfortunate is the use of numbered placeholders like <font face="consolas">{0}</font> in the format string, which must line up with separately supplied arguments:</p>  <blockquote>   <p><font face="consolas">var s = String.Format(&quot;{0} is {1} year{{s}} old&quot;, p.Name, p.Age);</font></p> </blockquote>  <p>String interpolation lets you put the expressions right in their place, by having “holes” directly in the string literal:</p>  <blockquote>   <p><font face="consolas">var s = &quot;<strong>\{p.Name}</strong> is <strong>\{p.Age}</strong> year{s} old&quot;;</font></p> </blockquote>  <p>Just as with <font face="consolas">String.Format</font>, optional alignment and format specifiers can be given:</p>  <blockquote>   <p><font face="consolas">var s = &quot;\{p.Name<strong>,20</strong>} is \{p.Age<strong>:D3</strong>} year{s} old&quot;;</font></p> </blockquote>  <p>The contents of the holes can be pretty much any expression, including even other strings:</p>  <blockquote>   <p><font face="consolas">var s = &quot;\{p.Name} is \{p.Age} year\{<strong>(p.Age == 1 ? &quot;&quot; : &quot;s&quot;)</strong>} old&quot;;</font></p> </blockquote>  <p>Notice that the conditional expression is parenthesized, so that the ‘<font face="consolas">: &quot;s&quot;</font>’ doesn’t get confused with a format specifier.</p>  <p><i>Note: This describes the syntax that works in the Preview. However, we’ve decided to change the syntax, to even better match that of format strings. In a later release you’ll see interpolated strings written like this:</i></p>  <blockquote>   <p><font face="consolas">var s = $&quot;{p.Name,20} is {p.Age:D3} year{{s}} old&quot;;</font></p> </blockquote>  <p><em>Also we are adding a scheme so that you can influence the formatting behavior; e.g. to use Invariant Culture. More on this in a later post.</em></p>  <p><strong>Null-conditional operators</strong> address many of the situations where code tends to drown in null-checking. They let you access members and elements only when the receiver is not-null, providing a null result otherwise:</p>  <blockquote>   <p><font face="consolas">int? length = customers<strong>?.</strong>Length; // null if customers is null         <br />Customer first = customers<strong>?[</strong>0<strong>]</strong>;&#160; // null if customers is null</font></p> </blockquote>  <p>The null-conditional operator is conveniently used together with the null-coalescing operator `<font face="consolas">??</font>` to provide a default value for when the outcome is null:</p>  <blockquote>   <p><font face="consolas">int length = customers?.Length <strong>?? 0</strong>; // 0 if customers is null</font></p> </blockquote>  <p>The null-conditional operator exhibits short-circuiting behavior, where an immediately following chain of member accesses, element accesses and invocations will only be executed if the original receiver was not null:</p>  <blockquote>   <p><font face="consolas">int? first = customers<strong>?[0].Orders.Count()</strong>; // if customers is null, the result is null</font></p> </blockquote>  <p>This example is essentially equivalent to:</p>  <blockquote>   <p><font face="consolas">int? first = (customers != null) ? customers[0].Orders.Count() : null;</font></p> </blockquote>  <p>Except that <font face="consolas">customers</font> is only evaluated once. None of the member accesses, element accesses and invocations immediately following the <font face="consolas">?</font> are executed unless <font face="consolas">customers</font> has a non-null value.</p>  <p>Of course null-conditional operators can themselves be chained, in case there is a need to check for null more than once in a chain:</p>  <blockquote>   <p><font face="consolas">int? first = customers<strong>?[</strong>0<strong>]</strong>.Orders<strong>?.</strong>Count();</font></p> </blockquote>  <p>Note that an invocation (a parenthesized argument list) cannot immediately follow the <font face="consolas">?</font> operator – that would lead to too many syntactic ambiguities. Thus, the straightforward way of calling a delegate <i>only</i> if it’s there does not work: </p>  <blockquote>   <p><font face="Consolas">if (predicate<strong><font color="#ff0000">?(e)</font></strong> ?? false) { … } <font color="#ff0000">// Error!!</font></font></p> </blockquote>  <p>However, you can do it via the <font face="consolas">Invoke</font> method on the delegate:</p>  <blockquote>   <p><font face="consolas">if (predicate<strong>?.Invoke(e)</strong> ?? false) { … }</font></p> </blockquote>  <p>We expect that a very common use of this pattern will be for triggering of events:</p>  <blockquote>   <p><font face="consolas">PropertyChanged<strong>?.Invoke</strong>(this, args);</font></p> </blockquote>  <p>This is an easy and thread-safe way to check for null before you trigger an event. The reason it’s thread-safe is that the feature evaluates the left-hand side only once, and keeps it in a temporary variable.</p>  <p><strong>Index initializers</strong> extend object initializers so that you can now initialize not only members but also indices of the newly created object:</p>  <blockquote>   <p><font face="consolas">var numbers = new Dictionary&lt;int, string&gt; {        <br />&#160;&#160;&#160; <strong>[7] = &quot;seven&quot;</strong>,         <br />&#160;&#160;&#160; <strong>[9] = &quot;nine&quot;</strong>,         <br />&#160;&#160;&#160; <strong>[13] = &quot;thirteen&quot;</strong>         <br />};</font></p> </blockquote>  <p>A common use for this would be for creating Json objects declaratively in one expression, rather than having to first create the object and then assign into it in separate statements.</p>  <p><strong>Extension Add methods</strong> are now observed in collection initializers; we used to only recognize <em>instance</em> methods called <font face="consolas">Add</font>. Just a design fix; VB already does this.</p>  <p><strong>Overload resolution</strong> has been improved in a few ways, which will likely result in more things just working the way you’d expect them to. The improvements all relate to “betterness” – the way the compiler decides which of two overloads is better for a given argument.</p>  <p>One place where you might notice this (or rather stop noticing a problem!) is when choosing between overloads taking nullable value types. Another is when passing method groups (as opposed to lambdas) to overloads expecting delegates. The details aren’t worth expanding on here – just wanted to let you know!</p>  <h4>Statement-level features</h4>  <p><strong>Exception filters</strong> are a CLR capability that is exposed in Visual Basic and F#, but hasn’t been in C# – until now. This is what they look like:</p>  <blockquote>   <p><font face="consolas">try { … }</font>       <br /><font face="consolas">catch (MyException e) <strong>if (myfilter(e))</strong>         <br />{         <br />&#160;&#160;&#160; …         <br />}</font></p> </blockquote>  <p>If the parenthesized expression after ‘<font face="consolas">if</font>’ evaluates to true, the catch block is run, otherwise the exception keeps going.</p>  <p>Exception filters are preferable to catching and rethrowing because they leave the stack unharmed. If the exception later causes the stack to be dumped, you can see where it originally came from, rather than just the last place it was rethrown.</p>  <p>It is also a common and accepted form of “abuse” to use exception filters for side effects; e.g. logging. They can inspect an exception “flying by” without intercepting its course. In those cases, the filter will often be a call to a false-returning helper function which executes the side effects:</p>  <blockquote>   <p><font face="consolas">private static bool Log(Exception e) { /* log it */ ; return false; }</font>       <br /><font face="consolas">…</font>       <br /><font face="consolas">try { … }        <br />catch (Exception e) <strong>if (Log(e))</strong> {}</font></p> </blockquote>  <p><strong>Await in catch and finally blocks</strong> has been disallowed until now. We’d somehow convinced ourselves that it wasn’t possible to implement, but now we’ve figured it out, so apparently it wasn’t impossible after all.</p>  <p>This has actually been a significant limitation, and people have had to employ unsightly workarounds to compensate. That is no longer necessary:</p>  <blockquote>   <p><font face="consolas">Resource res = null;        <br />try         <br />{         <br />&#160;&#160;&#160; res = await Resource.OpenAsync(…); // You could always do this.         <br />&#160;&#160;&#160; …         <br />}         <br />catch(ResourceException e)         <br />{         <br />&#160;&#160;&#160; <strong>await</strong> Resource.LogAsync(res, e); // Now you can do this …         <br />}         <br />finally         <br />{         <br />&#160;&#160;&#160; if (res != null) <strong>await</strong> res.CloseAsync(); // … and this.         <br />}</font></p> </blockquote>  <p>The implementation in the compiler <i>is</i> quite complicated, but you don’t have to worry about that. That’s the whole point of having async in the language: so that most of the complicated stuff is left to the compiler.</p>  <h4>Member declaration features</h4>  <p><strong>Auto-property initializers</strong> are now enabled, and are similar to initializers on fields:</p>  <blockquote>   <p><font face="consolas">public class Customer        <br />{         <br />&#160;&#160;&#160; public string First { get; set; } <strong>= &quot;Jane&quot;;</strong>         <br />&#160;&#160;&#160; public string Last { get; set; } <strong>= &quot;Doe&quot;;</strong>         <br />}</font></p> </blockquote>  <p>The initializer directly initializes the backing field; it doesn’t work through the setter of the auto-property. The initializers are executed in order as written, just as – and along with – field initializers.</p>  <p>Just like field initializers, auto-property initializers cannot reference ‘<font face="consolas">this</font>’ – after all they are executed before the object is properly initialized.</p>  <p><strong>Getter-only auto-properties </strong>allow you to omit a setter on an auto-property:</p>  <blockquote>   <p><font face="consolas">public class Customer        <br />{         <br />public string First <strong>{ get; }</strong> = &quot;Jane&quot;;         <br />public string Last <strong>{ get; }</strong> = &quot;Doe&quot;;         <br />}</font></p> </blockquote>  <p>The backing field of a getter-only auto-property is implicitly declared as <font face="consolas">readonly</font> (though this matters only for reflection purposes). It can be initialized through an initializer on the property as in the example above, or it can be assigned in the declaring type’s constructor body, which causes the value to be assigned directly to the underlying field:</p>  <blockquote>   <p><font face="consolas">public class Customer        <br />{         <br />&#160;&#160;&#160; public string Name { get; };</font>       <br />&#160;&#160;&#160;&#160;&#160;&#160; <font face="consolas">public Customer(string first, string last)        <br />&#160;&#160;&#160; {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <strong>Name = </strong>first + &quot; &quot; + last;         <br />&#160;&#160;&#160; }         <br />}</font></p> </blockquote>  <p>This is about expressing types more concisely, but note that it also removes an important difference in the language between mutable and immutable types: auto-properties were a shorthand available only if you were willing to make your class mutable, and so the temptation to default to that was great. Now, with getter-only auto-properties, the playing field has been leveled between mutable and immutable.</p>  <p><strong>Expression-bodied function members</strong> allow methods, properties and other kinds of function members to have bodies that are expressions instead of statement blocks, just like with lambda expressions.</p>  <p>Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”:</p>  <blockquote>   <p><font face="consolas">public Point Move(int dx, int dy) <strong>=&gt; </strong>new Point(x + dx, y + dy)<strong>;</strong> </font>      <br /><font face="consolas">public static Complex operator +(Complex a, Complex b) <strong>=&gt; </strong>a.Add(b)<strong>;</strong></font>       <br /><font face="consolas">public static implicit operator string(Person p) <strong>=&gt; </strong>&quot;\{p.First} \{p.Last}&quot;<strong>;</strong></font></p> </blockquote>  <p>The effect is exactly the same as if the methods had had a block body with a single return statement.</p>  <p>For void returning methods – and <font face="consolas">Task</font> returning async methods – the arrow syntax still applies, but the expression following the arrow must be a statement expression (just as is the rule for lambdas):</p>  <blockquote>   <p><font face="consolas">public void Print() <strong>=&gt;</strong> Console.WriteLine(First + &quot; &quot; + Last)<strong>;</strong></font></p> </blockquote>  <p>Properties and indexers can have getters and settersgetter-only properties and indexers can have an expression body:</p>  <blockquote>   <p><font face="consolas">public string Name <strong>=&gt;</strong> First + &quot; &quot; + Last<strong>;</strong></font>       <br /><font face="consolas">public Customer this[long id] <strong>=&gt;</strong> store.LookupCustomer(id)<strong>;</strong> </font></p> </blockquote>  <p>Note that there is no <font face="consolas">get</font> keyword: it is implied by the use of the expression body syntax.</p>  <p><strong>Parameterless constructors in structs</strong> are now allowed:</p>  <blockquote>   <p><font face="CONSOLAS">struct Person        <br />{         <br />&#160;&#160;&#160; public string Name { get; }         <br />&#160;&#160;&#160; public int Age { get; }</font>       <br /><font face="CONSOLAS">&#160;&#160;&#160; public Person(string name, int age) { Name = name; Age = age; }</font>       <br /><font face="CONSOLAS"><font face="CONSOLAS">&#160;&#160;&#160; </font>public <strong>Person()</strong> : this(&quot;Jane Doe&quot;, 37) { }         <br />}</font></p> </blockquote>  <p>The expression ‘<font face="consolas">new Person()</font>’ will execute the declared constructor instead of the standard behavior of providing the default value. Note, however, that ‘<font face="consolas">default(Person)</font>’ will still produce the default value, as will ‘<font face="consolas">new Person[…]</font>’ for each of the array elements. In those cases the constructor is <i>not</i> executed: It’s only when you explicitly use ‘<font face="consolas">new</font>’ on the struct type.</p>  <h4>Import features</h4>  <p><strong>using static</strong> is a new kind of using clause that lets you import static members of types directly into scope.</p>  <p>In the Preview it looks like this:</p>  <blockquote>   <p><font face="consolas"><strong>using System.Console;          <br />using System.Math;</strong></font></p>    <p><font face="consolas">class Program        <br />{         <br />&#160;&#160;&#160; static void Main()         <br />&#160;&#160;&#160; {         <br />&#160;&#160;&#160;&#160;&#160;&#160;&#160; <strong>WriteLine</strong>(<strong>Sqrt</strong>(3*3 + 4*4));         <br />&#160;&#160;&#160; }         <br />}</font></p> </blockquote>  <p>This is great for when you have a set of functions related to a certain domain that you use all the time. <font face="consolas">System.Math</font> would be a common example of that.</p>  <p><em>Note: The Preview will only import members of static classes. We have since changed the design in several ways:</em></p>  <ol>   <li><em>The syntax will be more different from current using clauses – it will have the keywords “</em><font face="consolas">using static</font><em>”.</em> </li>    <li><em>Members of non-static types can be imported, including structs and en ums</em> </li>    <li><em>Members of VB modules and F# top level functions can be imported</em> </li>    <li><em>Extension methods will not be imported into top-level scope; instead they will show up as extension methods. This gives a way to import extension methods from just a single class, something which wasn’t possible before.</em> </li> </ol>  <h4>Want to try it out?</h4>  <p>Download <a href="https://go.microsoft.com/fwlink/?LinkId=517033">VS 2015 Preview</a> and <a href="https://roslyn.codeplex.com/discussions">tell us what you think</a>. Happy Hacking!</p>  <p><a href="https://twitter.com/MadsTorgersen" target="_blank"><img title="DSC07122 (3)" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; margin: 0px 25px 0px 0px; display: inline; border-top-width: 0px" border="0" alt="DSC07122 (3)" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/metablogapi/0576.DSC071223_1A5A35CF.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48-metablogapi/0576.DSC071223_5F00_1A5A35CF.jpg" width="119" align="left" height="121" /></a></p>  <p><strong>Mads Torgersen</strong>, Principal Program Manager, VS Managed Languages</p>  <p>Mads is the PM for the C# programming language at Microsoft. He runs the design meetings and maintains the language specification. He is also involved in the design of Visual Basic and TypeScript.</p>]]></content:encoded>
    </item>
    <item>
      <title>Post-Release Goodies</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/post-release-goodies</link>
      <pubDate>Wed, 19 Nov 2014 10:11:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2014/11/19/post-release-goodies/</guid>
      <description><![CDATA[The Rosetta lander Philae wasn't the only thing in space last week. Our launch of Visual Studio...]]></description>
      <content:encoded><![CDATA[<p><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/35/13/4682.mooncomic.jpg" original-url="https://blogs.msdn.com/cfs-filesystemfile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-13/4682.mooncomic.jpg" alt="" /></p>
<p>The <a href="https://www.esa.int/Our_Activities/Space_Science/Rosetta/Touchdown!_Rosetta_s_Philae_probe_lands_on_comet">Rosetta lander Philae</a> wasn't the only thing in space last week. Our <a href="https://blogs.msdn.com/b/somasegar/archive/2014/11/12/opening-up-visual-studio-and-net-to-every-developer-any-application-net-server-core-open-source-and-cross-platform-visual-studio-community-2013-and-preview-of-visual-studio-2015-and-net-2015.aspx">launch of Visual Studio 2015 Preview</a> and our <a href="https://news.microsoft.com/2014/11/12/microsoft-takes-net-open-source-and-cross-platform-adds-new-development-capabilities-with-visual-studio-2015-net-2015-and-visual-studio-online/"> announcement to open source the full .NET server stack</a> were out of this world. After all, it&rsquo;s not every day that you can say your work trended higher than Kim Kardashian on Twitter.</p>
<p>After an <a href="https://twitter.com/defunkt/status/533148064148881408">overwhelmingly positive reception</a> to the news of <a href="https://www.geekwire.com/2014/net-turnaround-microsoft-finally-peace-open-source/">.NET going open source</a>, we want to make sure you know how and where to contribute. The <a href="https://github.com/dotnet/corefx/pulls">.NET Core repository</a> already has closed about 80 pull-requests (with the majority being merged) and there are some great community efforts going on right now. Here are some links to get you started:</p>
<div>
<ul>
<li><a href="https://roslyn.codeplex.com/"><strong>Contribute to "Roslyn" on Codeplex</strong></a>: Roslyn contains our C# and Visual Basic compilers as well as the rich code analysis APIs that we use to implement tools in Visual Studio.</li>
<li><a href="https://github.com/Microsoft/dotnet"><strong>Contribute to .NET on GitHub</strong></a>: This is a great place to find .NET open source projects from Microsoft and to read more about how you can contribute your own projects.</li>
<li><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/714"><strong>Build "analyzers" to fix your code</strong></a>: The community has created some really incredible analyzers already. Ones that we have seen so far include <a href="https://github.com/code-cracker/code-cracker">CodeCracker</a>, <a href="https://github.com/IntelliTect/DotNetAnalyzers">DotNetAnalyzers</a>, and <a href="https://bit.ly/WintellectAnalyzers">WintellectAnalyzers</a>. Thank you all for your contributions--these are really impressive!</li>
</ul>
<p>Here are some analyzers from our very own <a href="https://twitter.com/lwischik">Lucian Wischik</a>:</p>
<p><strong>Analyzer 1: UseElvisCS.</strong> Although the <strong>?.</strong> operator is built into C#6 and VB14, the warning squiggle and code-fix in this video are not built in. Lucian wrote them himself via a simple "analyzer" (source code <a href="https://github.com/ljw1004/dotnet-code-analyzer/blob/master/dotnet-code-analyzer/Analyzer_NewLangFeatures_VS2015/UseElvisCS.vb">here</a> on GitHub). An important feature of VS2015 is that you can write your own refactorings, analyzers and code-fixes.<br /><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/35/13/2818.analyzer1.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-13/2818.analyzer1.gif" alt="" /></p>
<p><strong>Analyzer 2: UseStaticChangedCS.</strong> This analyzer looks for every place where you construct an instance of PropertyChangedEventArgs in something other than a static field. Its fix Is to instead construct the instance in a static field (source code is <a href="https://github.com/ljw1004/dotnet-code-analyzer/blob/master/dotnet-code-analyzer/Analyzer_XamlAppTips/UseStaticChangedCS.vb">here</a>).<br /><img src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/35/13/8321.analyzer2.gif" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-35-13/8321.analyzer2.gif" alt="" /></p>
<p><strong>Remember, keep your eyes peeled for the <a href="https://blogs.msdn.com/b/csharpfaq/">C#</a> and <a href="https://blogs.msdn.com/b/vbteam/">Visual Basic</a> team&rsquo;s Preview posts that will be coming out soon. </strong>In the meantime, check out our&nbsp;<a href="https://blogs.msdn.com/b/vbteam/archive/2014/11/12/introducing-the-visual-studio-2015-preview-for-c-and-vb.aspx">Preview overview post</a> and our <a href="https://blogs.msdn.com/b/vbteam/archive/2014/11/12/short-videos-demonstrating-what-s-new-in-visual-studio-2015-preview-for-c-vb-and-f.aspx">short videos highlighting some new features and experiences</a> you can expect to see in <a href="https://www.microsoft.com/en-us/download/details.aspx?id=44934">Visual Studio 2015 Preview</a>.</p>
<p>Over 'n' out <br /> <strong>Kasey Uhlenhuth</strong>, Program Manager, <strong>Managed Languages Team</strong></p>
</div>]]></content:encoded>
    </item>
    <item>
      <title>Short Videos Demonstrating What’s New in Visual Studio 2015 Preview for C#, VB, and F#</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/short-videos-demonstrating-whats-new-in-visual-studio-2015-preview-for-c-vb-and-f</link>
      <pubDate>Wed, 12 Nov 2014 13:35:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2014/11/12/short-videos-demonstrating-whats-new-in-visual-studio-2015-preview-for-c-vb-and-f/</guid>
      <description><![CDATA[Our team has put together a set of short videos to highlight some of our work in Visual Studio 2015...]]></description>
      <content:encoded><![CDATA[<p>Our team has put together a set of short videos to highlight some of our work in <a href="https://go.microsoft.com/fwlink/?linkid=517106">Visual Studio 2015 Preview</a>. Check them out to learn more about what&rsquo;s new in C# and VB, how F# can be good for enterprise, and how to improve your code quality with &ldquo;analyzers&rdquo;. To learn more about our team&rsquo;s work in Visual Studio 2015 Preview, check out our <a href="https://blogs.msdn.com/b/csharpfaq/archive/2014/11/12/introducing-the-visual-studio-2015-preview-for-c-and-vb.aspx">overview post</a>.</p>
<table>
<tbody>
<tr>
<td style="vertical-align: top;"><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/116"><img style="max-height: 171px; max-width: 330px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/6406.mads_vid.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x285/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/6406.mads_5F00_vid.png" alt="" border="0" /></a>&nbsp;</td>
<td>
<p><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/116"><strong>What's New in C# 6.0 | Mads Torgersen</strong></a></p>
<p>C# 6.0 adds about a dozen bite-sized new features to C#, all aimed at making your code cleaner and clearer. Instead of introducing new concepts, each feature makes a common coding pattern simpler, and removes boilerplate code to let the intent of the code stand out. The video takes a quick tour through the new features: auto-properties without setters, methods and properties with expression bodies, member access that protects against null, interpolated strings and much more.</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/113"><img style="max-height: 171px; max-width: 330px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/3660.lucian_vid.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x285/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/3660.lucian_5F00_vid.png" alt="" border="0" /></a></td>
<td>
<p><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/113"><strong>What's New in Visual Basic 14 | Lucian Wischik</strong></a></p>
<p>VB14 has a host of improvements across the board. In the IDE, it now includes refactoring, the ability to organize imports, better cref support, and more. Visual Basic 14 projects show metadata as source, display the References node in the Solution Explorer, support Shared Projects, and compile 50% faster. The Visual Basic language has improvements in existing features like comments within LINQ, read-only auto-properties, and multi-line string literals. It also adds new features like NameOf, member access that protects against NullReferenceException, and string interpolation. This video is a quick tour of the highlights.</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/115"><img style="max-height: 171px; max-width: 330px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/7140.lincoln_vid.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x285/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/7140.lincoln_5F00_vid.png" alt="" border="0" /></a></td>
<td>
<p><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/115"><strong>Introducing F# for the Enterprise | Lincoln Atkinson</strong></a></p>
<p>Have you looked at F# for your projects recently?&nbsp; F# is a mature .NET language that's functional-first, cross-platform, open source, and enterprise-ready. You can find the beginnings of Visual F# 4.0, the next F# language and tools version, in Visual Studio 2015 Preview.&nbsp; If you're curious about F# and want to learn more, take a few minutes to watch this video. We'll cover some of the unique benefits F# has to offer, walk through a bit of F# WPF code, and leave you with some pointers to great F# resources on the web.</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/714"><img style="max-height: 171px; max-width: 330px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/5732.alex_vid.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/550x285/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/5732.alex_5F00_vid.png" alt="" border="0" /></a></td>
<td>
<p><a href="https://channel9.msdn.com/Events/Visual-Studio/Connect-event-2014/714"><strong>Improving Your Code Quality using Live Code Analyzers | Alex Turner</strong></a></p>
<p>Live Code Analyzers are used to add custom error messages and warnings that appear live as you're typing, along with automatic code fixes to help you clean them up. They are available as NuGet packages that you add to your projects in Visual Studio 2015. In this video, you'll see how the FxCop analyzer package now helps you improve your code even before you build.&nbsp;You'll also see the Azure Code Analysis package, which teaches you best practices for building Azure apps by spotting bugs the moment you introduce them.<strong></strong></p>
</td>
</tr>
</tbody>
</table>
<p>Over 'n' out <br /> <strong> Kasey Uhlenhuth</strong>, Program Manager, <strong>Managed Languages Team</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>Introducing the Visual Studio 2015 Preview for C# and VB</title>
      <link>https://review.docs.microsoft.com/archive/blogs/csharpfaq/introducing-the-visual-studio-2015-preview-for-c-and-vb</link>
      <pubDate>Wed, 12 Nov 2014 07:35:00 GMT</pubDate>
      <dc:creator><![CDATA[CSharpFAQ]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/csharpfaq/2014/11/12/introducing-the-visual-studio-2015-preview-for-c-and-vb/</guid>
      <description><![CDATA[Download Visual Studio 2015 Preview and review the release notes.
Over the past several years, our...]]></description>
      <content:encoded><![CDATA[<p><strong>Download <a href="https://go.microsoft.com/fwlink/?LinkId=517033">Visual Studio 2015 Preview</a> and review the <a href="https://go.microsoft.com/fwlink/?linkid=517106">release notes</a>.</strong></p>
<p>Over the past several years, our team has been hard at work <a href="https://blogs.msdn.com/b/jasonz/archive/2012/06/05/announcing-microsoft-roslyn-june-2012-ctp.aspx">re-implementing the full language stacks</a> for C# and Visual Basic. While this was a long investment, we knew that an improved stack with a cleaner architecture would allow our team to work faster, empower others to build "code smart" tools and applications, and create a richer and smarter IDE experience in Visual Studio.</p>
<p>Today, we are pleased to announce that this work has culminated with the <a href="https://blogs.msdn.com/b/somasegar/archive/2014/11/12/opening-up-visual-studio-and-net-to-every-developer-any-application-net-server-core-open-source-and-cross-platform-visual-studio-community-2013-and-preview-of-visual-studio-2015-and-net-2015.aspx">release of Visual Studio 2015 Preview</a>. Visual Studio 2015 Preview showcases many improvements&mdash;new language features, smarter and better IDE experiences, improved debugging, and code-aware "diagnostic analyzers"&mdash;that we believe make it the best version of Visual Studio to date. Our team will publish detailed blog posts on these improvements over the next couple weeks on the <a href="https://blogs.msdn.com/b/csharpfaq/">C#</a>, <a href="https://blogs.msdn.com/b/vbteam/">Visual Basic</a>, and <a href="https://blogs.msdn.com/b/fsharpteam/">F#</a> blogs. In the meantime, here are some of the upcoming posts:</p>
<table style="border: 0px; padding: 10px; margin-left: 25px;">
<tbody>
<tr>
<td style="vertical-align: top;"><a href="https://twitter.com/dcampbell"><img style="max-height: 80px; max-width: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/0458.dustin160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/0458.dustin160.png" alt="" border="0" /></a><a href="https://twitter.com/dcampbell"><br /></a>&nbsp;</td>
<td style="padding-left: 15px;"><a href="https://blogs.msdn.com/b/visualstudio/archive/2014/11/12/the-c-and-visual-basic-code-focused-ide-experience.aspx"><strong>IDE Improvements | Dustin Campbell</strong></a>
<p>The IDE experiences have been brought to life! Every core C# and Visual Basic IDE feature has been completely rebuilt and refreshed. Dustin&rsquo;s post will walk through some of the highlights and drill into new experiences around live code analysis and automated refactorings.</p>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://twitter.com/MadsTorgersen"><img style="max-height: 80px; max-width: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/8053.mads160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/8053.mads160.png" alt="" border="0" /></a></td>
<td style="padding-left: 15px;"><a href="https://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx"><strong>C#: New Language Features | Mads Torgersen</strong></a>
<p>VS 2015 Preview includes C# 6, the latest installment of the language. C# 6 aims at making your everyday code cleaner without adding new concepts, helping remove boilerplate code and making your intent stand out more clearly. Mads&rsquo; post will take you through the dozen or so little features, including the null conditional dot (<strong>?.</strong>) to make null checking fade into the background, string interpolation for easy formatting, and a refactoring-safe <strong>nameof</strong> operator to get the names of program elements as text.</p>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://twitter.com/lwischik"><img style="max-width: 80px; max-height: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/7024.lucian160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/7024.lucian160.png" alt="" border="0" /></a></td>
<td style="padding-left: 15px;"><a href="https://blogs.msdn.com/b/vbteam/archive/2014/12/09/new-language-features-in-visual-basic-14.aspx"><strong>Visual Basic: New Language Features | Lucian Wischik</strong></a>
<p>In Visual Basic we're adding the same key new language features as C# for reducing boilerplate code. In addition we&rsquo;ve rounded out lots of existing language features, mainly in response to user requests. ReadOnly auto-properties are a big favorite, along with multi-line string literals, comments within multiline LINQ queries, year-first date literals, partial interfaces and many more.</p>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><img style="max-height: 80px; max-width: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/1541.anthony160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/1541.anthony160.png" alt="" border="0" /></td>
<td style="padding-left: 15px;"><a href="https://blogs.msdn.com/b/csharpfaq/archive/2014/12/11/better-together-c-6-and-the-visual-studio-2015-debugger.aspx"><strong>Debugging Improvements | Anthony D. Green</strong></a>
<p>Anthony&rsquo;s post will discuss our improvements to the C# and VB debugging experiences in Visual Studio 2015 Preview, including more extensive support for modern language features like LINQ queries, lambda expressions, and extension methods, which can now be used in the Watch window, Immediate window, conditional breakpoints, and other debugger contexts.</p>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://twitter.com/TheTuvix"><img style="max-height: 80px; max-width: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/3704.alex160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/3704.alex160.png" alt="" border="0" /></a></td>
<td style="padding-left: 15px;"><strong>Diagnostic Analyzers &amp; Code Fixes | Alex Turner</strong>
<p>Alex&rsquo;s post will introduce everyone to diagnostic analyzers. Diagnostic analyzers are a key new feature of Visual Studio 2015 that lets a NuGet package enable custom warnings and errors in the editor live as you type, with automatic code fixes that can clean up those issues for you. Packages can even be bundled together as a &ldquo;code-aware library&rdquo; that pulls in both an API and the domain-specific analyzers to make sure that you stay on course when using it &ndash; you&rsquo;ll have targeted guidance from the moment you download the NuGet package. And because these analyzers are part of your project, everyone on your team gets to see the same warnings.</p>
<p>You can download a preview of the <a href="https://aka.ms/azurecodeanalysis">Code Analysis for Azure</a> package now, and we expect many more analyzers to be available soon.</p>
<p>&nbsp;</p>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="https://twitter.com/LincolnAtkinson"><img style="max-height: 80px; max-width: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/6521.lincoln160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/6521.lincoln160.png" alt="" border="0" /></a></td>
<td style="padding-left: 15px;"><a href="https://blogs.msdn.com/b/fsharpteam/archive/2014/11/12/announcing-a-preview-of-f-4-0-and-the-visual-f-tools-in-vs-2015.aspx"><strong>F#: A Preview of F# 4.0 | Lincoln Atkinson</strong></a>
<p>The F# language and tooling continues to evolve with Visual F# 4.0, developed in partnership with our active open source developer community.&nbsp; Lincoln&rsquo;s post will walk you through the numerous enhancements and features that are ready today: constructors as first-class functions, simplified mutable values, a greatly expanded core library, improved project templates, and much more. Read this post to learn how to install the latest Visual F# update on top of VS 2015 Preview.</p>
</td>
</tr>
</tbody>
</table>
<p><a href="https://go.microsoft.com/fwlink/?LinkId=517033"><strong>Download Visual Studio 2015 Preview</strong></a>. Please help us improve your developer experience by sending a &ldquo;smile&rdquo; from Visual Studio, providing feedback on <a href="https://visualstudio.uservoice.com/forums/121579-visual-studio">UserVoice</a>, joining our language discussions on <a href="https://roslyn.codeplex.com/discussions">Codeplex</a>, or filing bugs on <a href="https://connect.microsoft.com/visualstudio">Connect</a>!</p>
<p>Don&rsquo;t forget to keep an eye on our blogs (<a href="https://blogs.msdn.com/b/csharpfaq/">C#</a>, <a href="https://blogs.msdn.com/b/vbteam/">Visual Basic</a>, <a href="https://blogs.msdn.com/b/fsharpteam/">F#</a>) for more details over the next couple of weeks.</p>
<table>
<tbody>
<tr>
<td><a href="https://twitter.com/kuhlenhuth"><img style="max-height: 80px; max-width: 80px;" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/33/48/6012.kasey160.png" original-url="https://blogs.msdn.com/resized-image.ashx/__size/160x160/__key/communityserver-blogs-components-weblogfiles/00-00-00-33-48/6012.kasey160.png" alt="" border="0" /></a>&nbsp;</td>
<td>
<p>Over 'n' out,<br /> <strong>Kasey Uhlenhuth</strong>, Program Manager, <strong>Managed Languages Team</strong></p>
</td>
</tr>
</tbody>
</table>]]></content:encoded>
    </item>
  </channel>
</rss>