簡體   English   中英

如何在C#中實現多個返回值,如python樣式

[英]How to achieve multiple return values in C# like python style

我有一個python腳本:

def f():
    a = None
    b = None
    return (a, b)


a, b = f()

在python中實現多個返回值非常容易。 現在我想在C#中實現相同的結果。 我試過幾種方法,比如return int []或KeyValuePair。 但兩種方式看起來並不優雅。 我想知道一個令人興奮的解 非常感謝。

使用元組類。

  public Tuple<int,int> f()
  {
        Tuple<int,int> myTuple = new Tuple<int,int>(5,5);
        return myTuple;
  }

不幸的是,C#不支持這一點。 你可以得到的最接近的是使用out參數:

void f(out int a, out int b) {
    a = 42;
    b = 9;
}

int a, b;
f(out a, out b);

你顯然可以這樣做

object F(out object b)
{
    b = null;
    return null
}

object b;
var a = F(out b)

但最好使用具有功能風格的Tuple

Tuple<object, object> F()
{
    return Tuple.Create<object, object>(null, null);
}

var r = F();
var a = r.Item1;
var b = r.Item2;

但是,因為在c#中你可以是明確的,為什么不定義你的返回類型。

struct FResult
{
    public object A;
    public object B;
}

FResult F()
{
    return new FResult();
}

var r = F();
var a = F.A;
var b = F.B;

這似乎是為語義效益付出的小代價。

此功能在C#7中以.Net 4.7提供。

private (string a, string b) f()
{
    return (a: null, b: null);
    // or simply: return (null, null);
}

var (a, b) = f();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM