2010-11-27 71 views
2

这是一个数学方法,需要3个双打作为输入(a,b,c)。从方法中返回2个值

接下来,这3个值可以在公式(abc公式为平方根)中计算。

该公式有2个值必须返回,但我该如何做到这一点?

我正在考虑一个数组/对象,但不知道如何为此目的初始化它们。在这种情况下,Out参数并不是真的有用吗?

问候。

+0

输出参数是完全为你在这里......一切是一个伟大的矫枉过正(元组和例如数组) – 2010-11-27 09:23:42

+1

...但元组(甚至自定义对)是C#的路要走。 – SWeko 2010-11-27 09:24:54

回答

3

在C#4(在Visual Studio 2010中提供):

Tuple<double, double> Foo(double a, double b, double c) 
{ 
    ... 
    return Tuple.Create(firstReturnValue, secondReturnValue); 
} 

如果你用C#的早期语言版本,则可以定义自己的实现两元组(对)如下:

public struct Tuple<A, B> 
{ 
    public readonly A Item1; 
    public readonly B Item2; 
    public Tuple(A a, B b) { Item1 = a; Item2 = b; } 
} 
public static class Tuple 
{ 
    public static Tuple<A,B> Create<A,B>(A a, B b) { return new Tuple<A,B>(a,b); } 
} 

当然,Tuple是一个非常普遍的和非特异性的数据类型。你也可以实现一个复合返回类型(类似于我刚才所展示的,但更简单),它更适合于你的情况。

1

在C#4,你可以通过staks上述

但低于C#4中描述做一样的元组,可以返回的要返回值包含尽可能多的列表。

0

一个数组不是很有利,因为你只有一堆物品,而没有关于它们的更多信息。来电者必须“知道”什么元素不。 0,元素号。 1是。

在这种情况下,我会一直投票使用一个类 - 定义一个返回类型作为类,给个别字段有意义的名称。一类为您提供了可发现(通过字段名),混合的返回类型(返回一个int,两位小数,字符串)的能力,并很好地概括结果:

public class ResultType 
{ 
    decimal Value { get; set; } 
    decimal AnotherValue { get; set; } 
    int StatusCode { get; set; } 
    string Message { get; set; } 
} 

,然后定义你的方法:

ResultType YourMethodName(double a, double b, double c) 
{ 
    ResultType result = new ResultType(); 

    // do your calculations here...... 
    result.Value = ......... 
    result.AnotherValue = ............ 
    result.StatusCode = 0; 
    result.Message = "everything OK"; 

    return result; 
} 
+0

好的,谢谢你从未见过的信息。但是,我如何将ResultType类中的这些属性与计算发生的方法链接起来?问候。 – Tonz 2010-11-27 09:28:46

0

我想创建一个类为宗旨,甚至一个简单的结构,而是一个元组(如stakx建议)是一样好,甚至列表或集合可以做的伎俩。