{"id":1290,"date":"2012-02-14T00:00:00","date_gmt":"2012-02-14T00:00:00","guid":{"rendered":"https:\/\/test.simple-talk.com\/uncategorized\/10-reasons-why-visual-basic-is-better-than-c\/"},"modified":"2025-06-26T08:33:36","modified_gmt":"2025-06-26T08:33:36","slug":"10-reasons-why-visual-basic-is-better-than-c","status":"publish","type":"post","link":"https:\/\/www.red-gate.com\/simple-talk\/development\/dotnet-development\/10-reasons-why-visual-basic-is-better-than-c\/","title":{"rendered":"10 Reasons Why Visual Basic is Better Than C#"},"content":{"rendered":"<div id=\"pretty\">\n<p class=\"start\">Visual Basic is a better programming language than Visual C#. Who says so? This article! Here are 10 reasons why you should always choose VB over C#.<\/p>\n<h2>1 &#8211; &#8220;Rose is a rose is a rose is a rose&#8221;<\/h2>\n<p>This is a quotation from Gertrude Stein&#8217;s 1922 play<em> Geography and Plays<\/em>. However, the poetry wouldn&#8217;t work in C#, because &#8211; unforgivably &#8211; it&#8217;s a cASe-SeNSitIvE language. This is madness!<\/p>\n<p>Before I start ranting, let me just acknowledge that case-sensitivity confers one (and only one) advantage &#8211; it makes it easier to name private and public properties:<\/p>\n<table class=\"borderless table--valign-middle table--full-width\">\n<tbody>\n<tr>\n<td align=\"right\" valign=\"top\">\n<p class=\"triangle-border right\">Writing properties like this means that you can refer to the public Name property, and it&#8217;s obvious what the private equivalent will be called (name).<\/p>\n<\/td>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">\/\/ private version of variable\nprivate string name = null;\npublic string Name\n{\n\u00a0\u00a0\u00a0\u00a0get\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return txtName.Text;\n\u00a0\u00a0\u00a0\u00a0}\n\u00a0\u00a0\u00a0\u00a0set\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name = txtName.Text;\n\u00a0\u00a0\u00a0\u00a0}\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>So now we&#8217;ve got that out of the way: case-sensitive programming languages make everything else harder. Why, you ask?<\/p>\n<ul>\n<li>You keep having to switch between upper and lower case when typing, causing RSI in your poor little fingers as you reach for the inconsiderately located Shift key.<\/li>\n<li>You are much more likely to make mistakes &#8211; are you sure you meant to type <strong>DateOfBirth<\/strong>, or should it have been <strong>dateofbirth<\/strong>?<\/li>\n<li>When you accidentally leave Caps lock on, it really matters.<\/li>\n<\/ul>\n<p>The only possible benefit is that you can use more combinations of variable names, that is, you can use more of one of the few infinite resources in this universe&#8230;<\/p>\n<div class=\"note\">\n<p class=\"note\">It doesn&#8217;t matter if you disagree with everything else in this article: case-sensitivity alone is sufficient reason to ditch C#!<\/p>\n<\/div>\n<h2>2 &#8211; The Switch clause<\/h2>\n<p>Both VB and C# contain a way of testing mutually exclusive possibilities, the <strong>S<\/strong><strong>elect<\/strong><strong> C<\/strong><strong>ase<\/strong> and <strong>S<\/strong><strong>w<\/strong><strong>i<\/strong><strong>t<\/strong><strong>ch<\/strong> clauses respectively. Only one of them works properly.<\/p>\n<p>A Visual Basic Select Case clause, returning a description of how old someone is. The age range for a young person is a tad generous, reflecting the age of the author of this article.<\/p>\n<table class=\"borderless table--valign-middle table--full-width\">\n<tbody>\n<tr>\n<td align=\"right\" valign=\"top\">\n<p class=\"triangle-border right\">A Visual Basic <strong>Select Case<\/strong> clause, returning a description of how old someone is. The age range for a young person is a tad generous, reflecting the age of the author of this article.<\/p>\n<\/td>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">Select Case AgeEntered\n\n\u00a0\u00a0\u00a0\u00a0Case Is &lt; 18\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"child\"\n\u00a0\u00a0\u00a0\u00a0Case Is &lt; 50\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"young person\"\n\u00a0\u00a0\u00a0\u00a0Case Is &lt; 65\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"middle-aged\"\n\u00a0\u00a0\u00a0\u00a0Case Else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"elderly\"\n\nEnd Select\n<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>You can&#8217;t do this using <strong>S<\/strong><strong>witch<\/strong> in C#, as &#8211; astonishingly &#8211; it can&#8217;t handle relational operators. You have to use an <strong>I<\/strong><strong>f<\/strong> \/ <strong>E<\/strong><strong>lse<\/strong><strong> I<\/strong><strong>f<\/strong> clause instead. But even if you could, you&#8217;d still have to type in lots of unnecessary <strong>B<\/strong><strong>reak<\/strong> statements:<\/p>\n<table class=\"borderless table--valign-middle table--full-width\">\n<tbody>\n<tr>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">switch (AgeThreshold) {\n\u00a0\u00a0\u00a0\u00a0case 18 : \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"child\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0case 50 :\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"young person\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0case 65 :\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"middle-aged\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n\u00a0\u00a0\u00a0\u00a0default:\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0txtVerdict.Text = \"elderly\";\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0break;\n}<\/pre>\n<\/td>\n<td align=\"left\" valign=\"top\">\n<p class=\"triangle-border left\">It&#8217;s easy to forget to type in each of these <strong>Break <\/strong>statements!<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>3 &#8211; Event-Handling code<\/h2>\n<p>This is specific to Visual Studio (I&#8217;m using 2010, the latest version). Suppose I want to attach code to anything but the default <strong>Click<\/strong> event of a typical button:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-ButtonSelected.jpg\" alt=\"1444-ButtonSelected.jpg\" \/><\/td>\n<td align=\"left\" valign=\"bottom\">\n<p class=\"triangle-border left\">Let&#8217;s suppose that I want to attach code to the <strong>MouseHover<\/strong> event of this button.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>I can do this in Visual Basic without leaving the code window:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td align=\"right\" valign=\"bottom\">\n<p class=\"triangle-border right\"><strong>a)<\/strong> First choose the object from the drop list.<\/p>\n<\/td>\n<td><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-SelectObjectVB.jpg\" alt=\"1444-SelectObjectVB.jpg\" \/><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-SelectObjectVbEvent.jpg\" alt=\"1444-SelectObjectVbEvent.jpg\" \/><\/td>\n<\/tr>\n<tr>\n<td align=\"center\" valign=\"bottom\">\n<p class=\"triangle-border top\"><strong>b)<\/strong>Then choose the event you want to code.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>In C# you can&#8217;t do this &#8211; you have to return to the button&#8217;s properties window and choose to show its events:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-MouseHoverEvent.jpg\" alt=\"1444-MouseHoverEvent.jpg\" \/><\/td>\n<td align=\"left\" valign=\"bottom\">\n<p class=\"triangle-border left\">You can double-click to attach code to this event for the selected button &#8211; but that&#8217;s the only simple way to create it for C#.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>But it&#8217;s even worse than that. If you then rename a control (in this case <strong>btnApply<\/strong>) you have to re-associate the event-handler with the renamed control in the properties window (or in the initialisation code, if you can find it). In Visual Basic, of course, you can do all of this in code:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">\u00a0\u00a0\u00a0 Private Sub btnApply_Click(ByVal sender As System.Object,\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ByVal e As System.EventArgs) Handles btnApply.Click\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 MessageBox.Show(\"Hello\")\n\u00a0\n\u00a0\u00a0\u00a0 End Sub\n<\/pre>\n<\/td>\n<td align=\"left\" valign=\"top\">\n<p class=\"triangle-border left\">Globally change <strong>btnApply<\/strong> to the new button&#8217;s name in code, and everything will work as before.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<h2>4 -Stupid symbols<\/h2>\n<p>C# was written by academics. It shows. Consider this table of C# symbols and their VB equivalents:<\/p>\n<div>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td><strong>What you&#8217;re trying to do<\/strong><\/td>\n<td><strong>C# Symbol<\/strong><\/td>\n<td><strong>VB Equivalent<\/strong><\/td>\n<\/tr>\n<tr>\n<td><em>Test if two conditions are both true<\/em><\/td>\n<td align=\"center\">&amp;&amp;<\/td>\n<td align=\"center\">and<\/td>\n<\/tr>\n<tr>\n<td><em>Test if one or other condition is true<\/em><\/td>\n<td align=\"center\">||<\/td>\n<td align=\"center\">or<\/td>\n<\/tr>\n<tr>\n<td><em>Test if a condition is not true<\/em><\/td>\n<td align=\"center\"><em>!<\/em><\/td>\n<td align=\"center\">not<\/td>\n<\/tr>\n<tr>\n<td><em>Concatenate two strings of text<\/em><\/td>\n<td align=\"center\">+<\/td>\n<td align=\"center\">&amp;<\/td>\n<\/tr>\n<tr>\n<td><em>Test if a condition is true within an if statement<\/em><\/td>\n<td align=\"center\">==<\/td>\n<td align=\"center\">=<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Which column looks like it was designed by a real person?<\/p>\n<h2>5 &#8211; Autocorrection in Visual Basic actually works<\/h2>\n<p>IntelliSense works much better for Visual Basic than for Visual C#. Take just one example &#8211; creating a write-only property. Let&#8217;s start with Visual Basic:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td align=\"center\"><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-PropertyPersonName.jpg\" alt=\"1444-PropertyPersonName.jpg\" \/><\/td>\n<td align=\"left\" valign=\"top\">\n<p class=\"triangle-border left\">When you press return at the line end&#8230;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">\u00a0\u00a0\u00a0 WriteOnly Property PersonName As String\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Set(value As String)\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 End Set\n\u00a0\u00a0\u00a0 End Property\n<\/pre>\n<\/td>\n<td align=\"left\" valign=\"top\">\n<p class=\"triangle-border left\">&#8230; You get this fully-completed clause.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>For C#, the same thing doesn&#8217;t happen:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-PropertyPersonNameC.jpg\" alt=\"1444-PropertyPersonNameC.jpg\" \/><\/td>\n<td align=\"left\" valign=\"top\">\n<p class=\"triangle-border left\">When you press return here, nothing happens (other than a blank line appearing).<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This is just one example. I&#8217;ve just spent ages transcribing our VB courses into C#, and believe me, there are many, many more!<\/p>\n<h2>6 &#8211; Lack of supported functions<\/h2>\n<p>Here are a couple of functions I use from time to time in VB:<\/p>\n<div>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td><strong>Function<\/strong><\/td>\n<td><strong>What it does<\/strong><\/td>\n<\/tr>\n<tr>\n<td><em>IsNumeric<\/em><\/td>\n<td>Tests if a value can be converted to a number<\/td>\n<\/tr>\n<tr>\n<td><em>PMT<\/em><\/td>\n<td>Calculates the annual mortgage payment for a loan<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Great functions, but they don&#8217;t exist in C#.<\/p>\n<h2>7 &#8211; That wretched semi-colon<\/h2>\n<p>Why do I have to end every line in C# with a semi-colon? The argument used to be that it avoided the need to use continuation characters in Visual Basic:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">MessageBox.Show( _\n\u00a0\u00a0\u00a0\u00a0text:=\"This article is a bit opinionated\", _\n\u00a0\u00a0\u00a0\u00a0caption:=\"Message\")<\/pre>\n<\/td>\n<td align=\"left\" valign=\"top\">\n<p class=\"triangle-border left\">You used to have to use an underscore as a continuation character to show incomplete lines of code in VB.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>However, as of Visual Basic 2010 you rarely need to do this anymore. Come on, C#: Visual Basic has ditched its line-ending character; why can&#8217;t you?(;)<\/p>\n<div class=\"note\">\n<p class=\"note\">Someone commented on my original (much shorter) blog about this:<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0<em>&#8220;In a short amount of time you&#8217;ll type those semi-colons without thinking about it (I even type them when programming in visual basic).&#8221;<\/em><\/p>\n<p>That&#8217;s like saying that you&#8217;ll soon get used to not having any matches to light your fire, and you&#8217;ll even start rubbing sticks together to start a fire when you finally manage to buy a box!<\/p>\n<\/div>\n<h2>8 &#8211; Arguments and variables<\/h2>\n<p>The order of words in a C# variable declaration is wrong. When you introduce someone, you wouldn&#8217;t say, &#8220;This is my friend who&#8217;s a solicitor; he&#8217;s called Bob&#8221;. So why do you say:<\/p>\n<pre class=\"lang:tsql theme:ssms2012\">string PersonName = \"Bob\";<\/pre>\n<p>To me:<\/p>\n<pre class=\"lang:tsql theme:ssms2012\">Dim PersonName As String = \"Bob\"<\/pre>\n<p>&#8230;is much more logical. I also find the C# method of having to prefix arguments with the word <strong>out<\/strong> confusing, particularly as you have to do it both in the called and calling routine.<\/p>\n<h2>9 &#8211; Strictness<\/h2>\n<p>C# is a much fussier language than Visual Basic (even if you turn <strong>Option Strict<\/strong> on in Visual Basic, this is still true). &#8220;And a good thing, too!&#8221;, I hear you cry. Well, maybe. Consider this Visual Basic code:<\/p>\n<table class=\"borderless table--valign-middle table--full-width\">\n<tbody>\n<tr>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">Enum AgeBand\n\u00a0\u00a0 Child = 18\n\u00a0\u00a0 Young = 30\n\u00a0\u00a0 MiddleAged = 60\n\u00a0\u00a0 SeniorCitizen = 90\nEnd Enum\n\n\nSelect Case Age\n\u00a0\u00a0\u00a0\u00a0Case Is &lt; AgeBand.Child\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MessageBox.Show(\"Child\")\n\u00a0\u00a0\u00a0\u00a0Case Else\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MessageBox.Show(\"Adult\")\nEnd Select<\/pre>\n<\/td>\n<td align=\"left\" valign=\"bottom\">\n<p class=\"triangle-border left\">With <strong>Option Strict<\/strong> turned on this shouldn&#8217;t really work, as it&#8217;s comparing an integer with an enumeration &#8211; but VB has the common sense to realise what you want to do.<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The equivalent in Visual C# doesn&#8217;t work:<\/p>\n<p class=\"illustration\"><img decoding=\"async\" src=\"https:\/\/www.red-gate.com\/simple-talk\/wp-content\/uploads\/imported\/1444-Enum1.jpg\" alt=\"1444-Enum1.jpg\" \/><\/p>\n<div>\n<p>A less forgiving language&#8230;<\/p>\n<\/div>\n<p>What this means is that you end up having to fill your code with messy type conversions:<\/p>\n<table class=\"borderless table--valign-middle table--full-width\">\n<tbody>\n<tr>\n<td align=\"right\" valign=\"bottom\">\n<p class=\"triangle-border right\">The simplest way of converting an enumeration to an integer; but why should you have to?<\/p>\n<\/td>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">\/\/ find out the age entered\nint Age = Convert.ToInt32(txtAge.Text);\n\nif (Age &lt; (int) AgeBand.Child) {\n\u00a0\u00a0\u00a0\u00a0MessageBox.Show(\"Child\");\n} else {\n\u00a0\u00a0\u00a0\u00a0MessageBox.Show(\"Adult\");\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<div><\/div>\n<h2>10 &#8211; Redimensioning arrays<\/h2>\n<p>If you want to dynamically change the length of an array in Visual Basic, you can use <strong>Redim Preserve<\/strong>. To do the same thing in Visual C#, you have to copy the array, add a value and then copy it back:<\/p>\n<table class=\"borderless table--valign-middle\">\n<tbody>\n<tr>\n<td align=\"right\" valign=\"middle\">\n<p class=\"triangle-border right\">The vile, clunky C# method of extending an array.<\/p>\n<div><\/div>\n<\/td>\n<td>\n<pre class=\"lang:tsql theme:ssms2012\">string[] PartyGuests = new string[2];\n\nPartyGuests[0] = \"Sarah Palin\";\nPartyGuests[1] = \"Richard Dawkins\";\n\n\/\/ whoops! forgot to invite Mitt\n\n\/\/ create a new extended array\nstring[] tempGuests = new string[PartyGuests.Length + 1];\n\n\/\/ copy all of the elements from the old array into new one\nArray.Copy(PartyGuests,tempGuests,PartyGuests.Length);\n\n\/\/ add Mitt as last element\ntempGuests[PartyGuests.Length] = \"Mitt Romney\";\n\n\/\/ restore full list into original array\nPartyGuests = tempGuests;\n\n\/\/ check works\nforeach (string Guest in PartyGuests) {\n\u00a0\u00a0\u00a0\u00a0System.Diagnostics.Debug.Write(Guest);\n}<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>This epitomises Visual C# for me. Critics will tell me that:<\/p>\n<ul>\n<li>Behind the scenes, the <strong>Redim Preserve<\/strong> command does exactly the same thing as the C# code above; and<\/li>\n<li>I should be using lists and not arrays anyway.<\/li>\n<\/ul>\n<p>That&#8217;s hardly the point! The point is that &#8211; as so often &#8211; Visual Basic makes something easier to code than C# does.<\/p>\n<h2>Conclusion<\/h2>\n<p>So those are my 10 reasons to code in Visual Basic. What are you waiting for, all you C# code-monkeys? Convert all of your code to VB &#8211; you have nothing to lose but your semi-colons!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>After having converted a whole lot of training materials based on VB.NET into C#, Andy &#039;Wise Owl&#039; Brown decided to write a tongue-in-cheek rant whilst he could still remember the pain-points. &#8216;Convert to VB.NET! You have nothing to lose but your semi-colons! &#8216;&hellip;<\/p>\n","protected":false},"author":9783,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[143538],"tags":[4143,4229,4371,5134,5248,4194],"coauthors":[6782],"class_list":["post-1290","post","type-post","status-publish","format-standard","hentry","category-dotnet-development","tag-net","tag-net-framework","tag-c","tag-sql-prompt","tag-vb","tag-visual-basic"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/1290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/users\/9783"}],"replies":[{"embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/comments?post=1290"}],"version-history":[{"count":5,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/1290\/revisions"}],"predecessor-version":[{"id":107229,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/posts\/1290\/revisions\/107229"}],"wp:attachment":[{"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/media?parent=1290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/categories?post=1290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/tags?post=1290"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.red-gate.com\/simple-talk\/wp-json\/wp\/v2\/coauthors?post=1290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}