c# - C# 是否支持多个返回值?

标签 c# methods return-value

这是一个非常基本的问题,如果我想做的事情很复杂/涉及,那么我不希望你深入细节......我读过这可能涉及结构或散列或一些我还没有完成其他可怕的程序。如果是这样,我相信它会很快找到我。

致力于学习类、方法和返回值。

我想让我的类/方法返回当前小时和分钟。很简单,真的。 这是否构造正确或正确?

class MyClass
{
    public int GetHour (int hr, int min)
    {
        DateTime dt = DateTime.Now;
        int hour = dt.Hour;
        int minute = dt.Minute;

        return hour;
        return minute;

    }
}

并且,从 Main() 调用它:出现一些错误(No overload for methodUnreachable code detected)

static void Main ( string[] args )
{
    MyClass mc = new MyClass ();
    Console.WriteLine ("Hour: {0} \n Minute: {1}", mc.GetHour());   
    Console.ReadLine ();
}

问题是:我关闭了吗?

最佳答案

如@ChaosPandion 所述,在那种特定情况下,您将返回 DateTime结构。

但是,一般来说,您会有以下选择:

使用 out参数

这是一种通常总是有效的简单方法。但是,它有点笨拙,因为返回的结果通常是您希望传递函数参数的地方,并且方法签名可能会变得冗长且难以重构。

public void GetTime(out int hr, out int min) 
{ 
    DateTime dt = DateTime.Now;
    hr = dt.Hour;
    min = dt.Minute;
}

static void Main(string[] args)
{
     // declare variables for out parameters first
     int hour, minute;
     GetTime(out hour, out minute);
}

使用数组

这是一种简单的方法,如果要返回的值具有相同的类型,则效果很好。

public int[] GetTime() 
{ 
    DateTime dt = DateTime.Now;
    return new[] { dt.Hour, dt.Minute};
}

使用属性包(属性包是一个只有属性的简单类)

这非常方便,并且允许稍后在不更改方法签名的情况下轻松修改返回值的类型和数量。

class A
{ 
     int Prop1 { get; set; }
     int Prop2 { get; set; }
}

public A SomeMethod()
{
    return new A() { Prop1 = 1, Prop2 = 2 }
}    

使用元组

在 C# 4.0(需要 VS 2010)中,您可以使用 Tuple<T1, T2, ...> 类:

public Tuple<int, int> GetTime() 
{ 
    DateTime dt = DateTime.Now;
    return Tuple.Create(dt.Hour, dt.Minute);
}

C# 7.0 元组

C# 7.0 添加了对多个返回值的支持。您可以编写这样的代码来返回隐式创建的元组:

(string, string, string) LookupName(long id) // tuple return type
{
    ... // retrieve first, middle and last from data storage
    return (first, middle, last); // tuple literal
}

元组元素是名称 Item1 , Item2等默认情况下,但您也可以指定名称,例如

(string first, string middle, string last) LookupName(long id) // tuple return type
{
    ... // retrieve first, middle and last from data storage
    return (first, middle, last); // tuple literal
}

然后通过这些名称访问元组元素:

var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");

关于c# - C# 是否支持多个返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3992439/

相关文章:

c# - .NET中进行事后分析的可能性有哪些(例如,程序崩溃后)?

c# - Windows Azure REST API SharedKeyLite 身份验证(存储模拟器)

php - 拉拉维尔 : How to create dynamic functions (methods) (using foreach loop) in class

c++ - 我的返回类型是否需要定义?

c - 那会错吗?如果是这样,为什么会这样?输出为2500

c# - 无法使用适用于 .NET 的 AWS 开发工具包获取预签名对象 URL

c# - 为什么画圈后颜色会变?

Ruby:当类方法就足够时,为什么要实例化一个对象并使用实例方法?

java - 如何在eclipse的侧边栏中查看对象的方法

ruby - 为什么我的返回会弄乱我的结果?