这是一个非常基本的问题,如果我想做的事情很复杂/涉及,那么我不希望你深入细节......我读过这可能涉及结构或散列或一些我还没有完成其他可怕的程序。如果是这样,我相信它会很快找到我。
致力于学习类、方法和返回值。
我想让我的类/方法返回当前小时和分钟。很简单,真的。 这是否构造正确或正确?
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 method
和 Unreachable 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/