Click here to Skip to main content
15,888,984 members
Home / Discussions / C#
   

C#

 
GeneralRe: 'out' keyword, to use or not to use Pin
Foothill20-Apr-16 4:15
professionalFoothill20-Apr-16 4:15 
GeneralRe: 'out' keyword, to use or not to use Pin
OriginalGriff20-Apr-16 4:30
mveOriginalGriff20-Apr-16 4:30 
GeneralRe: 'out' keyword, to use or not to use Pin
Foothill20-Apr-16 5:00
professionalFoothill20-Apr-16 5:00 
GeneralRe: 'out' keyword, to use or not to use Pin
OriginalGriff20-Apr-16 5:12
mveOriginalGriff20-Apr-16 5:12 
GeneralRe: 'out' keyword, to use or not to use Pin
Foothill20-Apr-16 5:41
professionalFoothill20-Apr-16 5:41 
GeneralRe: 'out' keyword, to use or not to use Pin
OriginalGriff20-Apr-16 6:22
mveOriginalGriff20-Apr-16 6:22 
GeneralRe: 'out' keyword, to use or not to use Pin
Foothill20-Apr-16 7:16
professionalFoothill20-Apr-16 7:16 
AnswerRe: 'out' keyword, to use or not to use Pin
Pete O'Hanlon19-Apr-16 23:01
mvePete O'Hanlon19-Apr-16 23:01 
As in everything else, it really depends what you are trying to solve. I have seen many contorted solutions to avoiding the use of out parameters and whether or not they make sense really depends on what the intent of the code was. Let's take the Try... routines. With later versions of the .NET framework, what could the API designers do? One option is to use a class structure that looks something like this:
C#
public class Parse<T>
{
  public bool HasValue;
  public T Value;
}
This could then be the target of something like this:
C#
Parse<int> value = int.TryParse("12");
if (!value.HasValue) return;
DoSomething(value.Value);
While this may seem to be a reasonable solution, on the surface, there are several issues with this design. The biggest problem I have with it is that you are allocating a larger object than you need to. Even if we were to change this to a struct, it's still an unreasonably large surface area for a simple value. Another problem is the cumbersome syntax of having to use value.Value to get the value - you could use implicit operators to work around this but that's adding extra burden again. Granted, the language could be extended with syntactic sugar to hide the underlying implementation (much like null operator hiding the underlying Nullable<T> implementations) but this is, again, overkill because Nullable types were added to support a real problem in the codebase.

So, what other options have I seen? Well, I have seen people returning a tuple with the first parameter being the success or not of the operation. I have seen people advocating the use of exceptions - thereby largely missing the point and I have seen delegates in various forms being required to set values. I have also seen APIs that require multiple calls, the first being a CanParse (or whatever command you need here), followed by a Parse - this being a particularly daft operation because you are effectively calling parse twice - the first one being required to see if you can parse the value, and then the second one being called to get the same value out that you would have got out with the previous operation.
This space for rent

GeneralRe: 'out' keyword, to use or not to use Pin
Nathan Minier20-Apr-16 1:51
professionalNathan Minier20-Apr-16 1:51 
GeneralRe: 'out' keyword, to use or not to use Pin
Pete O'Hanlon20-Apr-16 2:06
mvePete O'Hanlon20-Apr-16 2:06 
GeneralRe: 'out' keyword, to use or not to use Pin
Nathan Minier20-Apr-16 2:17
professionalNathan Minier20-Apr-16 2:17 
GeneralRe: 'out' keyword, to use or not to use Pin
Pete O'Hanlon20-Apr-16 2:36
mvePete O'Hanlon20-Apr-16 2:36 
GeneralRe: 'out' keyword, to use or not to use Pin
Foothill20-Apr-16 3:42
professionalFoothill20-Apr-16 3:42 
GeneralRe: 'out' keyword, to use or not to use Pin
Richard Deeming20-Apr-16 4:19
mveRichard Deeming20-Apr-16 4:19 
AnswerRe: 'out' keyword, to use or not to use Pin
Ian A Davidson20-Apr-16 0:09
Ian A Davidson20-Apr-16 0:09 
GeneralRe: 'out' keyword, to use or not to use Pin
Foothill20-Apr-16 4:34
professionalFoothill20-Apr-16 4:34 
QuestionWhile button is clicked Pin
tvks19-Apr-16 8:30
tvks19-Apr-16 8:30 
AnswerRe: While button is clicked Pin
clapclap19-Apr-16 8:32
clapclap19-Apr-16 8:32 
AnswerRe: While button is clicked Pin
koolprasad200319-Apr-16 18:26
professionalkoolprasad200319-Apr-16 18:26 
GeneralRe: While button is clicked Pin
CHill6020-Apr-16 1:25
mveCHill6020-Apr-16 1:25 
GeneralRe: While button is clicked Pin
koolprasad200320-Apr-16 1:33
professionalkoolprasad200320-Apr-16 1:33 
AnswerRe: While button is clicked Pin
CHill6020-Apr-16 2:14
mveCHill6020-Apr-16 2:14 
PraiseRe: While button is clicked Pin
tvks20-Apr-16 10:57
tvks20-Apr-16 10:57 
GeneralRe: While button is clicked Pin
CHill6020-Apr-16 11:01
mveCHill6020-Apr-16 11:01 
GeneralRe: While button is clicked Pin
tvks27-Apr-16 2:55
tvks27-Apr-16 2:55 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.