-
-
Save ilkerde/864508 to your computer and use it in GitHub Desktop.
public IEnumerable<Answer> GetAll() | |
{ | |
List<Answer> answers = GetAnswers(); | |
return answers; | |
} |
@mike: That's not only a problem of C#. It seems this is general problem in .NET generics.
@steffen: Yes, you're totally right.
There is another point. If you return IEnumerable instead of Array or List you are disabling fast indexed access. Why would you do this?
In general: I don't see any value in returning a base class if you could return the concrete class. But maybe I am wrong.
If you want immutability then just use an immutable data structure.
@codefromground thanks for your thoughts. appreciate it. i truly hope that we can dive into topics as this one while having a nice espresso at your site ;) Regarding the ReadonlyCollection: I'm really sorry that my initial example utilized a List. It distracted too much from what i wanted to stress. The second example (using Answer[]) fits more to what i wanted to have opinions for.
@forki Thanks indeed for your in-depth and thoughtful comments.
I do believe that I would have never achieved to express the importance of materialization (and even more, preserving the materialization information by type signature) as you did in your comment.
At this point, I'd like to thank all of you for lending your time and brain for my little question. It was very valuable and insightful.
@steffen: Sure. I'm sorry that we can't do that in C#. But your answer is a good answer for me "When you should return IEnumerable and when a type with the context of a "materialized" scope." Thx.