我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
我读了这个问题的c++版本,但并没有真正理解它。
有人能解释清楚,如果它可以在c#中完成,以及如何?
当前回答
在面向对象的方式中使用一个这样的类:
class div
{
public int remainder;
public int quotient(int dividend, int divisor)
{
remainder = ...;
return ...;
}
}
函数成员返回大多数调用者主要感兴趣的商。此外,它将余数存储为数据成员,之后调用者可以很容易地访问它。
通过这种方式,您可以有许多额外的“返回值”,这在实现数据库或网络调用时非常有用,在这些调用中可能需要大量的错误消息,但仅在发生错误时才需要。
我也在OP提到的c++问题中输入了这个解决方案。
其他回答
你可以试试这个KeyValuePair
private KeyValuePair<int, int> GetNumbers()
{
return new KeyValuePair<int, int>(1, 2);
}
var numbers = GetNumbers();
Console.WriteLine("Output : {0}, {1}",numbers.Key, numbers.Value);
输出:
输出:1,2
从这篇文章中,你可以使用上面提到的三个选项。
KeyValuePair是最快的方法。
Out是在秒。
Tuple是最慢的。
不管怎样,这取决于什么对你的情况是最好的。
主要有两种方法。 1. 使用out/ref参数 2. 返回一个对象数组
你可以试试这个
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
有几种方法可以做到这一点。你可以使用ref参数:
int Foo(ref Bar bar) { }
这将向函数传递一个引用,从而允许函数在调用代码的堆栈中修改对象。虽然这在技术上不是一个“返回”值,但它是一种让函数做类似事情的方法。在上面的代码中,该函数将返回一个int和(可能)修改bar。
另一种类似的方法是使用out形参。out形参与ref形参相同,只是附加了编译器强制的规则。这条规则是,如果你将一个输出参数传递给一个函数,该函数需要在返回之前设置它的值。除此之外,out形参的工作原理与ref形参类似。
最后一种方法(在大多数情况下是最好的)是创建一个封装两个值的类型,并允许函数返回该类型:
class FooBar
{
public int i { get; set; }
public Bar b { get; set; }
}
FooBar Foo(Bar bar) { }
最后一种方法更简单,更容易阅读和理解。