How do I use a C# reserved keyword as a property name without the @ prefix?
Asked Answered
A

3

12

I need to design a class where one property name has to be return, but when I create a property name like return then I get an error.

After some research I found out that one can use a reserved keyword as a property or variable name by adding a @ prefix in C#, or by enclosing it in square brackets [] in VB.NET. For example:

var @class = new object();

So here is my class design code.

public class Person
{
    string _retVal;

    public string @return
    {
        get { return _retVal; }
        set { _retVal = value; }
    }
}

...
Person p = new Person();
p.@return = "hello";

Now I am not getting any error, but when I try to access property name like return then I need to write the name like @return, which I don't want. I want to access the property name like p.return = "hello"; instead of p.@return = "hello"; so I'd like to know if there is any way to do that?

Acanthoid answered 6/6, 2012 at 10:43 Comment(6)
Why bent on using reserved Keyword?Deciare
doesn't seem reasonable to me. You could use a "Return" name instead which is not a reserved keyword.Munsey
use result instead of return. Variable choice is your freedom.Publicness
There is a way to do this in C# using dynamic dispatch, however it would be over-complicating things to such a degree that I'd actually feel bad for suggesting it..Puncheon
@phg I'm not certain but I think if you changed the property to Return you would also need to flag the assembly as non CLS compliant..Puncheon
@Puncheon I agree, and I wouldn't call it Return myself if I worked on a library. But if it's just some small c# program which won't ever be called by anything else, and one insists on Return, who cares. Still, good point.Betel
T
33

You can't. It is a reserved keyword. That means "you can't". Contrast to "contextual keywords" which usually means "we added this later, so we needed it to work in some pre-existing scenarios".

The moderate answer here is: use @return.

A better answer here is: rename your property. Perhaps ReturnValue.

There is also the option of, say, Return - but you might need to think about case-insensitive languages too.

Treenatreenail answered 6/6, 2012 at 10:46 Comment(1)
+1 for considering case insensitive languages - lots of people forget about them when naming thingsPuncheon
A
-1

You can rename namespaces like this:

using Test = System.Diagnostics;
Anthropogenesis answered 1/2, 2018 at 13:26 Comment(0)
H
-3

No way to achieve this because reserved Keywords are predefined, reserved identifiers that have special meanings to the compiler.

it's better you change name of property and use it in you code...something as given in @Marc answer...

Helbonia answered 6/6, 2012 at 10:48 Comment(1)
...then why repeat Marc's answer? :)Canales

© 2022 - 2024 — McMap. All rights reserved.