Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Method with Multiple Return Types

I've looked through many questions that are similar to this, but none of them really touched on what I precisely want to do. What I am trying to do is read from an external source a list of variables that also include their data type into a string array:

Example:

ID/Key      Type    Value/Data; 
varName1    bool    true;
varName2    string  str;
varName3    int     5;

I then store these are objects into a dictionary as objects containing several strings, with the ID also serving as the key.

What I want to do is now create a method that uses a switch statement that casts the string into the correct datatype, and returns it without having to specify anything in the method call. The function should look something like this:

public ??? Method(string key)
{
    if(dictionary.ContainsKey(ID))
    {
        Var temp = dictionary[ID];

        switch (temp.Type)
        {
            case "bool":
                return Convert.ToBoolean(temp.Value);

            case "int"
                return Convert.ToInt(temp.Value);

            case "string"
                return temp.Value;
        }
    }

    return "NULL"; 
}

The method call should look something like this:

int x = Method(string key);
string word = Method(string key);
bool isTrue = Method(string key);

Maybe I've missed something, but I have yet to find something that really does something quite like this. Any and all thoughts about this are welcome as well.

like image 609
Free Radical Avatar asked Jan 14 '16 20:01

Free Radical


1 Answers

In C# 7 you have the option to return multiple values from a method like this:

public (string SomeString, int SomeInt) DoSomething() { ... }

You can get the values like this:

var result = DoSomething();
Console.WriteLine(result.SomeString);
Console.WriteLine(result.SomeInt.ToString());

Or

(var someString, var someInt) = DoSomething();
Console.WriteLine(someString);
Console.WriteLine(someInt.ToString());

This works below the surface with a Tuple and you are not restricted to only 2 values. I don't know how many you can return but I suggest when you need to return that many values, create a class. More info: https://blogs.msdn.microsoft.com/dotnet/2016/08/24/whats-new-in-csharp-7-0/

like image 120
Zenuka Avatar answered Oct 19 '22 06:10

Zenuka