Can parameters be constant?

Unfortunately you cannot do this in C#.

The const keyword can only be used for local variables and fields.

The readonly keyword can only be used on fields.

NOTE: The Java language also supports having final parameters to a method. This functionality is non-existent in C#.

from http://www.25hoursaday.com/CsharpVsJava.html

EDIT (2019/08/13): I'm throwing this in for visibility since this is accepted and highest on the list. It's now kind of possible with in parameters. See the answer below this one for details.


Here's a short and sweet answer that will probably get a lot of down votes. I haven't read all of the posts and comments, so please forgive me if this has been previously suggested.

Why not take your parameters and pass them into an object that exposes them as immutable and then use that object in your method?

I realize this is probably a very obvious work around that has already been considered and the OP is trying to avoid doing this by asking this question, but I felt it should be here none-the-less...

Good luck :-)


This is now possible in C# version 7.2:

You can use the in keyword in the method signature. MSDN documentation.

The in keyword should be added before specifying a method's argument.

Example, a valid method in C# 7.2:

public long Add(in long x, in long y)
{
    return x + y;
}

While the following is not allowed:

public long Add(in long x, in long y)
{
    x = 10; // It is not allowed to modify an in-argument.
    return x + y;
}

Following error will be shown when trying to modify either x or y since they are marked with in:

Cannot assign to variable 'in long' because it is a readonly variable

Marking an argument with in means:

This method does not modify the value of the argument used as this parameter.


The answer: C# doesn't have the const functionality like C++.

I agree with Bennett Dill.

The const keyword is very useful. In the example, you used an int and people don't get your point. But, why if you parameter is an user huge and complex object that can't be changed inside that function? That's the use of const keyword: parameter can't change inside that method because [whatever reason here] that doesn't matters for that method. Const keyword is very powerful and I really miss it in C#.