C# Convert Bool, Int

Convert

A bool can be converted to 0 or 1.
In other languages,
false is equivalent to 0
and true is equivalent to 1. This is not possible in the C# language. We convert bools to ints, first running through an example.

Note:When you try to convert a bool into an int with an implicit cast, you receive an error: "Cannot convert type bool to int."

Compile-Time Error

Example

First, you cannot implicitly convert from bool to int. The C# compiler uses this rule to enforce program correctness. The same rule mandates you cannot test an integer in an if-statement. Here we correctly convert from bool to int.

Note:I felt there had to be some way to cast the true into a 1, and the false into a 0. But this is not possible.

C# program that uses bools

using System;

class Program
{
    static void Main()
    {
	// Example bool is true
	bool t = true;

	// A
	// Convert bool to int
	int i = t ? 1 : 0;
	Console.WriteLine(i); // 1

	// Example bool is false
	bool f = false;

	// B
	// Convert bool to int
	int y = Convert.ToInt32(f);
	Console.WriteLine(y); // 0
    }
}

Output

1
0
Framework: NET

You cannot cast bool to int, such as in the statement (int)true, without a compiler error. Opening up Convert.ToInt32 up in IL Disassembler, I found it tests the bool parameter against true and returns 1 if it is true, or false otherwise.

Convert.ToInt32 Method: MSDNThis section provides information

Further, I benchmarked the two statements (A, B) and found identical performance. The compiler efficiently inlines Convert.ToInt32(bool) to be the same as the ternary expression in A. Therefore, A and B follow the same instructions.

Note:There is more information about the ternary operator on this site. It is useful for small conditional statements.

Ternary Operator

Summary

The C# programming language

Here we saw that you must use a ternary or if-statement to convert from bool to int. I suggest that the ternary statement above is best, as it involves the fewest characters to type and is simple.

Bool Type

Also:Extension methods could solve this problem partly, but they would make most projects more complex.


C#: Cast