HASSANHABIB

§ 2 — The C# Coding Standard

Variables

2 min read · chapter 2 of 5
Search the books

    Open the full search page →

    Naming#

    Variable names should be concise and representative of nature and the quantity of the value it holds or will potentially hold.

    Names#

    Do

    var student = new Student();

    Don't

    var s = new Student();

    Also, Don't

    var stdnt = new Student();

    The same rule applies to lambda expressions:

    Do

    students.Where(student => student ... );

    Don't

    students.Where(s => s ... );

    Plurals#

    Do

    var students = new List<Student>();

    Don't

    var studentList = new List<Student>();

    Names with Types#

    Do

    var student = new Student();

    Don't

    var studentModel = new Student();

    Also, Don't

    var studentObj = new Student();

    Nulls or Defaults#

    If a variable value is its default such as 0 for int or null for strings and you are not planning on changing that value (for testing purposes for instance) then the name should identify that value.

    Do

    Student noStudent = null;

    Don't

    Student student = null;

    Also, Do

    int noChangeCount = 0;

    But, Don't

    int changeCount = 0;

    Declarations#

    Declaring a variable and instantiating it should indicate the immediate type of the variable, even if the value is to be determined later.

    Clear Types#

    If the right side type is clear, then use var to declare your variable

    Do

    var student = new Student();

    Don't

    Student student = new Student();

    Semi-Clear Types#

    If the right side isn’t clear (but known) of the returned value type, then you must explicitly declare your variable with its type.

    Do

    Student student = GetStudent();

    Don't

    var student = GetStudent();

    Unclear Types#

    If the right side isn’t clear and unknown (such as an anonymous types) of the returned value type, you may use var as your variable type.

    Do

    var student = new
    {
        Name = "Hassan",
        Score = 100
    };

    Single-Property Types#

    Assign properties directly if you are declaring a type with one property.

    Do

    var inputStudentEvent = new StudentEvent();
    inputStudentEvent.Student = inputProcessedStudent;

    Don't

    var inputStudentEvent = new StudentEvent
    {
        Student = inputProcessedStudent
    };

    Also, Do

    var studentEvent = new StudentEvent
    {
        Student = someStudent,
        Date = someDate
    };

    Don't

    var studentEvent = new StudentEvent();
    studentEvent.Student = someStudent;
    studentEvent.Date = someDate;

    Organization#

    Breakdown#

    If a variable declaration exceeds 120 characters, break it down starting from the equal sign.

    Do

    List<Student> washingtonSchoolsStudentsWithGrades = 
        await GetAllWashingtonSchoolsStudentsWithTheirGradesAsync();

    Don't

    List<Student> washingtonSchoolsStudentsWithGrades = await GetAllWashingtonSchoolsStudentsWithTheirGradesAsync();

    Multiple Declarations#

    Declarations that occupy two lines or more should have a new line before and after them to separate them from previous and next variables declarations.

    Do

    Student student = GetStudent();
    
    List<Student> washingtonSchoolsStudentsWithGrades = 
        await GetAllWashingtonSchoolsStudentsWithTheirGradesAsync();
    
    School school = await GetSchoolAsync();

    Don't

    Student student = GetStudent();
    List<Student> washingtonSchoolsStudentsWithGrades = 
        await GetAllWashingtonSchoolsStudentsWithTheirGradesAsync();
    School school = await GetSchoolAsync();

    Also, declarations of variables that are of only one line should have no new lines between them.

    Do

    Student student = GetStudent();
    School school = await GetSchoolAsync();

    Don't

    Student student = GetStudent();
    
    School school = await GetSchoolAsync();

    This chapter lives on GitHub, where it is written in the open. Read the source or suggest a change.