Junior 5 min · March 06, 2026

C# TryParse — Why 'twenty' Crashes Your App

User's 'twenty' input triggers 500 error? Use TryParse().

N
Naren · Founder
Plain-English first. Then code. Then the interview question.
About
 ● Production Incident 🔎 Debug Guide
Quick Answer
  • C# is a statically typed, compiled language built by Microsoft for building enterprise, web, and game applications.
  • The compiler catches type errors before runtime — you don't get surprises in production.
  • The CLR (Common Language Runtime) handles memory, security, and just-in-time compilation.
  • .NET is the platform; C# is the language you write — they're not the same thing.
  • Performance: compiled to IL then JIT-compiled — ~50-100x faster than interpreted Python for CPU-heavy loops.
  • Production gotcha: forgetting to convert string input with int.Parse() crashes the app with FormatException.
Plain-English First

Imagine you want to give instructions to a robot. The robot only understands one language — pure binary (millions of 1s and 0s) — and writing that yourself would take forever and drive you mad. C# is like a friendly translator: you write instructions in something that looks almost like English, and C# quietly converts them into the binary the robot understands. It's a bridge between your human brain and the machine's silicon brain. That bridge is called a programming language, and C# is one of the most powerful and beginner-friendly ones ever built.

Every app you tap on your phone, every website you log into, every game you play — all of it runs on instructions written by a human and understood by a machine. C# (pronounced 'C Sharp') is Microsoft's answer to the question: 'What's the best way for a human to write those instructions?' It powers everything from enterprise banking software and Windows desktop apps to game engines like Unity, cloud services on Azure, and even cross-platform mobile apps. Learning C# isn't just learning one tool — it's buying a master key that opens doors across virtually every area of software development.

Before C# existed, developers had to juggle languages that either gave them too much control (leading to dangerous, hard-to-debug code) or too little (limiting what they could build). C# was designed in the early 2000s by Anders Hejlsberg at Microsoft to hit the sweet spot: safe enough to prevent classic disasters like memory corruption, expressive enough to build anything, and readable enough that your code doesn't look like ancient hieroglyphics six months later.

By the end of this article you'll understand exactly what C# is and how it fits into the programming world, you'll have written and understood a complete working C# program from scratch, and you'll know the core building blocks — variables, data types, and output — that every single C# program on the planet is built from. You don't need any prior programming experience. If you can follow a recipe, you can follow this.

What C# Actually Is — The Compiler, the CLR, and Why They Matter

When you write C# code, your computer can't run it directly — not yet. First, a tool called the compiler reads everything you wrote and checks for mistakes (like a strict editor reading your essay). If everything looks correct, it converts your C# into something called Intermediate Language (IL) — a halfway format that isn't quite binary yet.

When you actually run your program, a second piece of technology called the CLR (Common Language Runtime) kicks in. Think of the CLR as a universal translator that lives on the user's machine. It takes that IL and converts it to the exact binary instructions that specific computer needs. This is why a C# program can run on different machines without you rewriting anything — the CLR handles the local dialect.

This two-step process is what makes C# both safe (the compiler catches errors before your users ever see them) and portable (the CLR adapts to the machine). The whole ecosystem — the compiler, the CLR, and the standard libraries — is called .NET. When someone says 'C# runs on .NET', this is exactly what they mean. .NET is the stage; C# is the language of the performance.

HowCSharpWorks.csCSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// FILE: HowCSharpWorks.cs
// PURPOSE: Illustrate the journey from source code to running output.
// This is a minimal C# program — the absolute smallest valid program you can write.
// Every C# program MUST have an entry point: the Main method.
// Think of Main as the 'Start' button on your program.

using System; // Import the System namespace so we can use Console.WriteLine

class HowCSharpWorks
{
    // The Main method — the CLR looks for this exact signature to start your program
    static void Main(string[] args)
    {
        // Console.WriteLine prints a line of text to the terminal
        // and automatically moves to the next line afterwards
        Console.WriteLine("The compiler checked this code.");
        Console.WriteLine("The CLR is now running it on your specific machine.");
        Console.WriteLine("That two-step process is .NET in action.");
    }
}
Output
The compiler checked this code.
The CLR is now running it on your specific machine.
That two-step process is .NET in action.
What's .NET vs C#?
C# is the language (the words you type). .NET is the platform (the engine that runs them). You write in C#; .NET makes it work. You'll see both terms constantly — now you know they're two different things that work together, not the same thing.
Production Insight
The two-step compilation means deployment is not just copying your .cs files — you ship the compiled IL (.exe or .dll).
If the target machine lacks the matching .NET runtime version, your app won't start.
Production lesson: always pin the runtime version in your project file and use self-contained deployments for critical systems.
Key Takeaway
C# is compiled to IL, then JIT-compiled to native code by the CLR.
The compiler catches type errors before runtime — the CLR adds portability and safety.
If your app crashes before Main() runs, suspect a missing or mismatched .NET runtime.

Variables and Data Types — Teaching Your Program to Remember Things

A variable is your program's short-term memory. When your program needs to remember a user's name, a price, or whether a door is locked, it stores that information in a variable. Picture a labeled box: the label is the variable name, and whatever you put inside is the value.

But here's the catch — C# needs to know what kind of thing you're storing before you store it. This is called static typing, and it's one of C#'s safety features. You can't accidentally store someone's age (a number) in a box labeled 'customerName' (text) — the compiler will stop you before your program even runs.

The most common data types you'll use daily are: int for whole numbers like 42 or -7, double for decimal numbers like 9.99 or 3.14, string for text like names and messages, bool for true/false decisions, and char for a single character like 'A' or '$'. Each type tells the CLR exactly how much memory to reserve and what operations make sense — you can multiply two int values, but multiplying two names makes no sense and C# won't let you try.

VariablesAndTypes.csCSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// FILE: VariablesAndTypes.cs
// PURPOSE: Demonstrate declaring, assigning, and using the core C# data types.
// Each variable declaration follows the pattern: type variableName = value;

using System;

class VariablesAndTypes
{
    static void Main(string[] args)
    {
        // int stores whole numbers (no decimals)
        // Good for: age, count, score, quantity
        int playerAge = 27;

        // double stores numbers with decimal points (uses 64-bit precision)
        // Good for: prices, measurements, coordinates
        double productPrice = 19.99;

        // string stores text of any length — always wrapped in double quotes
        // Good for: names, messages, addresses, usernames
        string customerName = "Maria Santos";

        // bool stores ONLY true or false — nothing else
        // Good for: flags, switches, on/off states
        bool isAccountActive = true;

        // char stores a SINGLE character — always wrapped in single quotes
        // Good for: menu choices, grades, single symbols
        char gradeScore = 'A';

        // Printing variables: use + to join text and variables together
        // This is called string concatenation
        Console.WriteLine("Customer: " + customerName);
        Console.WriteLine("Age: " + playerAge);
        Console.WriteLine("Price: $" + productPrice);
        Console.WriteLine("Account active: " + isAccountActive);
        Console.WriteLine("Grade: " + gradeScore);

        // You can also use string interpolation — cleaner and easier to read
        // Prefix the string with $ and wrap variable names in { }
        Console.WriteLine($"\nSummary: {customerName} is {playerAge} years old.");
        Console.WriteLine($"Their account is active: {isAccountActive}");
    }
}
Output
Customer: Maria Santos
Age: 27
Price: $19.99
Account active: True
Grade: A
Summary: Maria Santos is 27 years old.
Their account is active: True
Pro Tip: Prefer String Interpolation ($"") Over Concatenation (+)
Using $"Hello {name}" is easier to read and less error-prone than "Hello " + name + "!". It also performs better when combining many values. Make it your default from day one — professional C# codebases almost never use + for string building.
Production Insight
Static typing prevents 'type confusion' bugs that plague dynamically typed languages when data comes from external sources.
In production, this means your API endpoints won't accidentally treat a numeric ID as a string and crash downstream systems.
Trade-off: you write more code upfront, but you spend less time debugging runtime type errors at 3 AM.
Key Takeaway
Every variable must have a declared type — the compiler enforces it.
Common types: int, double, string, bool, char.
Always use TryParse() for converting strings to numbers from user input — Parse() throws exceptions on bad data.

Taking Input, Making Decisions, and Writing a Real Working Program

A program that only talks at you isn't very useful. Real programs listen and respond. In C#, Console.ReadLine() is how your program pauses and waits for the user to type something and press Enter — everything they typed comes back to you as a string.

Once you have input, you'll often need to make a decision based on it. That's where if and else come in. An if statement is exactly what it sounds like: 'IF this condition is true, do this — OTHERWISE (else), do that.' It's the fundamental building block of all program logic.

One important gotcha: Console.ReadLine() always returns a string. So if you ask for someone's age and want to do math with it, you need to convert it using int.Parse() or the safer int.TryParse(). This trips up almost every beginner at least once — we'll cover that in the mistakes section too.

The program below puts all three sections together: data types, user input, and a decision. It's small, but it's genuinely useful and contains every concept a beginner needs to understand before moving forward.

TemperatureAdvisor.csCSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// FILE: TemperatureAdvisor.cs
// PURPOSE: A complete, real program that takes user input and gives advice.
// This combines: variables, data types, input, type conversion, and if/else.

using System;

class TemperatureAdvisor
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== Daily Temperature Advisor ===");
        Console.WriteLine("Enter the current temperature in Celsius:");

        // Console.ReadLine() pauses the program and waits for user input
        // It ALWAYS returns a string — even if the user types a number
        string userInput = Console.ReadLine();

        // double.Parse() converts the string "23.5" into the actual number 23.5
        // Without this conversion, we couldn't do math or comparisons
        double currentTemperature = double.Parse(userInput);

        Console.WriteLine(); // Print a blank line for readability

        // if/else if/else — the program checks conditions top to bottom
        // The FIRST condition that is true gets executed; the rest are skipped
        if (currentTemperature >= 30.0)
        {
            // This block runs ONLY when temperature is 30 or higher
            Console.WriteLine("It's very hot outside!");
            Console.WriteLine("Tip: Stay hydrated and wear light clothing.");
        }
        else if (currentTemperature >= 20.0)
        {
            // This block runs when temp is between 20 and 29.9
            Console.WriteLine("The weather is warm and pleasant.");
            Console.WriteLine("Tip: A light jacket in the evening might help.");
        }
        else if (currentTemperature >= 10.0)
        {
            // This block runs when temp is between 10 and 19.9
            Console.WriteLine("It's a bit cool out there.");
            Console.WriteLine("Tip: Wear a jacket before heading out.");
        }
        else
        {
            // This block runs when NONE of the above conditions were true
            // i.e., temperature is below 10
            Console.WriteLine("It's cold! Bundle up.");
            Console.WriteLine("Tip: Heavy coat, scarf, and gloves recommended.");
        }

        // String interpolation neatly embeds the variable inside the message
        Console.WriteLine($"\nRecorded temperature: {currentTemperature}°C");
    }
}
Output
=== Daily Temperature Advisor ===
Enter the current temperature in Celsius:
25
The weather is warm and pleasant.
Tip: A light jacket in the evening might help.
Recorded temperature: 25°C
Watch Out: double.Parse() Will Crash if the Input Isn't a Number
If the user types 'twenty' instead of '20', double.Parse() throws a FormatException and your program crashes. Once you're comfortable with the basics, switch to double.TryParse(userInput, out double temperature) — it returns false instead of crashing when the input is bad. That's the production-safe way to handle user input.
Production Insight
The production failure from the earlier incident shows exactly why Parse() is dangerous. Always use TryParse() for user-facing input.
A single bad input can take down your entire application if unhandled — especially in web APIs where each request is a separate execution.
Lesson: validate early, crash gracefully, log the bad input for debugging.
Key Takeaway
Console.ReadLine() always returns a string — convert with int.Parse() or double.Parse() carefully.
Prefer TryParse() for any input that comes from users or external systems.
If/else chains check conditions top to bottom — order matters for correctness.

Understanding Program Structure: Namespaces, Classes, and Methods

Every C# program you'll ever write follows a structural hierarchy. At the top level is the namespace — a container that groups related classes together. Think of it like a folder on your computer. Inside namespaces live classes, which are blueprints for objects (more on that later). Inside classes live methods, which are blocks of code that do something. The most important method is Main — the entry point the CLR calls to start your program.

When you see using System; at the top of a file, you're telling the compiler: 'I want to use the System namespace without typing it every time.' Without that line, you'd have to write System.Console.WriteLine() every time — tedious and error-prone.

Understanding this structure is critical because every C# program you debug or maintain will have this skeleton. When you see compiler errors about missing types, it's almost always because you forgot a using directive or your namespace doesn't match the folder structure in ASP.NET projects.

ProgramStructure.csCSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// FILE: ProgramStructure.cs
// PURPOSE: Demonstrate the anatomy of a C# program — namespace, class, and method.

using System;  // Without this, we'd need System.Console.WriteLine

namespace io.thecodeforge.beginner
{
    class ProgramStructure
    {
        // Main is the entry point. Signature must be: static void Main(string[] args)
        static void Main(string[] args)
        {
            Console.WriteLine("Namespace: io.thecodeforge.beginner");
            Console.WriteLine("Class: ProgramStructure");
            Console.WriteLine("Method: Main");
            
            // Call a custom method defined below
            SayHello("Maria");
        }

        // A custom method — note the return type 'void' means it returns nothing
        static void SayHello(string name)
        {
            Console.WriteLine($"Hello, {name}!");
        }
    }
}
Output
Namespace: io.thecodeforge.beginner
Class: ProgramStructure
Method: Main
Hello, Maria!
The Filing Cabinet Model
  • Namespace = drawer: groups related classes (e.g., all input/output classes go in System.IO)
  • Class = folder: contains methods that work together (e.g., Console has WriteLine and ReadLine)
  • Method = document: does one specific task (e.g., Main starts the program, SayHello greets)
  • Using directives = drawer labels: they let you open the drawer without walking to it every time
Production Insight
Mismatched namespaces between class files and their folder paths are a common source of ASP.NET compilation errors.
A namespace io.thecodeforge.service in a file inside Services/ folder is fine, but if the file moves to Controllers/, the compiler won't complain until you try to import it somewhere.
Production rule: align namespaces with folder structure from day one to avoid reference confusion.
Key Takeaway
Namespace → Class → Method forms the backbone of every C# program.
The using directive imports a namespace so you can use types without full qualification.
The Main method is the mandatory entry point — the CLR looks for it by signature, not by name position.

Working with Strings and Console I/O in Depth

Strings and console input/output are your primary interface to the outside world when learning C#. A string is a sequence of characters — from a single letter to an entire book. In C#, strings are immutable, meaning once created, they never change. When you think you're modifying a string, you're actually creating a new one. That's why using + to concatenate many strings in a loop is slow — each + creates a new string object.

Console.WriteLine() prints text followed by a newline. Console.Write() prints without the newline — useful for progress indicators. Console.ReadLine() reads an entire line of text until Enter is pressed. Console.ReadKey() reads a single key press without needing Enter — great for 'press any key to continue' prompts.

A common beginner mistake is to try reading numbers with Console.Read() — that returns the ASCII integer of the first character, not the typed number. Always use ReadLine() and parse.

StringAndConsoleDeep.csCSHARP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// FILE: StringAndConsoleDeep.cs
// PURPOSE: Show string immutability, advanced console I/O, and common pitfalls.

using System;

class StringAndConsoleDeep
{
    static void Main(string[] args)
    {
        // ---- Strings are immutable ----
        string original = "Hello";
        string modified = original.ToUpper();  // Creates a NEW string, original unchanged
        Console.WriteLine($"Original: {original}");   // Still "Hello"
        Console.WriteLine($"Modified: {modified}");   // "HELLO"

        // ---- Console.Read() traps ----
        Console.Write("Press a key: ");
        int keyValue = Console.Read();   // Returns ASCII value of first character typed (before Enter)
        Console.WriteLine($"\nYou pressed ASCII value {keyValue}");
        // The leftover newline in the buffer will affect the next ReadLine()!
        Console.ReadLine(); // Clear the buffer

        // ---- Reading a single key properly ----
        Console.Write("Press any key to exit...");
        Console.ReadKey();  // No Enter needed
        Console.WriteLine(); 
    }
}
Output
Original: Hello
Modified: HELLO
Press a key: A
You pressed ASCII value 65
Press any key to exit...
Don't Use Console.Read() for Numeric Input
Console.Read() returns an integer representing the ASCII code of the first character typed — not the number you intended. If the user types '123', it returns 49 (ASCII '1'). Always use ReadLine() and Parse() for numeric input.
Production Insight
String concatenation in loops is a common performance killer. Building a large string with '+' inside a loop creates thousands of intermediate strings.
Use StringBuilder for heavy string building — it uses a mutable buffer behind the scenes.
Production example: generating CSV or JSON response strings can be 10-100x faster with StringBuilder.
Key Takeaway
Strings are immutable — every 'modification' creates a new object.
Use Console.ReadLine() for all user input — never Console.Read() for numbers.
For repeated string concatenation, use StringBuilder from the System.Text namespace.
● Production incidentPOST-MORTEMseverity: high

Crashed because a user typed 'twenty' instead of '20'

Symptom
Users reported a 500 error when filling out a form's 'temperature' field. The API returned an unhandled FormatException.
Assumption
The developer assumed users would always enter numeric input. They used double.Parse() directly on Console.ReadLine() without checks.
Root cause
Console.ReadLine() returns a string. double.Parse() throws a FormatException if the string cannot be parsed as a number. No exception handling or TryParse was implemented.
Fix
Replace double.Parse() with double.TryParse(). The method returns false on bad input, allowing graceful fallback.
Key lesson
  • Never trust user input — assume every text field can be garbage.
  • Use TryParse() for all numeric conversions from user input.
  • Wrap external input handling in try-catch blocks until you switch to TryParse.
Production debug guideSymptom → Action: Fast fixes for the most frequent runtime failures4 entries
Symptom · 01
Application crashes with 'Input string was not in a correct format'
Fix
Check which Parse() call failed. Replace with TryParse() and add validation feedback to the user.
Symptom · 02
NullReferenceException: 'Object reference not set to an instance of an object'
Fix
Find the line with the crash. That variable is null. Trace back to where it should have been instantiated (new) or assigned.
Symptom · 03
Compiler error CS0029: 'Cannot implicitly convert type string to int'
Fix
You're assigning a string to an int variable. Use int.Parse() or Convert.ToInt32() after validating the string content.
Symptom · 04
Running the program and seeing nothing — console window closes immediately
Fix
Add Console.ReadLine() at the end of Main() to pause the window. Alternatively, run with Ctrl+F5 in Visual Studio.
★ Quick Debug Cheat Sheet for First C# ProgramsThree common problems and the exact commands and fixes to resolve them without panic.
Build error CS1002: ; expected
Immediate action
Look at the line above the error marker.
Commands
Check for missing semicolon at end of statement.
Look for unclosed braces or parentheses on previous lines.
Fix now
Add the missing semicolon. If near a block, ensure every { has a matching }.
Runtime crash on user input+
Immediate action
Check which line uses Parse().
Commands
Replace Parse() with TryParse() and handle the bool return.
Wrap the input in a try-catch block as a temporary fix.
Fix now
Use: if (int.TryParse(Console.ReadLine(), out int result)) { ... } else { Console.WriteLine("Invalid number"); }
Console window closes too fast+
Immediate action
Add a ReadLine() at the very end of Main().
Commands
Console.ReadLine();
Or press Ctrl+F5 instead of F5 to run without debugger.
Fix now
Put Console.ReadLine(); right before the closing brace of Main() so the window waits for Enter.
AspectC# / .NETPython
Typing styleStatically typed — types declared upfrontDynamically typed — types inferred at runtime
PerformanceCompiled to IL then JIT-compiled — very fastInterpreted — generally slower for CPU-heavy work
Primary use caseEnterprise apps, games (Unity), Windows, cloudData science, scripting, automation, web (Django)
Syntax verbosityMore explicit — every variable has a declared typeLess verbose — fewer required keywords
Error detectionMany errors caught at compile time before runningMany errors only surface at runtime
Learning curveModerate — stricter rules, but rules prevent bugsGentle — fewer rules to start with
Job marketStrong demand in enterprise, finance, game devDominant in data science and ML roles

Key takeaways

1
C# is a statically typed, compiled language
you declare the type of every variable upfront, and the compiler catches type mismatches before your program ever runs, not while your users are using it.
2
The two-step execution model matters
the C# compiler produces Intermediate Language (IL), and then the CLR JIT-compiles that IL to native machine code at runtime — this is why .NET programs are both portable and fast.
3
Console.ReadLine() always returns a string
any numeric input must be explicitly converted with int.Parse(), double.Parse(), or the crash-safe TryParse() variants before you can do math with it.
4
String interpolation ($"Hello {name}") is the modern, readable way to embed variables in strings in C#
prefer it over string concatenation (+) from your very first program.
5
Every C# program follows the hierarchy
Namespace → Class → Method. The Main method is the mandatory entry point. Missing a using directive is the most common beginner compile error.

Common mistakes to avoid

5 patterns
×

Forgetting that Console.ReadLine() always returns a string

Symptom
Compiler error CS0029: 'Cannot implicitly convert type string to int'. The program fails to compile when you try to use the input in math operations.
Fix
Always convert: use int.Parse(Console.ReadLine()) for whole numbers or double.TryParse() when you want to handle bad input gracefully without crashing.
×

Using = instead of == in an if condition

Symptom
C# compiler error CS0029 because assignment result is not bool. Many developers from JavaScript or C++ backgrounds expect it to work, but C# catches it at compile time.
Fix
Remember: single = is assignment, double == is comparison. The compiler saves you here — never mix them up.
×

Treating C# and .NET as the same thing when asked in interviews or troubleshooting

Symptom
Confusion when error messages mention 'the .NET runtime' or when someone asks which framework version you're targeting. Leads to debugging the wrong layer.
Fix
C# is the language you write; .NET is the platform and runtime that compiles and executes it. A future version of C# still runs on .NET; a future version of .NET can also run code written in F# or Visual Basic. They evolve together but are distinct layers.
×

Using Console.Read() instead of Console.ReadLine() for numeric input

Symptom
The program behaves unexpectedly — Console.Read() returns the ASCII code of the first character, not the number typed. For example, typing '5' yields 53.
Fix
Always use Console.ReadLine() and then parse the string. Console.Read() is only for reading single characters by ASCII value.
×

Forgetting to add a namespace using directive

Symptom
Compiler error CS0246: 'The type or namespace name 'Console' could not be found'. The code won't compile even though Console is a standard type.
Fix
Add 'using System;' at the top of your file. Alternatively use fully qualified name: System.Console.WriteLine().
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
What is the difference between C# and .NET — are they the same thing?
Q02SENIOR
What happens between writing C# code and it actually running on a machin...
Q03SENIOR
Why is C# described as 'statically typed' and what practical advantage d...
Q04JUNIOR
Explain the difference between Console.Read() and Console.ReadLine(). Wh...
Q05JUNIOR
What is an object-oriented programming language, and how does C# support...
Q01 of 05JUNIOR

What is the difference between C# and .NET — are they the same thing?

ANSWER
No, they are not the same. C# is a programming language — the syntax and rules you write your code in. .NET is the platform and runtime that compiles and executes that code. .NET includes the Common Language Runtime (CLR), the base class library, and the just-in-time compiler. You can write C# code that runs on .NET, but .NET can also run code written in F#, Visual Basic, and other .NET languages. In short: C# is the language, .NET is the engine.
FAQ · 5 QUESTIONS

Frequently Asked Questions

01
Is C# hard to learn for a complete beginner?
02
Do I need to pay for anything to start coding in C#?
03
What is the difference between C, C++, and C#? Are they related?
04
What is the difference between int.Parse() and Convert.ToInt32()?
05
What IDE or editor should I use for C# development?
🔥

That's C# Basics. Mark it forged?

5 min read · try the examples if you haven't

1 / 11 · C# Basics
Next
C# Data Types and Variables