Discover how to solve the 40 most frequent C# compile-time errors with our in-depth guide.
Introduction
The article demonstrates common compile-time errors from missing semicolons to type mismatches and solutions to fix those compile-time errors.
Table of Contents
Missing Semicolon
Missing or Extra Braces
Undefined Variable
Type Mismatch
Incorrect Method Signatures
Inconsistent Accessibility
Circular Base Class Dependency
No Implicit Conversion
The method with Conditional Attributes Not Emitting Output
Use of Unassigned Local Variable
Lock on Non-Reference Type
Abstract Class Instantiation
Property Lacking Getter/Setter
Interface Implementation Missing Member
Attribute Misplacement
Non-Implemented Exception Interface
Accessing Static Member via Instance
Constructor in Static Class
Overloading by Return Type
Sealed Class Inheritance
Missing Generic Type Parameters
Duplicate Identifier
Readonly Field Modification
Invalid Array Rank
Enum Conversion
Enum Underlying Type Mismatch
Missing Comma in Enum
Field Initialization Dependency
Method Without Body
Invalid Override
Switch on Nullable Type Without Null Check
Constraints Are Not Satisfied
Type Expected
Assignment to Expression
Lacking Return in a Non-Void Method
Invalid Array Initialization
Async Method Without Await
Case Label with Invalid Type
Constructor Calling Itself
Constant must be Intialized
1. Missing Semicolon
Error Description
CS1002: ; expected happens when a developer misses semicolons (;) at the end of a code line.
Example
Console.WriteLine(number)
Solution
The compiler will highlight the line number and a simple solution is to add a semicolon at the end of the statement
Console.WriteLine(number);
2. Missing or Extra Braces
Error Description
Missing braces ({ or }) can cause a set of errors, including
Example
{
public static void Main()
Console.WriteLine(“Hello, world!”);
}
}
Solution
Make sure to close the brace for each opening brace.
{
public static void Main()
{
Console.WriteLine(“Hello, world!”);
}
}
3. Undefined Variable
Error Description
CS0103 The name ‘number’ does not exist in the current contexthappens when a variable that has not been defined or is out of scope.
Example
{
public static void Main()
{
Console.WriteLine(number);
}
}
Solution
Define the variable as shown below before printing on the console window.
{
public static void Main()
{
int number = 10;
Console.WriteLine(number);
}
}
4. Type Mismatch
Error Description
A data type mismatch error, indicated by CS0029 Cannot implicitly convert type ‘string’ to ‘int’, usually happens when one data type is assigned with a different data type value as shown below.
Example
Solution
Developers need to make sure of the type conversion as shown below using int.Parse for converting a string to an integer variable.
5. Incorrect Method Signatures
Error Description
CS1503 Argument 1: cannot convert from ‘string’ to ‘int’ happens when you pass an incorrect type in comparison to the method definition or forget to create/define a method.
Example
{
public static void PrintNumber(int num)
{
Console.WriteLine(num);
}
public static void Main()
{
PrintNumber(“123”);
}
}
Solution
A simple solution is to match the type of value passed with the function parameter definition or use type conversion.
{
public static void PrintNumber(int num)
{
Console.WriteLine(num);
}
public static void Main()
{
PrintNumber(int.Parse(“123”));
}
}
6. Inconsistent Accessibility
Error Description
CS0122 ‘Helper’ is inaccessible due to its protection level happens when a developer provides a type with a higher accessibility level as a method parameter or return type than the method itself
Example
{
}
public class Program
{
public static Helper GetHelper()
{
return new Helper();
}
}
Solution
The simplest solution is to match the access modifier of the class Helper with the method GetHelper().
{
}
public class Program
{
public static Helper GetHelper()
{
return new Helper();
}
}
7. Circular Base Class Dependency
Error Description
CS0146 Circular base type dependency involving ‘ClassA’ and ‘ClassB’ happens when two classes are inheriting from each other.
Example
{
}
public class ClassB : ClassA
{
}
Solution
Reevaluate the design to remove the circular dependency.
{
}
public class ClassB
{
}
8. No Implicit Conversion
Error Description
CS0266 Cannot implicitly convert type ‘double’ to ‘int’. An explicit conversion exists (are you missing a cast?) happens when an implicit conversion is required between two types.
Example
int value = number;
Solution
Explicitly cast the double variable to int.
int value = (int)number;
9. Method with Conditional Attributes Not Emitting Output
Error Description
Using conditional attributes like ([Conditional(“DEBUG”)]) does not result in any output if the conditional symbol is not defined.
Example
public static void Log(string message)
{
Console.WriteLine(message);
}
public static void Main()
{
Log(“Starting application.”);
}
Solution
Add a conditional compilation symbol (DEBUG) is defined or handles the logic accordingly as shown below
using System.Diagnostics;
[Conditional(“DEBUG”)]
public static void Log(string message)
{
Console.WriteLine(message);
}
public static void Main()
{
Log(“Starting application.”);
}
10. Use of Unassigned Local Variable
Error Description
CS0165 Use of unassigned local variable ‘value’ happens when the developer uses a local variable before a value is assigned to it.
Example
Console.WriteLine(value);
Solution
A simple solution is to assign an initial value of 0 to the integer local variable.
Console.WriteLine(value);
11. Lock on Non-Reference Type
Error Description
CS0185 ‘int’ is not a reference type as required by the lock statement happens when a developer tries to use lock on the non-reference type.
Example
int x = 0;
lock (x) { // Error
Console.WriteLine(“Locked”);
}
}
Solution
A simple solution is to make the variable reference type.
object lockObj = new object();
lock (lockObj) {
Console.WriteLine(“Locked”);
}
}
12. Abstract Class Instantiation
Error Description
CS0144 Cannot create an instance of the abstract type or interface ‘Animal’ happens when a developer tries to create an instance of an abstract class.
Example
{
public abstract void Speak();
}
public class Program
{
public static void Main()
{
Animal myAnimal = new Animal(); // Error
}
}
Solution
A simple solution is to create an instance of a class derived from the abstract class as shown below.
{
public abstract void Speak();
}
public class Dog : Animal
{
public override void Speak()
{
Console.WriteLine(“Bark”);
}
}
public class Program
{
public static void Main()
{
Animal myAnimal = new Dog();
myAnimal.Speak();
}
}
13. Property Lacking Getter/Setter
Error Description
CS0200 Property or indexer ‘Person.Name’ cannot be assigned to — it is read only happens when you try to use a property’s getter or setter when it’s not defined.
Example
{
public string Name { get; }
}
public class Program
{
public static void Main()
{
var person = new Person();
person.Name = “John”; // Error
}
}
Solution
A simple solution is to a setter to the property as shown below if required to update the Name value.
{
public string Name { get; set; }
}
public class Program
{
public static void Main()
{
var person = new Person();
person.Name = “John”;
}
}
14. Interface Implementation Missing Member
Error Description
CS0535 ‘Dog’ does not implement interface member ‘IAnimal.Speak()’ happens when the developer fails to implement the member functions in the derived class.
Example
{
void Speak();
}
public class Dog : IAnimal
{
}
Solution
A simple solution is to implement all member functions of the interface as shown below.
{
void Speak();
}
public class Dog : IAnimal
{
public void Speak()
{
Console.WriteLine(“Bark”);
}
}
15. Attribute Misplacement
Error Description
CS0592 Attribute ‘Serializable’ is not valid on this declaration type. It is only valid on ‘class, struct, enum, delegate’ declarations happens when a developer tries to apply attributes to member functions.
Example
public int MyMethod() { // Error: Serializable is not valid on methods
return 0;
}
Solution
A simple solution is to apply attributes appropriate to program elements.
public class MyClass { // Correct usage
}
16. Non-Implemented Exception Interface
Error Description
CS0535 ‘FileStorage’ does not implement interface member ‘IStorage.Load()’ happens when a method of interface is missing its implementation.
Example
{
void Save(string data);
string Load();
}
class FileStorage : IStorage
{
public void Save(string data)
{
// Implementation here
}
}
Solution
A simple solution is to implement all members defined in the interface.
{
public void Save(string data)
{
// Implementation here
}
public string Load()
{
// Implementation here
return “data”;
}
}
17. Accessing Static Member via Instance
Error Description
CS0176 Member ‘Utility.Number’ cannot be accessed with an instance reference; qualify it with a type name instead happens when a developer tries to access a static variable by creating an instance of that class.
Example
{
public static int Number = 42;
}
public class Test
{
public void Display()
{
Utility util = new Utility();
Console.WriteLine(util.Number); // Error
}
}
Solution
A simple solution is to access the static members using class name as shown below.
18. Constructor in Static Class
Error Description
CS0710 Static classes cannot have instance constructor swhen the developer tries to create a constructor in a static class.
Example
{
public ApplicationSettings() // Error
{
}
}
Solution
A simple solution is to remove the constructor or add a static constructor.
{
// Correct the design or remove the constructor
}
19. Overloading by Return Type
Error Description
CS0111 Type ‘Calculator’ already defines a member called ‘Add’ with the same parameter types when a developer tries to overload the method with different return types which is not possible.
Example
{
public int Add(int a, int b)
{
return a + b;
}
public double Add(int a, int b) // Error
{
return a + b;
}
}
Solution
A simple solution is to overload methods based upon as shown below by changing 2nd method parameter type from int to double
The number of parameters
The type of parameters
The order of parameters
{
return a + b;
}
20. Sealed Class Inheritance
Error Description
CS0509 ‘DerivedClass’: cannot derive from sealed type ‘BaseClass’when a developer tries to inherit from a sealed class.
Example
{
}
public class DerivedClass : BaseClass // Error
{
}
Solution
A simple solution is to remove the sealed keyword if inheritance should be allowed.
{
}
public class DerivedClass : BaseClass
{
}
21. Missing Generic Type Parameters
Error Description
CS0305 Using the generic type ‘GenericClass<T>’ requires 1 type arguments when a developer tries to create an object of Generic Class without specifying the T type
Example
}
GenericClass obj = new GenericClass(); // Error
Solution
A simple solution is to define the type T as shown below.
22. Duplicate Identifier
Error Description
CS0102 The type ‘Person’ already contains a definition for ‘age’happens when a developer tries to create two different variables within the same name in the same class.
Example
{
int age;
string age; // Error
}
Solution
A simple solution is to have distinct meaningful names for different variables.
{
int age;
string name;
}
23. Readonly Field Modification
Error Description
CS0191 A readonly field cannot be assigned to (except in a constructor or init-only setter of the type in which the field is defined or a variable initializer) happens when a developer tries to modify the read-only variable.
Example
{
readonly int maxUsers = 100;
public void SetMaxUsers(int num)
{
maxUsers = num; // Error
}
}
Solution
A simple solution is to remove readonly if value update is required post-constructor initialisation.
{
int maxUsers = 100;
public void SetMaxUsers(int num)
{
maxUsers = num;
}
}
24. Invalid Array Rank
Error Description
CS0022 Wrong number of indices inside []; expected 2 happens when a developer tries to access a 2D matrix without specifying the 2nd indices.
Example
int num = matrix[0]; // Error
Solution
A simple solution is to provide both of the indices.
25. Enum Conversion
Error Description
CS0266 Cannot implicitly convert type ‘int’ to ‘StatusCode’. An explicit conversion exists (are you missing a cast?)
Example
StatusCode code = 1; // Error
Solution
A simple solution to add type casting from int to Enum.
26. Enum Underlying Type Mismatch
Error Description
CS0031 Constant value ‘256’ cannot be converted to a ‘byte’ happens when a developer tries to define value outside the type range bound.
Example
Solution
A simple solution is to change the type for a higher range or adjust the max according to the provided type.
27. Missing Comma in Enum
Error Description
CS1003: Syntax error, ‘,’ expected happens when a developer forgets to add a comma (,) between Enum values/
Example
Solution
A simple solution is to organise enum values comma-separated as shown below.
28. Field Initialization Dependency
Error Description
CS0236 A field initializer cannot reference the non-static field, method, or property ‘MyStruct.y’ when a developer messes the order variable declaration and tries to assign a value to a variable x but its value is dependent on y
Example
int x = y + 1;
int y = 1; // Error
}
Solution
A simple solution is to make an order of variable declaration is correct for dependent variables.
int x, y;
MyStruct() {
y = 1;
x = y + 1;
}
}
29. Method Without Body
Error Description
CS0501 ‘MyClass.MyMethod()’ must declare a body because it is not marked abstract, extern, or partial when a developer tries to create a non-abstract method without a body.
Example
public void MyMethod(); // Error
}
Solution
A simple solution is to provide a method implementation or declare a method as abstract as an abstract method doesn’t require any implementation.
public void MyMethod() {}
}
30. Invalid Override
Error Description
CS0506 ‘Derived.DoWork()’: cannot override inherited member ‘Base.DoWork()’ because it is not marked virtual, abstract, or override when a developer tries to override a method which is not marked as virtual in the base class.
Example
public void DoWork() {}
}
public class Derived : Base {
public override void DoWork() {} // Error
}
Solution
A simple solution is to mark the method as virtual.
public virtual void DoWork() {}
}
31. Switch on Nullable Type Without Null Check
Error Description
Using a nullable type in a switch statement without handling the null case can lead to runtime issues, although it’s a logical error more than a compile-time error.
Example
switch (num) {
case 1:
Console.WriteLine(“One”);
break;
// No case for null
}
Solution
A simple solution is to handle null in the switch statements involving nullable types.
case 1:
Console.WriteLine(“One”);
break;
case null:
Console.WriteLine(“No number”);
break;
}
32. Constraints Are Not Satisfied
Error Description
CS0311 The type ‘MyClass’ cannot be used as type parameter ‘T’ in the generic type or method ‘MyGenericClass<T>’. There is no implicit reference conversion from ‘MyClass’ to ‘IMyInterface’.
Example
public class MyGenericClass<T> where T : IMyInterface {}
public class MyClass {}
MyGenericClass<MyClass> myClass = new MyGenericClass<MyClass>(); // Error
Solution
A simple solution is to make sure that type arguments satisfy the generic constraints.
MyGenericClass<MyClass> myClass = new MyGenericClass<MyClass>();
33. Type Expected
Error Description
CS1526 A new expression requires an argument list or (), [], or {} after type happens a developer forgot to define a type with new the keyword as with var datatype we need to define a type on the right-hand side.
Example
Solution
A simple solution is to define the type as shown below.
34. Assignment to Expression
Error Description
CS0131 The left-hand side of an assignment must be a variable, property or indexer
Example
i++ = 5;
Solution
A simple solution is to assign values only to variables, properties, or indexers.
i = 5;
35. Lacking Return in a Non-Void Method
Error Description
CS0161 ‘GetValue()’: not all code paths return a value when a developer forgot to return a value from a method with a defined return type.
Example
if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) {
return 1;
}
// No return provided for other days
}
Solution
A simple solution is to make sure the function returns some value in all conditional statement checks or returns a common response as shown below.
if (DateTime.Now.DayOfWeek == DayOfWeek.Monday) {
return 1;
}
return 0; // Default return value
}
36. Invalid Array Initialization
Error Description
CS0029 Cannot implicitly convert type ‘string’ to ‘int’ when a developer tries to add inconsistent value into an array than its defined type.
Example
Solution
A simple solution is to add only int elements in the aforementioned array.
37. Async Method Without Await
Error Description
CS1998: This async method lacks ‘await’ operators and will run synchronously happens when a developer creates a aysnc method without an await the operator will result in a warning.
Example
Console.WriteLine(“Processing data”);
}
Solution
A simple solution is to define a least one await statement otherwise the method will run synchronously.
await Task.Delay(1000); // Simulate asynchronous operation
Console.WriteLine(“Processing data”);
}
38. Case Label with Invalid Type
Error Description
CS0029 Cannot implicitly convert type ‘string’ to ‘int’ when a developer tries to define a case with an invalid type.
Example
switch (x) {
case “ten”: // Error
break;
}
Solution
A simple solution is to match the case statement type with the switch expression type.
case 10:
break;
}
39. Constructor Calling Itself
Error Description
CS0516 Constructor ‘MyClass.MyClass()’ cannot call itself when a developer tries to call the constructor within the same class using this.
Example
public MyClass() : this() { // Error
}
}
Solution
A simple solution is to remove the circular constructor call.
public MyClass() {
// Proper initialization code
}
}
40. Constant Must Be Initialized
CS0145 A const field requires a value to be provided happens when a developer tries to create a constant variable without assigning an initial value.
Example
public const string MyConstant; // Error: A constant must have a value
}
Solution
A simple solution is to remove the circular constructor call.
public const string MyConstant = “Hello World”; // Correctly initialized
}
More Cheatsheets
C# Programming🚀
Thank you for being a part of the C# community! Before you leave:
Follow us: Youtube | X | LinkedIn | Dev.to
Visit our other platforms: GitHub
More content at C# Programming