Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In C# can I make auto-property perform some extra work with a help of an attribute?

This question is related but not the same as this: How do you give a C# Auto-Property a default value?

I love auto-properties, but sometimes I have to do something like this:

private string someName;

public string SomeName
{
    get
    {
       return someName;
    }

    set
    {
        someName = value.Trim();
    }
}

If I have to do the same thing many times, I start wishing that I did not need to type so many lines/characters of code. I want to be able to intercept the value and change it sort of like so:

public string Somename
{
    get;

    [Trim]
    set;
}

Is there a way to do something like this? Would it be stupid? Is there a better way? Any other general comments? I admit, the example I gave is a bit hypothetical and I cannot locate the exact code now which made me think of this.

Thanks.

like image 316
Hamish Grubijan Avatar asked Jun 03 '10 22:06

Hamish Grubijan


2 Answers

You can do it using AOP, like with Postsharp, but why aren't you just using a backing store in this case?

Also, for completeness, you should probably do this:

someName = (value ?? string.Empty).Trim();

to handle null as well.

Note that if you have a specific case in mind where there is more work involved, you should probably ask about that case, and not the trivial one you have in your question

like image 194
Lasse V. Karlsen Avatar answered Nov 15 '22 22:11

Lasse V. Karlsen


No there is not a way to do this. C# auto properties are meant to be syntactic sugar for only the most trivial of properties and nothing more.

like image 36
JaredPar Avatar answered Nov 15 '22 20:11

JaredPar