Is there a way I can return more than one integer from a method? [duplicate] The 2019 Stack Overflow Developer Survey Results Are InHow can I return multiple values from a function in C#?Returning two lists in C#Hidden Features of C#?Randomize a List<T>Best way to repeat a character in C#Proper use of the IDisposable interfaceDoes C# have extension properties?Get int value from enum in C#How do I remedy the “The breakpoint will not currently be hit. No symbols have been loaded for this document.” warning?Group by in LINQIs there a reason for C#'s reuse of the variable in a foreach?d is less efficient than [0-9]

For what reasons would an animal species NOT cross a *horizontal* land bridge?

Can we generate random numbers using irrational numbers like π and e?

Cooking pasta in a water boiler

What information about me do stores get via my credit card?

Pokemon Turn Based battle (Python)

How to charge AirPods to keep battery healthy?

Why doesn't shell automatically fix "useless use of cat"?

Accepted by European university, rejected by all American ones I applied to? Possible reasons?

What's the name of these plastic connectors

"as much details as you can remember"

Merge two greps into single one

Why does the nucleus not repel itself?

Is it correct to say the Neural Networks are an alternative way of performing Maximum Likelihood Estimation? if not, why?

Why couldn't they take pictures of a closer black hole?

Falsification in Math vs Science

Why are there uneven bright areas in this photo of black hole?

Is Cinnamon a desktop environment or a window manager? (Or both?)

Why doesn't UInt have a toDouble()?

If I can cast sorceries at instant speed, can I use sorcery-speed activated abilities at instant speed?

Keeping a retro style to sci-fi spaceships?

Inverse Relationship Between Precision and Recall

If I score a critical hit on an 18 or higher, what are my chances of getting a critical hit if I roll 3d20?

Button changing its text & action. Good or terrible?

How can I add encounters in the Lost Mine of Phandelver campaign without giving PCs too much XP?



Is there a way I can return more than one integer from a method? [duplicate]



The 2019 Stack Overflow Developer Survey Results Are InHow can I return multiple values from a function in C#?Returning two lists in C#Hidden Features of C#?Randomize a List<T>Best way to repeat a character in C#Proper use of the IDisposable interfaceDoes C# have extension properties?Get int value from enum in C#How do I remedy the “The breakpoint will not currently be hit. No symbols have been loaded for this document.” warning?Group by in LINQIs there a reason for C#'s reuse of the variable in a foreach?d is less efficient than [0-9]



.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;








20
















This question already has an answer here:



  • How can I return multiple values from a function in C#?

    26 answers



I have a method like this:



private double GetHeight()

return 2;



But I would like to be able to return two different numbers for example 2 and 3. Is there any way that I can do this in C#?










share|improve this question















marked as duplicate by Mormegil, Soner Gönül c#
Users with the  c# badge can single-handedly close c# questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Apr 8 at 12:38


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


















  • return array if you need more values

    – Shubham
    Apr 8 at 8:49






  • 1





    This probably is exactly what you need

    – Jordi
    Apr 8 at 8:51






  • 2





    for clarity: does your method always return the same number of return values (each with specific semantic meaning) - or is the number of return values dynamic, i.e. sometimes it'll be 1 (or maybe even zero), and other times it might be 20? It matters a lot. For the fixed number scenario: any of the tuple-ish answers are good; for the dynamic scenario: the array/list approaches are good.

    – Marc Gravell
    Apr 8 at 9:00







  • 1





    How does this question have so many upvotes? The question lacks a significant amount of effort and a simple search on the internet would've provided the answer stackoverflow.com/help/how-to-ask

    – Denny
    Apr 8 at 12:40


















20
















This question already has an answer here:



  • How can I return multiple values from a function in C#?

    26 answers



I have a method like this:



private double GetHeight()

return 2;



But I would like to be able to return two different numbers for example 2 and 3. Is there any way that I can do this in C#?










share|improve this question















marked as duplicate by Mormegil, Soner Gönül c#
Users with the  c# badge can single-handedly close c# questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Apr 8 at 12:38


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.


















  • return array if you need more values

    – Shubham
    Apr 8 at 8:49






  • 1





    This probably is exactly what you need

    – Jordi
    Apr 8 at 8:51






  • 2





    for clarity: does your method always return the same number of return values (each with specific semantic meaning) - or is the number of return values dynamic, i.e. sometimes it'll be 1 (or maybe even zero), and other times it might be 20? It matters a lot. For the fixed number scenario: any of the tuple-ish answers are good; for the dynamic scenario: the array/list approaches are good.

    – Marc Gravell
    Apr 8 at 9:00







  • 1





    How does this question have so many upvotes? The question lacks a significant amount of effort and a simple search on the internet would've provided the answer stackoverflow.com/help/how-to-ask

    – Denny
    Apr 8 at 12:40














20












20








20









This question already has an answer here:



  • How can I return multiple values from a function in C#?

    26 answers



I have a method like this:



private double GetHeight()

return 2;



But I would like to be able to return two different numbers for example 2 and 3. Is there any way that I can do this in C#?










share|improve this question

















This question already has an answer here:



  • How can I return multiple values from a function in C#?

    26 answers



I have a method like this:



private double GetHeight()

return 2;



But I would like to be able to return two different numbers for example 2 and 3. Is there any way that I can do this in C#?





This question already has an answer here:



  • How can I return multiple values from a function in C#?

    26 answers







c#






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Apr 8 at 8:54









Michał Turczyn

16.4k132241




16.4k132241










asked Apr 8 at 8:48









Alan2Alan2

1,76956139278




1,76956139278




marked as duplicate by Mormegil, Soner Gönül c#
Users with the  c# badge can single-handedly close c# questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Apr 8 at 12:38


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.









marked as duplicate by Mormegil, Soner Gönül c#
Users with the  c# badge can single-handedly close c# questions as duplicates and reopen them as needed.

StackExchange.ready(function()
if (StackExchange.options.isMobile) return;

$('.dupe-hammer-message-hover:not(.hover-bound)').each(function()
var $hover = $(this).addClass('hover-bound'),
$msg = $hover.siblings('.dupe-hammer-message');

$hover.hover(
function()
$hover.showInfoMessage('',
messageElement: $msg.clone().show(),
transient: false,
position: my: 'bottom left', at: 'top center', offsetTop: -7 ,
dismissable: false,
relativeToBody: true
);
,
function()
StackExchange.helpers.removeMessages();

);
);
);
Apr 8 at 12:38


This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.














  • return array if you need more values

    – Shubham
    Apr 8 at 8:49






  • 1





    This probably is exactly what you need

    – Jordi
    Apr 8 at 8:51






  • 2





    for clarity: does your method always return the same number of return values (each with specific semantic meaning) - or is the number of return values dynamic, i.e. sometimes it'll be 1 (or maybe even zero), and other times it might be 20? It matters a lot. For the fixed number scenario: any of the tuple-ish answers are good; for the dynamic scenario: the array/list approaches are good.

    – Marc Gravell
    Apr 8 at 9:00







  • 1





    How does this question have so many upvotes? The question lacks a significant amount of effort and a simple search on the internet would've provided the answer stackoverflow.com/help/how-to-ask

    – Denny
    Apr 8 at 12:40


















  • return array if you need more values

    – Shubham
    Apr 8 at 8:49






  • 1





    This probably is exactly what you need

    – Jordi
    Apr 8 at 8:51






  • 2





    for clarity: does your method always return the same number of return values (each with specific semantic meaning) - or is the number of return values dynamic, i.e. sometimes it'll be 1 (or maybe even zero), and other times it might be 20? It matters a lot. For the fixed number scenario: any of the tuple-ish answers are good; for the dynamic scenario: the array/list approaches are good.

    – Marc Gravell
    Apr 8 at 9:00







  • 1





    How does this question have so many upvotes? The question lacks a significant amount of effort and a simple search on the internet would've provided the answer stackoverflow.com/help/how-to-ask

    – Denny
    Apr 8 at 12:40

















return array if you need more values

– Shubham
Apr 8 at 8:49





return array if you need more values

– Shubham
Apr 8 at 8:49




1




1





This probably is exactly what you need

– Jordi
Apr 8 at 8:51





This probably is exactly what you need

– Jordi
Apr 8 at 8:51




2




2





for clarity: does your method always return the same number of return values (each with specific semantic meaning) - or is the number of return values dynamic, i.e. sometimes it'll be 1 (or maybe even zero), and other times it might be 20? It matters a lot. For the fixed number scenario: any of the tuple-ish answers are good; for the dynamic scenario: the array/list approaches are good.

– Marc Gravell
Apr 8 at 9:00






for clarity: does your method always return the same number of return values (each with specific semantic meaning) - or is the number of return values dynamic, i.e. sometimes it'll be 1 (or maybe even zero), and other times it might be 20? It matters a lot. For the fixed number scenario: any of the tuple-ish answers are good; for the dynamic scenario: the array/list approaches are good.

– Marc Gravell
Apr 8 at 9:00





1




1





How does this question have so many upvotes? The question lacks a significant amount of effort and a simple search on the internet would've provided the answer stackoverflow.com/help/how-to-ask

– Denny
Apr 8 at 12:40






How does this question have so many upvotes? The question lacks a significant amount of effort and a simple search on the internet would've provided the answer stackoverflow.com/help/how-to-ask

– Denny
Apr 8 at 12:40













5 Answers
5






active

oldest

votes


















25














Yes ValueTuple / Named Tuple (available in C# 7.1). The advantage is its the most succinct, its immutable, and its easy to construct.




The ValueTuple struct has fields named Item1, Item2, Item3, and so on,
similar to the properties defined in the existing Tuple types.



However, when you initialize a tuple, you can use new language
features that give better names to each field. Doing so creates a
named tuple. Named tuples still have elements named Item1, Item2,
Item3 and so on. But they also have synonyms for any of those elements
that you have named. You create a named tuple by specifying the names
for each element.




private (double first, double second) GetHeight()

return (1,2);


...

var result = ViaNamedValueTuple();
Console.WriteLine($"result.first, result.second");

var (first, second) = ViaNamedValueTuple();
Console.WriteLine($"first, second");


Classic Tuple



C# tuple type




The .NET Framework already has generic Tuple classes. These classes,
however, had two major limitations. For one, the Tuple classes named
their properties Item1, Item2, and so on. Those names carry no
semantic information. Using these Tuple types does not enable
communicating the meaning of each of the properties. The new language
features enable you to declare and use semantically meaningful names
for the elements in a tuple.




public Tuple<int, int> ViaClassicTuple()

return new Tuple<int, int>(1,2);


...

var tuple = ViaClassicTuple();
Console.WriteLine($"tuple.Item1, tuple.Item2");


Classic struct



struct (C# Reference)




A struct type is a value type that is typically used to encapsulate
small groups of related variables, such as the coordinates of a
rectangle or the characteristics of an item in an inventory.




public struct ClassicStruct

public int First get; set;
public int Second get; set;
public ClassicStruct(int first, int second)

First = first;
Second = second;



...

public ClassicStruct ViaClassicStruct()

return new ClassicStruct(1, 2);


...

var classicStruct = ViaClassicStruct();
Console.WriteLine($"classicStruct.First, classicStruct.Second");


Readonly struct



readonly (C# Reference)




The readonly modifier on a struct definition declares that the struct
is immutable. Every instance field of the struct must be marked
readonly, as shown in the following example:




public readonly struct ReadonlyStruct

public int First get;
public int Second get;
public ReadonlyStruct(int first, int second)

First = first;
Second = second;



...

public ReadonlyStruct ViaReadonlyStruct()

return new ReadonlyStruct(1, 2);


...


var readonlyStruct = ViaReadonlyStruct();
Console.WriteLine($"readonlyStruct.First, readonlyStruct.Second");


Simple Class



Classes (C# Programming Guide)




A type that is defined as a class is a reference type. At run time,
when you declare a variable of a reference type, the variable contains
the value null until you explicitly create an instance of the class by
using the new operator, or assign it an object of a compatible type
that may have been created elsewhere




public class SomeClass

public int First get; set;
public int Second get; set;
public SomeClass(int first, int second)

First = first;
Second = second;



...

public SomeClass ViaSomeClass()

return new SomeClass(1, 2);


...


var someClass = ViaSomeClass();
Console.WriteLine($"someClass.First, someClass.Second");


Out parameters



out parameter modifier (C# Reference)




The out keyword causes arguments to be passed by reference. It makes
the formal parameter an alias for the argument, which must be a
variable. In other words, any operation on the parameter is made on
the argument. It is like the ref keyword, except that ref requires
that the variable be initialized before it is passed. It is also like
the in keyword, except that in does not allow the called method to
modify the argument value. To use an out parameter, both the method
definition and the calling method must explicitly use the out keyword.




public bool ViaOutParams(out int first, out int second)

first = 1;
second = 2;
return someCondition;


...

if(ViaOutParams(out var firstInt, out var secondInt))
Console.WriteLine($"firstInt, secondInt");


Out Value Tuple



public bool ViaOutTuple(out (int first,int second) output)

output = (1, 2);
return someCondition;


...

if (ViaOutTuple(out var output))
Console.WriteLine($"output.first, output.second");





share|improve this answer




















  • 1





    Note: Available in C# 7.0 +.

    – Adriani6
    Apr 8 at 8:50











  • Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

    – Petter Pettersson
    12 hours ago


















20














Multiple ways:




  1. out parameters:



    private double GetHeight(out int anotherValue)

    anotherValue = 42;
    return 2;




  2. value-tuples:



    private (double height, int anotherValue) GetHeight()

    return (42, 2);



    (warning: value-tuples have known problems if used in .NET Standard libraries, as the assembly bindings from .NET Standard to .NET Framework are ... kinda fubar)




  3. custom return types:



    private Something GetHeight()

    return new Something(42, 2);



    (to avoid allocations, you may wish to define Something as a readonly struct in this scenario)







share|improve this answer
































    3














    Yes, you can use Tuple:



    class Program

    static void Main(string[] args)

    Tuple<int, int> height = GetHeight();

    Console.WriteLine(height.Item1 + " - " + height.Item2);
    Console.ReadLine();


    private static Tuple<int, int> GetHeight()

    return new Tuple<int, int>(2, 3);




    OUTPUT:



    2 - 3






    share|improve this answer






























      2














      Also you could use out parameters:



      static void Main(string[] args)

      int i, j;
      GetHeight(out i, out j);


      public static void GetHeight(out int i1, out int i2)

      i1 = 1;
      i2 = 2;






      share|improve this answer






























        0














        Make a int array.Or another way is to create class.






        share|improve this answer

























        • an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

          – Marc Gravell
          Apr 8 at 8:51












        • Its not bad but its not needed in current question.

          – Vuk Uskokovic
          Apr 8 at 8:52











        • I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

          – Jonesopolis
          Apr 8 at 8:52











        • You can make a list too.

          – Vuk Uskokovic
          Apr 8 at 8:54











        • @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

          – Marc Gravell
          Apr 8 at 8:54


















        5 Answers
        5






        active

        oldest

        votes








        5 Answers
        5






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes









        25














        Yes ValueTuple / Named Tuple (available in C# 7.1). The advantage is its the most succinct, its immutable, and its easy to construct.




        The ValueTuple struct has fields named Item1, Item2, Item3, and so on,
        similar to the properties defined in the existing Tuple types.



        However, when you initialize a tuple, you can use new language
        features that give better names to each field. Doing so creates a
        named tuple. Named tuples still have elements named Item1, Item2,
        Item3 and so on. But they also have synonyms for any of those elements
        that you have named. You create a named tuple by specifying the names
        for each element.




        private (double first, double second) GetHeight()

        return (1,2);


        ...

        var result = ViaNamedValueTuple();
        Console.WriteLine($"result.first, result.second");

        var (first, second) = ViaNamedValueTuple();
        Console.WriteLine($"first, second");


        Classic Tuple



        C# tuple type




        The .NET Framework already has generic Tuple classes. These classes,
        however, had two major limitations. For one, the Tuple classes named
        their properties Item1, Item2, and so on. Those names carry no
        semantic information. Using these Tuple types does not enable
        communicating the meaning of each of the properties. The new language
        features enable you to declare and use semantically meaningful names
        for the elements in a tuple.




        public Tuple<int, int> ViaClassicTuple()

        return new Tuple<int, int>(1,2);


        ...

        var tuple = ViaClassicTuple();
        Console.WriteLine($"tuple.Item1, tuple.Item2");


        Classic struct



        struct (C# Reference)




        A struct type is a value type that is typically used to encapsulate
        small groups of related variables, such as the coordinates of a
        rectangle or the characteristics of an item in an inventory.




        public struct ClassicStruct

        public int First get; set;
        public int Second get; set;
        public ClassicStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ClassicStruct ViaClassicStruct()

        return new ClassicStruct(1, 2);


        ...

        var classicStruct = ViaClassicStruct();
        Console.WriteLine($"classicStruct.First, classicStruct.Second");


        Readonly struct



        readonly (C# Reference)




        The readonly modifier on a struct definition declares that the struct
        is immutable. Every instance field of the struct must be marked
        readonly, as shown in the following example:




        public readonly struct ReadonlyStruct

        public int First get;
        public int Second get;
        public ReadonlyStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ReadonlyStruct ViaReadonlyStruct()

        return new ReadonlyStruct(1, 2);


        ...


        var readonlyStruct = ViaReadonlyStruct();
        Console.WriteLine($"readonlyStruct.First, readonlyStruct.Second");


        Simple Class



        Classes (C# Programming Guide)




        A type that is defined as a class is a reference type. At run time,
        when you declare a variable of a reference type, the variable contains
        the value null until you explicitly create an instance of the class by
        using the new operator, or assign it an object of a compatible type
        that may have been created elsewhere




        public class SomeClass

        public int First get; set;
        public int Second get; set;
        public SomeClass(int first, int second)

        First = first;
        Second = second;



        ...

        public SomeClass ViaSomeClass()

        return new SomeClass(1, 2);


        ...


        var someClass = ViaSomeClass();
        Console.WriteLine($"someClass.First, someClass.Second");


        Out parameters



        out parameter modifier (C# Reference)




        The out keyword causes arguments to be passed by reference. It makes
        the formal parameter an alias for the argument, which must be a
        variable. In other words, any operation on the parameter is made on
        the argument. It is like the ref keyword, except that ref requires
        that the variable be initialized before it is passed. It is also like
        the in keyword, except that in does not allow the called method to
        modify the argument value. To use an out parameter, both the method
        definition and the calling method must explicitly use the out keyword.




        public bool ViaOutParams(out int first, out int second)

        first = 1;
        second = 2;
        return someCondition;


        ...

        if(ViaOutParams(out var firstInt, out var secondInt))
        Console.WriteLine($"firstInt, secondInt");


        Out Value Tuple



        public bool ViaOutTuple(out (int first,int second) output)

        output = (1, 2);
        return someCondition;


        ...

        if (ViaOutTuple(out var output))
        Console.WriteLine($"output.first, output.second");





        share|improve this answer




















        • 1





          Note: Available in C# 7.0 +.

          – Adriani6
          Apr 8 at 8:50











        • Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

          – Petter Pettersson
          12 hours ago















        25














        Yes ValueTuple / Named Tuple (available in C# 7.1). The advantage is its the most succinct, its immutable, and its easy to construct.




        The ValueTuple struct has fields named Item1, Item2, Item3, and so on,
        similar to the properties defined in the existing Tuple types.



        However, when you initialize a tuple, you can use new language
        features that give better names to each field. Doing so creates a
        named tuple. Named tuples still have elements named Item1, Item2,
        Item3 and so on. But they also have synonyms for any of those elements
        that you have named. You create a named tuple by specifying the names
        for each element.




        private (double first, double second) GetHeight()

        return (1,2);


        ...

        var result = ViaNamedValueTuple();
        Console.WriteLine($"result.first, result.second");

        var (first, second) = ViaNamedValueTuple();
        Console.WriteLine($"first, second");


        Classic Tuple



        C# tuple type




        The .NET Framework already has generic Tuple classes. These classes,
        however, had two major limitations. For one, the Tuple classes named
        their properties Item1, Item2, and so on. Those names carry no
        semantic information. Using these Tuple types does not enable
        communicating the meaning of each of the properties. The new language
        features enable you to declare and use semantically meaningful names
        for the elements in a tuple.




        public Tuple<int, int> ViaClassicTuple()

        return new Tuple<int, int>(1,2);


        ...

        var tuple = ViaClassicTuple();
        Console.WriteLine($"tuple.Item1, tuple.Item2");


        Classic struct



        struct (C# Reference)




        A struct type is a value type that is typically used to encapsulate
        small groups of related variables, such as the coordinates of a
        rectangle or the characteristics of an item in an inventory.




        public struct ClassicStruct

        public int First get; set;
        public int Second get; set;
        public ClassicStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ClassicStruct ViaClassicStruct()

        return new ClassicStruct(1, 2);


        ...

        var classicStruct = ViaClassicStruct();
        Console.WriteLine($"classicStruct.First, classicStruct.Second");


        Readonly struct



        readonly (C# Reference)




        The readonly modifier on a struct definition declares that the struct
        is immutable. Every instance field of the struct must be marked
        readonly, as shown in the following example:




        public readonly struct ReadonlyStruct

        public int First get;
        public int Second get;
        public ReadonlyStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ReadonlyStruct ViaReadonlyStruct()

        return new ReadonlyStruct(1, 2);


        ...


        var readonlyStruct = ViaReadonlyStruct();
        Console.WriteLine($"readonlyStruct.First, readonlyStruct.Second");


        Simple Class



        Classes (C# Programming Guide)




        A type that is defined as a class is a reference type. At run time,
        when you declare a variable of a reference type, the variable contains
        the value null until you explicitly create an instance of the class by
        using the new operator, or assign it an object of a compatible type
        that may have been created elsewhere




        public class SomeClass

        public int First get; set;
        public int Second get; set;
        public SomeClass(int first, int second)

        First = first;
        Second = second;



        ...

        public SomeClass ViaSomeClass()

        return new SomeClass(1, 2);


        ...


        var someClass = ViaSomeClass();
        Console.WriteLine($"someClass.First, someClass.Second");


        Out parameters



        out parameter modifier (C# Reference)




        The out keyword causes arguments to be passed by reference. It makes
        the formal parameter an alias for the argument, which must be a
        variable. In other words, any operation on the parameter is made on
        the argument. It is like the ref keyword, except that ref requires
        that the variable be initialized before it is passed. It is also like
        the in keyword, except that in does not allow the called method to
        modify the argument value. To use an out parameter, both the method
        definition and the calling method must explicitly use the out keyword.




        public bool ViaOutParams(out int first, out int second)

        first = 1;
        second = 2;
        return someCondition;


        ...

        if(ViaOutParams(out var firstInt, out var secondInt))
        Console.WriteLine($"firstInt, secondInt");


        Out Value Tuple



        public bool ViaOutTuple(out (int first,int second) output)

        output = (1, 2);
        return someCondition;


        ...

        if (ViaOutTuple(out var output))
        Console.WriteLine($"output.first, output.second");





        share|improve this answer




















        • 1





          Note: Available in C# 7.0 +.

          – Adriani6
          Apr 8 at 8:50











        • Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

          – Petter Pettersson
          12 hours ago













        25












        25








        25







        Yes ValueTuple / Named Tuple (available in C# 7.1). The advantage is its the most succinct, its immutable, and its easy to construct.




        The ValueTuple struct has fields named Item1, Item2, Item3, and so on,
        similar to the properties defined in the existing Tuple types.



        However, when you initialize a tuple, you can use new language
        features that give better names to each field. Doing so creates a
        named tuple. Named tuples still have elements named Item1, Item2,
        Item3 and so on. But they also have synonyms for any of those elements
        that you have named. You create a named tuple by specifying the names
        for each element.




        private (double first, double second) GetHeight()

        return (1,2);


        ...

        var result = ViaNamedValueTuple();
        Console.WriteLine($"result.first, result.second");

        var (first, second) = ViaNamedValueTuple();
        Console.WriteLine($"first, second");


        Classic Tuple



        C# tuple type




        The .NET Framework already has generic Tuple classes. These classes,
        however, had two major limitations. For one, the Tuple classes named
        their properties Item1, Item2, and so on. Those names carry no
        semantic information. Using these Tuple types does not enable
        communicating the meaning of each of the properties. The new language
        features enable you to declare and use semantically meaningful names
        for the elements in a tuple.




        public Tuple<int, int> ViaClassicTuple()

        return new Tuple<int, int>(1,2);


        ...

        var tuple = ViaClassicTuple();
        Console.WriteLine($"tuple.Item1, tuple.Item2");


        Classic struct



        struct (C# Reference)




        A struct type is a value type that is typically used to encapsulate
        small groups of related variables, such as the coordinates of a
        rectangle or the characteristics of an item in an inventory.




        public struct ClassicStruct

        public int First get; set;
        public int Second get; set;
        public ClassicStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ClassicStruct ViaClassicStruct()

        return new ClassicStruct(1, 2);


        ...

        var classicStruct = ViaClassicStruct();
        Console.WriteLine($"classicStruct.First, classicStruct.Second");


        Readonly struct



        readonly (C# Reference)




        The readonly modifier on a struct definition declares that the struct
        is immutable. Every instance field of the struct must be marked
        readonly, as shown in the following example:




        public readonly struct ReadonlyStruct

        public int First get;
        public int Second get;
        public ReadonlyStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ReadonlyStruct ViaReadonlyStruct()

        return new ReadonlyStruct(1, 2);


        ...


        var readonlyStruct = ViaReadonlyStruct();
        Console.WriteLine($"readonlyStruct.First, readonlyStruct.Second");


        Simple Class



        Classes (C# Programming Guide)




        A type that is defined as a class is a reference type. At run time,
        when you declare a variable of a reference type, the variable contains
        the value null until you explicitly create an instance of the class by
        using the new operator, or assign it an object of a compatible type
        that may have been created elsewhere




        public class SomeClass

        public int First get; set;
        public int Second get; set;
        public SomeClass(int first, int second)

        First = first;
        Second = second;



        ...

        public SomeClass ViaSomeClass()

        return new SomeClass(1, 2);


        ...


        var someClass = ViaSomeClass();
        Console.WriteLine($"someClass.First, someClass.Second");


        Out parameters



        out parameter modifier (C# Reference)




        The out keyword causes arguments to be passed by reference. It makes
        the formal parameter an alias for the argument, which must be a
        variable. In other words, any operation on the parameter is made on
        the argument. It is like the ref keyword, except that ref requires
        that the variable be initialized before it is passed. It is also like
        the in keyword, except that in does not allow the called method to
        modify the argument value. To use an out parameter, both the method
        definition and the calling method must explicitly use the out keyword.




        public bool ViaOutParams(out int first, out int second)

        first = 1;
        second = 2;
        return someCondition;


        ...

        if(ViaOutParams(out var firstInt, out var secondInt))
        Console.WriteLine($"firstInt, secondInt");


        Out Value Tuple



        public bool ViaOutTuple(out (int first,int second) output)

        output = (1, 2);
        return someCondition;


        ...

        if (ViaOutTuple(out var output))
        Console.WriteLine($"output.first, output.second");





        share|improve this answer















        Yes ValueTuple / Named Tuple (available in C# 7.1). The advantage is its the most succinct, its immutable, and its easy to construct.




        The ValueTuple struct has fields named Item1, Item2, Item3, and so on,
        similar to the properties defined in the existing Tuple types.



        However, when you initialize a tuple, you can use new language
        features that give better names to each field. Doing so creates a
        named tuple. Named tuples still have elements named Item1, Item2,
        Item3 and so on. But they also have synonyms for any of those elements
        that you have named. You create a named tuple by specifying the names
        for each element.




        private (double first, double second) GetHeight()

        return (1,2);


        ...

        var result = ViaNamedValueTuple();
        Console.WriteLine($"result.first, result.second");

        var (first, second) = ViaNamedValueTuple();
        Console.WriteLine($"first, second");


        Classic Tuple



        C# tuple type




        The .NET Framework already has generic Tuple classes. These classes,
        however, had two major limitations. For one, the Tuple classes named
        their properties Item1, Item2, and so on. Those names carry no
        semantic information. Using these Tuple types does not enable
        communicating the meaning of each of the properties. The new language
        features enable you to declare and use semantically meaningful names
        for the elements in a tuple.




        public Tuple<int, int> ViaClassicTuple()

        return new Tuple<int, int>(1,2);


        ...

        var tuple = ViaClassicTuple();
        Console.WriteLine($"tuple.Item1, tuple.Item2");


        Classic struct



        struct (C# Reference)




        A struct type is a value type that is typically used to encapsulate
        small groups of related variables, such as the coordinates of a
        rectangle or the characteristics of an item in an inventory.




        public struct ClassicStruct

        public int First get; set;
        public int Second get; set;
        public ClassicStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ClassicStruct ViaClassicStruct()

        return new ClassicStruct(1, 2);


        ...

        var classicStruct = ViaClassicStruct();
        Console.WriteLine($"classicStruct.First, classicStruct.Second");


        Readonly struct



        readonly (C# Reference)




        The readonly modifier on a struct definition declares that the struct
        is immutable. Every instance field of the struct must be marked
        readonly, as shown in the following example:




        public readonly struct ReadonlyStruct

        public int First get;
        public int Second get;
        public ReadonlyStruct(int first, int second)

        First = first;
        Second = second;



        ...

        public ReadonlyStruct ViaReadonlyStruct()

        return new ReadonlyStruct(1, 2);


        ...


        var readonlyStruct = ViaReadonlyStruct();
        Console.WriteLine($"readonlyStruct.First, readonlyStruct.Second");


        Simple Class



        Classes (C# Programming Guide)




        A type that is defined as a class is a reference type. At run time,
        when you declare a variable of a reference type, the variable contains
        the value null until you explicitly create an instance of the class by
        using the new operator, or assign it an object of a compatible type
        that may have been created elsewhere




        public class SomeClass

        public int First get; set;
        public int Second get; set;
        public SomeClass(int first, int second)

        First = first;
        Second = second;



        ...

        public SomeClass ViaSomeClass()

        return new SomeClass(1, 2);


        ...


        var someClass = ViaSomeClass();
        Console.WriteLine($"someClass.First, someClass.Second");


        Out parameters



        out parameter modifier (C# Reference)




        The out keyword causes arguments to be passed by reference. It makes
        the formal parameter an alias for the argument, which must be a
        variable. In other words, any operation on the parameter is made on
        the argument. It is like the ref keyword, except that ref requires
        that the variable be initialized before it is passed. It is also like
        the in keyword, except that in does not allow the called method to
        modify the argument value. To use an out parameter, both the method
        definition and the calling method must explicitly use the out keyword.




        public bool ViaOutParams(out int first, out int second)

        first = 1;
        second = 2;
        return someCondition;


        ...

        if(ViaOutParams(out var firstInt, out var secondInt))
        Console.WriteLine($"firstInt, secondInt");


        Out Value Tuple



        public bool ViaOutTuple(out (int first,int second) output)

        output = (1, 2);
        return someCondition;


        ...

        if (ViaOutTuple(out var output))
        Console.WriteLine($"output.first, output.second");






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 8 at 11:43

























        answered Apr 8 at 8:50









        Michael RandallMichael Randall

        38k84573




        38k84573







        • 1





          Note: Available in C# 7.0 +.

          – Adriani6
          Apr 8 at 8:50











        • Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

          – Petter Pettersson
          12 hours ago












        • 1





          Note: Available in C# 7.0 +.

          – Adriani6
          Apr 8 at 8:50











        • Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

          – Petter Pettersson
          12 hours ago







        1




        1





        Note: Available in C# 7.0 +.

        – Adriani6
        Apr 8 at 8:50





        Note: Available in C# 7.0 +.

        – Adriani6
        Apr 8 at 8:50













        Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

        – Petter Pettersson
        12 hours ago





        Perhaps a struct would be more appropriate than a class, if the intention is to keep value passing.

        – Petter Pettersson
        12 hours ago













        20














        Multiple ways:




        1. out parameters:



          private double GetHeight(out int anotherValue)

          anotherValue = 42;
          return 2;




        2. value-tuples:



          private (double height, int anotherValue) GetHeight()

          return (42, 2);



          (warning: value-tuples have known problems if used in .NET Standard libraries, as the assembly bindings from .NET Standard to .NET Framework are ... kinda fubar)




        3. custom return types:



          private Something GetHeight()

          return new Something(42, 2);



          (to avoid allocations, you may wish to define Something as a readonly struct in this scenario)







        share|improve this answer





























          20














          Multiple ways:




          1. out parameters:



            private double GetHeight(out int anotherValue)

            anotherValue = 42;
            return 2;




          2. value-tuples:



            private (double height, int anotherValue) GetHeight()

            return (42, 2);



            (warning: value-tuples have known problems if used in .NET Standard libraries, as the assembly bindings from .NET Standard to .NET Framework are ... kinda fubar)




          3. custom return types:



            private Something GetHeight()

            return new Something(42, 2);



            (to avoid allocations, you may wish to define Something as a readonly struct in this scenario)







          share|improve this answer



























            20












            20








            20







            Multiple ways:




            1. out parameters:



              private double GetHeight(out int anotherValue)

              anotherValue = 42;
              return 2;




            2. value-tuples:



              private (double height, int anotherValue) GetHeight()

              return (42, 2);



              (warning: value-tuples have known problems if used in .NET Standard libraries, as the assembly bindings from .NET Standard to .NET Framework are ... kinda fubar)




            3. custom return types:



              private Something GetHeight()

              return new Something(42, 2);



              (to avoid allocations, you may wish to define Something as a readonly struct in this scenario)







            share|improve this answer















            Multiple ways:




            1. out parameters:



              private double GetHeight(out int anotherValue)

              anotherValue = 42;
              return 2;




            2. value-tuples:



              private (double height, int anotherValue) GetHeight()

              return (42, 2);



              (warning: value-tuples have known problems if used in .NET Standard libraries, as the assembly bindings from .NET Standard to .NET Framework are ... kinda fubar)




            3. custom return types:



              private Something GetHeight()

              return new Something(42, 2);



              (to avoid allocations, you may wish to define Something as a readonly struct in this scenario)








            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Apr 8 at 10:28









            Toby Speight

            17.5k134469




            17.5k134469










            answered Apr 8 at 8:51









            Marc GravellMarc Gravell

            795k19821632567




            795k19821632567





















                3














                Yes, you can use Tuple:



                class Program

                static void Main(string[] args)

                Tuple<int, int> height = GetHeight();

                Console.WriteLine(height.Item1 + " - " + height.Item2);
                Console.ReadLine();


                private static Tuple<int, int> GetHeight()

                return new Tuple<int, int>(2, 3);




                OUTPUT:



                2 - 3






                share|improve this answer



























                  3














                  Yes, you can use Tuple:



                  class Program

                  static void Main(string[] args)

                  Tuple<int, int> height = GetHeight();

                  Console.WriteLine(height.Item1 + " - " + height.Item2);
                  Console.ReadLine();


                  private static Tuple<int, int> GetHeight()

                  return new Tuple<int, int>(2, 3);




                  OUTPUT:



                  2 - 3






                  share|improve this answer

























                    3












                    3








                    3







                    Yes, you can use Tuple:



                    class Program

                    static void Main(string[] args)

                    Tuple<int, int> height = GetHeight();

                    Console.WriteLine(height.Item1 + " - " + height.Item2);
                    Console.ReadLine();


                    private static Tuple<int, int> GetHeight()

                    return new Tuple<int, int>(2, 3);




                    OUTPUT:



                    2 - 3






                    share|improve this answer













                    Yes, you can use Tuple:



                    class Program

                    static void Main(string[] args)

                    Tuple<int, int> height = GetHeight();

                    Console.WriteLine(height.Item1 + " - " + height.Item2);
                    Console.ReadLine();


                    private static Tuple<int, int> GetHeight()

                    return new Tuple<int, int>(2, 3);




                    OUTPUT:



                    2 - 3







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Apr 8 at 8:53









                    JoKeRxbLaCkJoKeRxbLaCk

                    663318




                    663318





















                        2














                        Also you could use out parameters:



                        static void Main(string[] args)

                        int i, j;
                        GetHeight(out i, out j);


                        public static void GetHeight(out int i1, out int i2)

                        i1 = 1;
                        i2 = 2;






                        share|improve this answer



























                          2














                          Also you could use out parameters:



                          static void Main(string[] args)

                          int i, j;
                          GetHeight(out i, out j);


                          public static void GetHeight(out int i1, out int i2)

                          i1 = 1;
                          i2 = 2;






                          share|improve this answer

























                            2












                            2








                            2







                            Also you could use out parameters:



                            static void Main(string[] args)

                            int i, j;
                            GetHeight(out i, out j);


                            public static void GetHeight(out int i1, out int i2)

                            i1 = 1;
                            i2 = 2;






                            share|improve this answer













                            Also you could use out parameters:



                            static void Main(string[] args)

                            int i, j;
                            GetHeight(out i, out j);


                            public static void GetHeight(out int i1, out int i2)

                            i1 = 1;
                            i2 = 2;







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Apr 8 at 8:52









                            Michał TurczynMichał Turczyn

                            16.4k132241




                            16.4k132241





















                                0














                                Make a int array.Or another way is to create class.






                                share|improve this answer

























                                • an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

                                  – Marc Gravell
                                  Apr 8 at 8:51












                                • Its not bad but its not needed in current question.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:52











                                • I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

                                  – Jonesopolis
                                  Apr 8 at 8:52











                                • You can make a list too.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:54











                                • @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

                                  – Marc Gravell
                                  Apr 8 at 8:54
















                                0














                                Make a int array.Or another way is to create class.






                                share|improve this answer

























                                • an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

                                  – Marc Gravell
                                  Apr 8 at 8:51












                                • Its not bad but its not needed in current question.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:52











                                • I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

                                  – Jonesopolis
                                  Apr 8 at 8:52











                                • You can make a list too.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:54











                                • @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

                                  – Marc Gravell
                                  Apr 8 at 8:54














                                0












                                0








                                0







                                Make a int array.Or another way is to create class.






                                share|improve this answer















                                Make a int array.Or another way is to create class.







                                share|improve this answer














                                share|improve this answer



                                share|improve this answer








                                edited Apr 8 at 8:54

























                                answered Apr 8 at 8:50









                                Vuk UskokovicVuk Uskokovic

                                599




                                599












                                • an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

                                  – Marc Gravell
                                  Apr 8 at 8:51












                                • Its not bad but its not needed in current question.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:52











                                • I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

                                  – Jonesopolis
                                  Apr 8 at 8:52











                                • You can make a list too.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:54











                                • @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

                                  – Marc Gravell
                                  Apr 8 at 8:54


















                                • an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

                                  – Marc Gravell
                                  Apr 8 at 8:51












                                • Its not bad but its not needed in current question.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:52











                                • I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

                                  – Jonesopolis
                                  Apr 8 at 8:52











                                • You can make a list too.

                                  – Vuk Uskokovic
                                  Apr 8 at 8:54











                                • @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

                                  – Marc Gravell
                                  Apr 8 at 8:54

















                                an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

                                – Marc Gravell
                                Apr 8 at 8:51






                                an array is definitely a bad way here - that's pretty allocatey and the semantic meaning of each value is unclear; creating a class would also be relatively allocatey, but... a readonly struct would be fine

                                – Marc Gravell
                                Apr 8 at 8:51














                                Its not bad but its not needed in current question.

                                – Vuk Uskokovic
                                Apr 8 at 8:52





                                Its not bad but its not needed in current question.

                                – Vuk Uskokovic
                                Apr 8 at 8:52













                                I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

                                – Jonesopolis
                                Apr 8 at 8:52





                                I'd rather have a class of strongly typed values that mean something rather than guessing how many are in the array and what their values represent

                                – Jonesopolis
                                Apr 8 at 8:52













                                You can make a list too.

                                – Vuk Uskokovic
                                Apr 8 at 8:54





                                You can make a list too.

                                – Vuk Uskokovic
                                Apr 8 at 8:54













                                @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

                                – Marc Gravell
                                Apr 8 at 8:54






                                @VukUskokovic that (list) has all the problems that arrays have, plus an extra object and layer of abstraction; making it a list just exacerbates the problem unless we are semantically returning a list of something

                                – Marc Gravell
                                Apr 8 at 8:54




                                Popular posts from this blog

                                Bulk add to cart function issuecart vs. mini cart issue … rwd themeRedirect Add to cart button to cart pageAdd to cart issue - Magento 2.1The requested Payment Method is not available When creating an orderM2: reason add-to-cart might not function in production modeAdd to cart issue in some android devicesMagento 2 - custom price can not add to subtotal and grand total after add to cartAdd to cart codeIssue with my cart module on pdp and cart pages, just keeps spinningBulk price and quantity update using rest api

                                Magento2 - How to hide price filter only in specific categories?Multiselect price filter attribute in layered navigationhide only some categories from layered navigation in magentoRemove Price Filter on certain categoriescustomize layered price filter?Hide Price for a particular customer groupPrice filter in layered navigation not working correctly with price including tax in magento 2.2.3Magento 2 how to hide attribute at Layered navigation?Magento 2. how to hide price only for specific categoriesMagento 2 How can I hide the price and total from cart and checkout summary?Magento2: Can we add navigation layered filter like price filter for other attribute?