簡體   English   中英

如何為列表中的命名元組正確分配名稱

[英]How do I correctly assign names to a named tuple in a list

我有下面的代碼,它似乎工作正常,但是當我檢查列表中的元組時,它們被命名為Item1,Item2,Item3,而不是我分配給它們的名稱。 我究竟做錯了什么? (代碼引用System.ValueTuple。)

謝謝您的幫助。

var listContent = new List<(string date, double value, DateTime datetime)>();

// Read the file just created and put values in list of tuples
using (var reader = new StreamReader(rawFileName))
{
   while (!reader.EndOfStream)
   {
      var line = reader.ReadLine();
      var values = line.Split(',');
      listContent.Add((date: values[0],
         value: Convert.ToDouble(values[2]),
         datetime: DateTime.ParseExact(values[0], "yyyy-MM-dd", null)));
    }
}

如果在上述代碼之后放置一個斷點,則可以在“即時窗口”中執行以下操作,這更加令人困惑:

listContent[0]
("2017-01-01", 17.193, {01/01/2017 00:00:00})
    date: "2017-01-01"
    value: 17.193
    datetime: {01/01/2017 00:00:00}
    Raw View: ("2017-01-01", 17.193, {01/01/2017 00:00:00})
listContent[0].Item1
null
listContent[0].date
null
listContent[0].dummy
error CS1061: '(string date, double value, DateTime datetime)' does not contain a definition for 'dummy' and no accessible extension method 'dummy' accepting a first argument of type '(string date, double value, DateTime datetime)' could be found (are you missing a using directive or an assembly reference?)

[更新]

我已經超級簡化了代碼:

var listContent = new List<(string str1, string str2)>();
for (var n = 1; n < 100; n++)
{
   var tpl = (str1: "hello" + n.ToString(), str2: "world" + n.ToString());
   listContent.Add(tpl);
}
var z = listContent[0].str1;

並查看立即窗口給我的是什么:

z
"hello1"
listContent[0].str1
null

因此,我不會發瘋:元組已正確分配,但出於某些奇怪的原因,立即窗口仍然為listContent [0] .str1提供了空值?

元組元素名稱不是該類型的一部分。 編譯器將名稱轉換為關聯的ItemN屬性。

除了局部變量(不能將屬性應用到它們)外,這些名稱在[TupleElementNames]屬性中傳遞。 例如,如果要將listContents聲明為字段,則會將以下屬性應用於該字段:

[TupleElementNames(new string[] { "date", "value", "datetime" })]

當您將鼠標懸停在listContents上時,調試器僅看到列表實例和其中的元組實例。 給定實例,元組元素名稱不可用。 您將需要附帶的PropertyInfoFieldInfoParameterInfo以便獲得傳達名稱的TupleElementNamesAttribute 但是,如果將其設置為字段,則調試器仍僅查看實例。

我無法在“立即”窗口中解釋該行為,並且“監視”窗口似乎有相同的問題。 看起來您在Visual Studio中發現了一個錯誤。

暫無
暫無

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

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