{"id":39307,"date":"2020-04-15T05:14:39","date_gmt":"2020-04-15T05:14:39","guid":{"rendered":"https:\/\/www.bridge-global.com\/blog\/?p=39307"},"modified":"2021-03-29T11:05:09","modified_gmt":"2021-03-29T11:05:09","slug":"c-8-0-features-should-a-developer-use-it","status":"publish","type":"post","link":"https:\/\/www.bridge-global.com\/blog\/c-8-0-features-should-a-developer-use-it\/","title":{"rendered":"C# 8.0 Features: Should a Developer Use It?"},"content":{"rendered":"<p>It\u2019s been almost 20 years since Microsoft released the first version of the C# language. Until now with the release of C# 8, the language has had a remarkable evolution.<\/p>\n<p>There are a lot of new features Microsoft has introduced in their latest release of C# which is worth trying out.<\/p>\n<p>The major ones to be listed are:<\/p>\n<p>1. Default interface methods<br \/>\n2. Nullable reference types<br \/>\n3. Pattern matching enhancements<br \/>\n4. Asynchronous streams<br \/>\n5. Using declarations<br \/>\n6. Enhancement of interpolated verbatim strings<br \/>\n7. Null-coalescing assignment<br \/>\n8. Static local functions<br \/>\n9. Indices and ranges<br \/>\n10. Unmanaged constructed types<br \/>\n11. Read-only Struct Member<br \/>\n12. Stackalloc in nested expressions<br \/>\n13. Disposable ref structs<\/p>\n<p>Let us go through each one of them and understand what these features are for.<\/p>\n<h2><strong>1. Default interface methods<\/strong><\/h2>\n<p>It allows you to add new functionality to the interfaces of your libraries and ensure backward compatibility with code written for older versions of those interfaces.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39314\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code1.png\" alt=\"Default interface methods\" width=\"624\" height=\"154\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code1.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code1-300x74.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code1-500x123.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>2. Nullable reference types<\/strong><\/h2>\n<p>Emits a compiler warning or error if a variable that must not be null is assigned to null.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39316\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code2.png\" alt=\"Nullable reference types\" width=\"624\" height=\"80\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code2.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code2-300x38.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code2-500x64.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>3. Pattern matching enhancements<\/strong><\/h2>\n<p>Provides the ability to deconstruct matched objects, and gives you access to parts of their data structures. C# offers a rich set of patterns as below that can be used for matching:<\/p>\n<h3><strong><em>a. Switch expressions<\/em><\/strong><\/h3>\n<p>A switch expression is a concise way to return a specific value based on another value.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39319\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code3.png\" alt=\"Switch expressions\" width=\"624\" height=\"134\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code3.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code3-300x64.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code3-500x107.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p>A regular switch does not return a value. This syntax is more concise. There are no case keywords, and the default case was replaced with a discard ( _ ).<\/p>\n<p>The case conditions can be patterns. It\u2019s not possible to include statements for handling a case. For each case, a single expression must be provided that represents the resulting value. This expression can be a switch expression.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39322\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code4.png\" alt=\"switch expressions\" width=\"624\" height=\"194\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code4.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code4-300x93.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code4-500x155.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h3><strong><em>b. Property patterns<\/em><\/strong><\/h3>\n<p>Property patterns express a property that needs to have a specific constant value.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39324\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code5.png\" alt=\"Property patterns C# new features\" width=\"624\" height=\"114\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code5.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code5-300x55.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code5-500x91.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p>The above statement will match when location, Country equals India. Property patterns can be used in switch expressions also. This pattern can also be used with the is keyword.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39326\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code6.png\" alt=\"C# new festures\" width=\"624\" height=\"34\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code6.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code6-300x16.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code6-500x27.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p>We can check both on the type and property, for example:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39328\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code7.png\" alt=\"C# new features code\" width=\"624\" height=\"112\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code7.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code7-300x54.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code7-500x90.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h3><strong><em>C. Tuple patterns<\/em><\/strong><\/h3>\n<p>The conditions for the switch are now also tuples. Their items have patterns that are matched against the corresponding input tuple element. In the example, we\u2019ve used the discard (_) to ignore a tuple item. Other patterns can also be used.<\/p>\n<p>The is keyword can also be used with tuple patterns. Tuple patterns can also be used against types that are deconstructable to a tuple:<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39330\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code8.png\" alt=\"C# \" width=\"623\" height=\"174\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code8.png 623w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code8-300x84.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code8-500x140.png 500w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/p>\n<h3><strong><em>d. Positional patterns<\/em><\/strong><\/h3>\n<p>If we prefer to try testing following the Deconstructor method, these positional patterns will be more ideal for the purpose. These patterns boast of a syntax that looks much similar to that of tuple patterns.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39333\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code9.png\" alt=\"C# new features\" width=\"624\" height=\"114\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code9.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code9-300x55.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code9-500x91.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p>If we look at the pattern closely, we will see that the primary deconstructed value and the second deconstructed value are compared to a new variable. Apart from this expression, the same can be used in a switch statement and sweet expression.<\/p>\n<h2><strong>4. Asynchronous streams<\/strong><\/h2>\n<p>Allows having enumerators that support async operations.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39334\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code10.png\" alt=\"C# new features\" width=\"624\" height=\"98\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code10.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code10-300x47.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code10-500x79.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>5. Using declarations<\/strong><\/h2>\n<p>It enhances the \u2018using\u2019 operator to use with Patterns and makes it more natural.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39337\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code11.png\" alt=\"C#\" width=\"624\" height=\"54\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code11.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code11-300x26.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code11-500x43.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>6. Enhancement of interpolated verbatim strings<\/strong><\/h2>\n<p>Allows @$&#8221;&#8221; as a verbatim interpolated string.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39339\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code12.png\" alt=\"C#\" width=\"624\" height=\"34\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code12.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code12-300x16.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code12-500x27.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>7. Null-coalescing assignment<br \/>\n<\/strong><\/h2>\n<p>Simplifies a common coding pattern where a variable is assigned a value if it is null. It is common to see the code of the form.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39340\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code13.png\" alt=\"C#\" width=\"624\" height=\"94\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code13.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code13-300x45.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code13-500x75.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39341\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code14.png\" alt=\"C#\" width=\"624\" height=\"44\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code14.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code14-300x21.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code14-500x35.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>8. Static local functions<\/strong><\/h2>\n<p>Allows you to add the &#8216;static&#8217; modifier to the local functions.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39343\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code15.png\" alt=\"C#\" width=\"624\" height=\"193\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code15.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code15-300x93.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code15-500x155.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p>Here as we are using the parent variables, the runtime will copy these variables into SayHello() stack memory. It means we are copying these variables to local variables. In our case, we are passing only the name string variable to the local function.<\/p>\n<h2><strong>9. Indices and ranges<\/strong><\/h2>\n<p>Allows you to use more natural syntax for specifying subranges in an array or a collection.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39345\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code16.png\" alt=\"C#\" width=\"623\" height=\"32\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code16.png 623w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code16-300x15.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code16-500x26.png 500w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/p>\n<p>Index: Used to obtain the collection from the beginning or from the end.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39351\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code17.png\" alt=\"C#\" width=\"624\" height=\"72\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code17.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code17-300x35.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code17-500x58.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<p>Range: Access a sub-collection(slice) from a collection.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39352\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code18.png\" alt=\"C#\" width=\"624\" height=\"32\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code18.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code18-300x15.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code18-500x26.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>10. Unmanaged constructed types<\/strong><\/h2>\n<p>Allows you to take a pointer to unmanaged constructed types, such as ValueTuple, as long as all the elements of the generic type are unmanaged.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39354\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code19.png\" alt=\"C#\" width=\"623\" height=\"189\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code19.png 623w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code19-300x91.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code19-500x152.png 500w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/p>\n<h2><strong>11. Read-only struct member<\/strong><\/h2>\n<p>You can now apply read-only to any struct members. This is an extension of adding to read-only as a struct level. It indicates that the member does not alter the data or modify the state. This feature helps the compiler in not creating a defensive copy of a variable.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39355\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code20.png\" alt=\"C#\" width=\"622\" height=\"152\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code20.png 622w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code20-300x73.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code20-500x122.png 500w\" sizes=\"auto, (max-width: 622px) 100vw, 622px\" \/><\/p>\n<h2><strong>12. Stackalloc in nested expressions<\/strong><\/h2>\n<p>The result of a stackalloc expression is of the System.Span or System.ReadOnlySpan type.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39356\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code21.png\" alt=\"C# new features\" width=\"624\" height=\"102\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code21.png 624w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code21-300x49.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code21-500x82.png 500w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/p>\n<h2><strong>13. Disposable ref structs<\/strong><\/h2>\n<p>Allows us to use the \u2018using\u2019 pattern with ref struct or readonly ref struct\u2018.<\/p>\n<p style=\"text-align: center;\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-39357\" src=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code22.png\" alt=\"C# 8.0 new features\" width=\"621\" height=\"144\" srcset=\"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code22.png 621w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code22-300x70.png 300w, https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/code22-500x116.png 500w\" sizes=\"auto, (max-width: 621px) 100vw, 621px\" \/><\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>C# 8 has many new useful features, which are well accepted among the developer community. These feature additions can make your code better, safer, cleaner and easily maintainable. If so, why don\u2019t we use it? Happy coding.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>It\u2019s been almost 20 years since Microsoft released the first version of the C# language. Until now with the release of C# 8, the language has had a remarkable evolution. There are a lot of new features Microsoft has introduced &hellip;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":82,"featured_media":39308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-39307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"featured_image_src":"https:\/\/www.bridge-global.com\/blog\/wp-content\/uploads\/2020\/04\/C-8.0-New-features-Bridge-Global-Blog.png","author_info":{"display_name":"Vishnu KJ","author_link":"https:\/\/www.bridge-global.com\/blog\/author\/vishnu-kj\/"},"_links":{"self":[{"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/posts\/39307","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/users\/82"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/comments?post=39307"}],"version-history":[{"count":27,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/posts\/39307\/revisions"}],"predecessor-version":[{"id":47525,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/posts\/39307\/revisions\/47525"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/media\/39308"}],"wp:attachment":[{"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/media?parent=39307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/categories?post=39307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bridge-global.com\/blog\/wp-json\/wp\/v2\/tags?post=39307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}