<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Csharp-tips on Code4IT</title>
    <link>https://www.code4it.dev/csharp-tip/</link>
    <description>Recent content in Csharp-tips on Code4IT</description>
    <generator>Hugo -- gohugo.io</generator>
    <lastBuildDate>Tue, 24 Mar 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://www.code4it.dev/csharp-tip/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>C# Tip: How to JSON Serialize and Deserialize values as DateTime, DateTimeOffset, DateOnly and TimeOnly</title>
      <link>https://www.code4it.dev/csharptips/json-serialize-deserialize-dates/</link>
      <pubDate>Tue, 24 Mar 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/json-serialize-deserialize-dates/</guid>
      <description>Handling dates is never trivial. And handling JSON serialization and deserialization of dates is even more difficult. And, even worse, how can you convert a value as DateTime, DateTimeOffset, DateOnly and TimeOnly?</description>
    </item>
    
    <item>
      <title>[C# Tip] How to create and access custom C# Attributes by using Reflection</title>
      <link>https://www.code4it.dev/csharptips/custom-csharp-attributes-reflection/</link>
      <pubDate>Tue, 16 Dec 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/custom-csharp-attributes-reflection/</guid>
      <description>In C#, Attributes are a handy mechanism to attach metadata to your classes, methods, properties, etc. In this article, we will see how to create custom Attributes and access them at runtime using Reflection.</description>
    </item>
    
    <item>
      <title>C# Tip: injecting and testing the current time with TimeProvider and FakeTimeProvider</title>
      <link>https://www.code4it.dev/csharptips/timeprovider-faketimeprovider/</link>
      <pubDate>Tue, 02 Sep 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/timeprovider-faketimeprovider/</guid>
      <description>Dates used to be difficult to test. But with TimeProvider and FakeTimeProvider, everything becomes possible!</description>
    </item>
    
    <item>
      <title>C# Tip: Handling exceptions with Task.WaitAll and Task.WhenAll</title>
      <link>https://www.code4it.dev/csharptips/task-whenall-vs-task-waitall-error-handling/</link>
      <pubDate>Tue, 10 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/task-whenall-vs-task-waitall-error-handling/</guid>
      <description>Task.WhenAll and Task.WaitAll are common methods in C# that allow you to execute multiple Tasks. But&amp;hellip; what happens when an exception is thrown?</description>
    </item>
    
    <item>
      <title>C# Tip: An In-Depth Look at CallerMemberName (and some Compile-Time trivia)</title>
      <link>https://www.code4it.dev/csharptips/callermembername-attribute/</link>
      <pubDate>Tue, 25 Mar 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/callermembername-attribute/</guid>
      <description>Let&amp;rsquo;s dive deep into the CallerMemberName attribute and explore its usage from multiple angles. We&amp;rsquo;ll see various methods of invoking it, shedding light on how it is defined at compile time.</description>
    </item>
    
    <item>
      <title>C# Tip: How to create Custom Attributes, and why they are useful</title>
      <link>https://www.code4it.dev/csharptips/create-custom-csharp-attributes/</link>
      <pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/create-custom-csharp-attributes/</guid>
      <description>Applying custom attributes to C# classes and interfaces can be useful for several reasons. Let&amp;rsquo;s learn how to create Custom Attributes in C#, and let&amp;rsquo;s explore some practical usage!</description>
    </item>
    
    <item>
      <title>C# Tip: 2 ways to generate realistic data using Bogus</title>
      <link>https://www.code4it.dev/csharptips/bogus-data-generation/</link>
      <pubDate>Tue, 03 Dec 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/bogus-data-generation/</guid>
      <description>Bogus is a library that generates realistic values for your data. When populating fake user names, instead of Foo and Bar, you can have John and Sarah. Let&amp;rsquo;s see two ways to define and reuse a Faker definition.</description>
    </item>
    
    <item>
      <title>C# Tip: IEnumerable vs ICollection, and why it matters</title>
      <link>https://www.code4it.dev/csharptips/ienumerable-vs-icollection/</link>
      <pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/ienumerable-vs-icollection/</guid>
      <description>When working with Lists in C#, you are working on a data structure that implements both ICollection and IEnumerable. What&amp;rsquo;s the difference between ICollection and IEnumerable? Why should you care about them, especially when exposing functionalities to external clients?</description>
    </item>
    
    <item>
      <title>C# Tip: 2 ways to use custom equality rules in a HashSet</title>
      <link>https://www.code4it.dev/csharptips/hashset-custom-equality/</link>
      <pubDate>Tue, 27 Aug 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/hashset-custom-equality/</guid>
      <description>With HashSet, you can get a list of different items in a performant way. What if you need a custom way to define when two objects are equal?</description>
    </item>
    
    <item>
      <title>C# Tip: Mark a class as Sealed to prevent subclasses creation</title>
      <link>https://www.code4it.dev/csharptips/sealed-classes/</link>
      <pubDate>Tue, 16 Jul 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/sealed-classes/</guid>
      <description>The sealed keyword is often ignored, yet it can be important to define a proper class design.</description>
    </item>
    
    <item>
      <title>C# Tip: Path.Combine and Path.Join are similar but way different.</title>
      <link>https://www.code4it.dev/csharptips/path-combine-vs-path-join/</link>
      <pubDate>Tue, 25 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/path-combine-vs-path-join/</guid>
      <description>When composing the path to a folder or file location, the &lt;code&gt;Path&lt;/code&gt; class can come in handy. &lt;code&gt;Path.Join&lt;/code&gt; and &lt;code&gt;Path.Combine&lt;/code&gt; may look similar, but their behavior differ in an unexpected way.</description>
    </item>
    
    <item>
      <title>C# Tip: IFormattable interface, to define different string formats for the same object</title>
      <link>https://www.code4it.dev/csharptips/iformattable-interface/</link>
      <pubDate>Tue, 27 Feb 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/iformattable-interface/</guid>
      <description>Same object, different string representations. How do we achieve it in a standardised way?</description>
    </item>
    
    <item>
      <title>C# Tip: ObservableCollection - a data type to intercept changes to the collection</title>
      <link>https://www.code4it.dev/csharptips/observablecollection/</link>
      <pubDate>Tue, 23 Jan 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/observablecollection/</guid>
      <description>&lt;code&gt;ObservableCollection&amp;lt;T&amp;gt;&lt;/code&gt; is a data type that allows you to react when an item is added or removed from the collection. Let&amp;rsquo;s learn more!</description>
    </item>
    
    <item>
      <title>C# Tip: Use TestCase to run similar unit tests with NUnit</title>
      <link>https://www.code4it.dev/csharptips/nunit-testcase/</link>
      <pubDate>Tue, 28 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/nunit-testcase/</guid>
      <description>Learn how to organize similar unit tests using the &lt;code&gt;TestCase&lt;/code&gt; attribute in NUnit!</description>
    </item>
    
    <item>
      <title>C# Tip: How to create Unit Tests for Model Validation</title>
      <link>https://www.code4it.dev/csharptips/unit-test-model-validation/</link>
      <pubDate>Tue, 24 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/unit-test-model-validation/</guid>
      <description>As you know, you should always validate input models. Therefore, you should create Unit Tests to test the data validation. Let&amp;rsquo;s learn!</description>
    </item>
    
    <item>
      <title>C# Tip: Improve memory allocation by initializing collection size</title>
      <link>https://www.code4it.dev/csharptips/initialize-collection-size/</link>
      <pubDate>Tue, 26 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/initialize-collection-size/</guid>
      <description>Sometimes just a minor change can affect performance. Here&amp;rsquo;s a simple trick: initialize your collections by specifying the initial size!</description>
    </item>
    
    <item>
      <title>C# Tip: 2 ways to define ASP.NET Core custom Middleware</title>
      <link>https://www.code4it.dev/csharptips/custom-middleware/</link>
      <pubDate>Tue, 11 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/custom-middleware/</guid>
      <description>Customizing the behavior of an HTTP request is easy: you can use a middleware defined as a delegate or as a class.</description>
    </item>
    
    <item>
      <title>C# Tip: Use custom Equality comparers in Nunit tests</title>
      <link>https://www.code4it.dev/csharptips/nunit-equals-custom-comparer/</link>
      <pubDate>Tue, 13 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/nunit-equals-custom-comparer/</guid>
      <description>When writing unit tests, there are smarter ways to check if two objects are equal than just comparing every field one by one.</description>
    </item>
    
    <item>
      <title>C# Tip: Advanced Switch Expressions and Switch Statements using filters</title>
      <link>https://www.code4it.dev/csharptips/switch-expressions-and-statements/</link>
      <pubDate>Tue, 16 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/switch-expressions-and-statements/</guid>
      <description>We all use &lt;code&gt;switch&lt;/code&gt; statements in our code. Do you use them at their full potential?</description>
    </item>
    
    <item>
      <title>C# Tip: Format Interpolated Strings</title>
      <link>https://www.code4it.dev/csharptips/format-interpolated-strings/</link>
      <pubDate>Tue, 02 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/format-interpolated-strings/</guid>
      <description>Interpolated strings are those built with the &lt;code&gt;$&lt;/code&gt; symbol, that you can use to create strings using existing variables or properties. Did you know that you can apply custom formattings to such values?</description>
    </item>
    
    <item>
      <title>C# Tip: Access items from the end of the array using the ^ operator</title>
      <link>https://www.code4it.dev/csharptips/access-items-from-end-of-array/</link>
      <pubDate>Tue, 11 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/access-items-from-end-of-array/</guid>
      <description>Shorter code is often easier to read. Not always, but often. And the &lt;code&gt;^&lt;/code&gt; operator can make your code easier to read and less error-prone</description>
    </item>
    
    <item>
      <title>C# Tip: Initialize lists size to improve performance</title>
      <link>https://www.code4it.dev/csharptips/initialize-lists-size/</link>
      <pubDate>Tue, 28 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/initialize-lists-size/</guid>
      <description>Lists have an inner capacity. Every time you add more items than the current Capacity, you add performance overhead. How to prevent it?</description>
    </item>
    
    <item>
      <title>C# Tip: List Pattern to match an collection against a sequence of patterns</title>
      <link>https://www.code4it.dev/csharptips/list-pattern/</link>
      <pubDate>Tue, 14 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/list-pattern/</guid>
      <description>By using list patterns on an array or a list you can check whether a it contains the values you expect in a specific position.</description>
    </item>
    
    <item>
      <title>C# Tip: do NOT use nameof to give constants a value</title>
      <link>https://www.code4it.dev/csharptips/do-not-use-nameof-for-constants/</link>
      <pubDate>Tue, 31 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/do-not-use-nameof-for-constants/</guid>
      <description>In C#, nameof can be quite useful. But it has some drawbacks, if used the wrong way.</description>
    </item>
    
    <item>
      <title>C# Tip: LINQ&#39;s Enumerable.Range to generate a sequence of consecutive numbers</title>
      <link>https://www.code4it.dev/csharptips/enumerable-range/</link>
      <pubDate>Tue, 17 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/enumerable-range/</guid>
      <description>If you need a sequence of numbers, you can pick two ways: use a While loop, or use Enumerable.Range</description>
    </item>
    
    <item>
      <title>C# Tip: Raise synchronous events using Timer (and not a While loop)</title>
      <link>https://www.code4it.dev/csharptips/timer-to-trigger-synchronous-events/</link>
      <pubDate>Tue, 29 Nov 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/timer-to-trigger-synchronous-events/</guid>
      <description>When you need to fire synchronous events, don&amp;rsquo;t use a while(true) loop: use a Timer!</description>
    </item>
    
    <item>
      <title>C# Tip: use the @ prefix when a name is reserved</title>
      <link>https://www.code4it.dev/csharptips/use-at-symbol-prefix/</link>
      <pubDate>Tue, 25 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/use-at-symbol-prefix/</guid>
      <description>C#, as every other language, has several reserved keywords. Did you know that you can use them if you use the &lt;code&gt;@&lt;/code&gt; prefix?</description>
    </item>
    
    <item>
      <title>C# Tip: use Miniprofiler instead of Stopwatch to profile code performance</title>
      <link>https://www.code4it.dev/csharptips/profile-code-with-miniprofiler/</link>
      <pubDate>Tue, 13 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/profile-code-with-miniprofiler/</guid>
      <description>Miniprofiler is a nice tool to profile your code in a smart way.</description>
    </item>
    
    <item>
      <title>C# Tip: SelectMany in LINQ</title>
      <link>https://www.code4it.dev/csharptips/linq-selectmany/</link>
      <pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/linq-selectmany/</guid>
      <description>SelectMany is one of the LINQ methods I&amp;rsquo;ve used the least. I couldn&amp;rsquo;t get it! Turns out it was actually incredibly simple.</description>
    </item>
    
    <item>
      <title>C# Tip: use IHttpClientFactory to generate HttpClient instances</title>
      <link>https://www.code4it.dev/csharptips/use-httpclientfactory-instead-of-httpclient/</link>
      <pubDate>Tue, 07 Jun 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/use-httpclientfactory-instead-of-httpclient/</guid>
      <description>Initializing HttpClient instances can expose you to Socket Exhaustion problems. You should use IHttpClientFactory instead</description>
    </item>
    
    <item>
      <title>C# Tip: Convert ExpandoObjects to IDictionary</title>
      <link>https://www.code4it.dev/csharptips/expandoobject-to-dictionary/</link>
      <pubDate>Tue, 10 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/expandoobject-to-dictionary/</guid>
      <description>How to get all the keys of an ExpandoObject? Convert it to Dictionary!</description>
    </item>
    
    <item>
      <title>C# Tip: Use Debug-Assert to break the debugging flow if a condition fails</title>
      <link>https://www.code4it.dev/csharptips/debug-assert/</link>
      <pubDate>Tue, 05 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/debug-assert/</guid>
      <description>It would be great if we could break the debugging flow if a condition is (not) met. Can we? Of course!</description>
    </item>
    
    <item>
      <title>C# Tip: How to temporarily change the CurrentCulture</title>
      <link>https://www.code4it.dev/csharptips/change-current-culture-in-using-block/</link>
      <pubDate>Tue, 08 Mar 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/change-current-culture-in-using-block/</guid>
      <description>What can you do if you need to temporarily change the CurrentCulture in C#?</description>
    </item>
    
    <item>
      <title>C# Tip: Exception handling with WHEN clause</title>
      <link>https://www.code4it.dev/csharptips/exception-handling-when-clause/</link>
      <pubDate>Tue, 08 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/exception-handling-when-clause/</guid>
      <description>Instead of using if-else or switch blocks to handle exceptions, you can do it gracefully using the &amp;lsquo;when&amp;rsquo; keyword.</description>
    </item>
    
    <item>
      <title>C# Tip: use yield return to return one item at the time</title>
      <link>https://www.code4it.dev/csharptips/yield-return/</link>
      <pubDate>Tue, 14 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/yield-return/</guid>
      <description>Yield is a keyword that allows you to return an item at the time instead of creating a full list and returning it as a whole.</description>
    </item>
    
    <item>
      <title>C# Tip: Use a SortedSet to avoid duplicates and sort items</title>
      <link>https://www.code4it.dev/csharptips/sorted-set/</link>
      <pubDate>Tue, 16 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/sorted-set/</guid>
      <description>Using the right data structure is crucial to building robust and efficient applications. So, why use a List or a HashSet to sort items (and remove duplicates) when you have a SortedSet?</description>
    </item>
    
    <item>
      <title>C# Tip: use the Ping class instead of an HttpClient to ping an endpoint</title>
      <link>https://www.code4it.dev/csharptips/ping-endpoint/</link>
      <pubDate>Tue, 19 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/ping-endpoint/</guid>
      <description>Sometimes you need to ping some endpoints. Don&amp;rsquo;t rely on HttpClient, but use the native Ping class.</description>
    </item>
    
    <item>
      <title>C# tip: define Using Aliases to avoid ambiguity</title>
      <link>https://www.code4it.dev/csharptips/using-alias/</link>
      <pubDate>Tue, 21 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/using-alias/</guid>
      <description>Sometimes we need to use objects with the same name but from different namespaces. How to remove that ambiguity? By Using Aliases!</description>
    </item>
    
    <item>
      <title>C# tip: create correct DateTimes with DateTimeKind</title>
      <link>https://www.code4it.dev/csharptips/datetimekind/</link>
      <pubDate>Sat, 07 Aug 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/datetimekind/</guid>
      <description>Creating simple DateTimes creates issues when handling timezones. You can solve some issues by using DateTimeKind</description>
    </item>
    
    <item>
      <title>C# tip: String.IsNullOrEmpty or String.IsNullOrWhiteSpace?</title>
      <link>https://www.code4it.dev/csharptips/string-isnullorempty-isnullorwhitespace/</link>
      <pubDate>Tue, 06 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/string-isnullorempty-isnullorwhitespace/</guid>
      <description>Is your string really empty, or has it hidden characters? With String.IsNullOrEmpty and String.IsNullOrWhiteSpace you can find it</description>
    </item>
    
    <item>
      <title>C# tip: how to get the index of an item in a foreach loop</title>
      <link>https://www.code4it.dev/csharptips/how-to-get-item-index-in-foreach/</link>
      <pubDate>Tue, 08 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.code4it.dev/csharptips/how-to-get-item-index-in-foreach/</guid>
      <description>Do you need the index of the current item in a foreach loop with C#? Here you&amp;rsquo;ll see two approaches.</description>
    </item>
    
  </channel>
</rss>
