Don*_*onG 13 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;
}
}
Run Code Online (Sandbox Code Playgroud)
并且,从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 ();
}
Run Code Online (Sandbox Code Playgroud)
问题是:我关闭了吗?
Dir*_*mar 30
如@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);
}
Run Code Online (Sandbox Code Playgroud)
使用数组
这是一个简单的方法,如果要返回的值具有相同的类型,则该方法很有效.
public int[] GetTime()
{
DateTime dt = DateTime.Now;
return new[] { dt.Hour, dt.Minute};
}
Run Code Online (Sandbox Code Playgroud)
使用属性包(属性包是一个只有属性的简单类)
这非常方便,可以在以后轻松修改返回值的类型和数量,而无需更改方法签名.
class A
{
int Prop1 { get; set; }
int Prop2 { get; set; }
}
public A SomeMethod()
{
return new A() { Prop1 = 1, Prop2 = 2 }
}
Run Code Online (Sandbox Code Playgroud)
使用元组
在C#4.0(需要VS 2010)中,您可以使用以下Tuple<T1, T2, ...>类:
public Tuple<int, int> GetTime()
{
DateTime dt = DateTime.Now;
return Tuple.Create(dt.Hour, dt.Minute);
}
Run Code Online (Sandbox Code Playgroud)
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
}
Run Code Online (Sandbox Code Playgroud)
元组元素的名称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
}
Run Code Online (Sandbox Code Playgroud)
然后通过这些名称访问元组元素:
var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");
Run Code Online (Sandbox Code Playgroud)
C#不支持多个返回值,因此在这种情况下,您应该返回一个DateTime结构,这是一种惯用的方法.客户端代码可以简单地忽略他们不关心的属性.你可以创建自己的简单结构,但它确实不值得努力.