2017-04-23 28 views
2

與下面的代碼,鑄造新的元組舊人給編譯錯誤

class Program 
{ 
    static void Main(string[] args) 
    { 
     Tuple<int, int> test = TupleTest(); 

    } 

    static (int, int) TupleTest() 
    { 
     return (1, 2); 
    } 

我得到以下編譯時錯誤。

錯誤CS0029無法隱式轉換類型 '(INT,INT)',以 'System.Tuple < INT,INT>'

這是否意味着元組的新版本與兼容舊版本隱式?或者我在這裏做錯了什麼?

+3

「新的元組」是一個不同的類型,稱爲['System.ValueTuple'](https://msdn.microsoft.com/en-us/library/system.valuetuple (v = vs.110).aspx)(參見[this question](http://stackoverflow.com/questions/41084411/whats-the-difference-between-system-valuetuple-and-system-tuple)討論的差異)和AFAIK有沒有計劃,使其可以隱式轉換爲'System.Tuple' – UnholySheep

+0

正如Matej回答下面你應該使用擴展方法('ToTuple')。 那些無法實現爲用戶定義的轉換的原因是我們需要它們超出參數7。 –

回答

10

是的,你應該使用擴展方法ToTuple。所以,在你的榜樣......

class Program 
{ 
    static void Main(string[] args) 
    { 
     Tuple<int, int> test = TupleTest().ToTuple(); 

    } 

    static (int, int) TupleTest() 
    { 
     return (1, 2); 
    }