2017-05-21 56 views
2

ValueTuple作爲C#7.0中的一項新功能使用了公共方法Create,它有助於創建ValueTuples(從singleton to octuple或更多),我們也可以使用new來實現相同的結果。我注意到這些行爲有所不同。我試圖研究以下執行錯誤或這是後話按照設計:ValueTuple:創建八進制有什麼問題?

方法CreateOctuple()按預期工作:

private static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> CreateOctuple() 
{ 
    return new ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>>(1, 2, 3, 4, 5, 6, 7, new ValueTuple<int>(8)); ; 
} 

現在,我嘗試使用Create()方法來實現相同的輸出,不幸的是,正在抱怨退貨類型:

private static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate() 
{ 
    return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, ValueTuple.Create(8)); 
} 

這裏有什麼問題? enter image description here

P.S.所有軟件包都是最新的,我正在使用Visual Studio 2017最新版本。 enter image description here

正如Svick建議

static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate() 
{ 
    return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8); 
} 

這提示相同的編譯器的異常: enter image description here

回答

5

問題是ValueTuple.Create已經負責在第8個元素上調用ValueTuple.Create。所以,雖然八元組的正確類型是ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>>,但您正在創建ValueTuple<int, int, int, int, int, int, int, ValueTuple<ValueTuple<int>>>。該修復程序只是爲了刪除第二個呼叫ValueTuple.Create

static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate() 
{ 
    return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8); 
} 

或者你可以只使用元組的語法,但我假設你有一個理由,以避免它:

static (int, int, int, int, int, int, int, int) OctupleUsingCreate() 
{ 
    return (1, 2, 3, 4, 5, 6, 7, 8); 
} 
+0

我已經試過了。但它不起作用。我使用快照和代碼更新了問題。 –

+0

@GauravAroraa這只是一個ReSharper錯誤。代碼實際上編譯和工作正常。 – svick

+2

@GauravAroraa我剛剛[報道](https://youtrack.jetbrains.com/issue/RSRP-464845)。 – svick

0

您需要更新這個包:Microsoft.Net.Compilers 2.0(你需要證明預發行)。它會修復此錯誤,請檢查此here

+0

感謝您的及時響應。所有的Nu​​get軟件包都是最新的我已經用截圖更新了這個問題。 –

0

注意:這不是ValueTuple庫或C#編譯器的問題。 TryRoslyn沒有錯誤:

using System; 
public class C 
{ 
    private static ValueTuple<int, int, int, int, int, int, int, ValueTuple<int>> OctupleUsingCreate() 
    { 
     return ValueTuple.Create(1, 2, 3, 4, 5, 6, 7, 8); 
    } 
} 
相關問題