第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么我不能在 C# 中創(chuàng)建匿名類型的 list<T> ?

為什么我不能在 C# 中創(chuàng)建匿名類型的 list<T> ?

C#
喵喵時(shí)光機(jī) 2023-07-09 16:44:19
我是 c# 新手anonymous types,我想創(chuàng)建一個(gè)包含 3 個(gè)變量的變量list:,?,?。anonymous typesstring strint numDataTime time我使用了一個(gè)簡單的方法Console application來做到這一點(diǎn),我想我得到了錯(cuò)誤,因?yàn)槲覜]有System.Core,因?yàn)樯厦鎲栴}的評論中有人說:(當(dāng)然,您還需要對 System.Core 的引用。)我不知道是什么System.Core以及我是否有它,所以這可能是問題所在我確實(shí)用Systme.Linq。這是代碼:var?list?=?new[]?{?str,?num,?time?}.ToList(); list.add("hi",?5,?DateTime.Now); Console.WriteLine(list[0].num);當(dāng)我嘗試指定type例如 的variables?時(shí),我也遇到問題string str。
查看完整描述

1 回答

?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

您缺少一些語法。匿名類型必須用 聲明new{...}。當(dāng)無法通過變量名稱推斷屬性名稱時(shí),必須聲明屬性名稱。(你也有一個(gè)拼寫錯(cuò)誤Add;它應(yīng)該是大寫的)。

以下:

var str = "string";

var num = 5;

var time = DateTime.UtcNow;

// notice double "new"?

// property names inferred to match variable names

var list = new[] { new { str, num, time } }.ToList();?


// "new" again. Must specify property names since they cannot be inferred

list.Add(new { str = "hi", num = 5, time = DateTime.Now });


Console.WriteLine(list[0].num);

話雖如此,這相當(dāng)笨重。我建議編寫一個(gè)具有您想要的屬性的類,或者使用ValueTuple.

這有效并且更清晰/干凈:

var list = new List<(string str, int num, DateTime time)>();


// ValueTuple are declared in parens, method calls require parens as well

// so we end up with two sets of parens, both required?

list.Add((str, num, time));

list.Add(("hi", 5, DateTime.Now));


Console.WriteLine(list[0].num);

更喜歡自己的類的另一個(gè)原因ValueTuple是您不能將方法聲明為接受匿名類型。換句話說,這樣的東西是無效的:


public void DoSomethingWithAnonTypeList(List<???> theList ) { ... }?

沒有什么*我可以用來替換,???因?yàn)槟涿愋投际莍nternal并且具有“難以形容的”名稱。你將無法傳遞你的清單并用它做一些有意義的事情。那么有什么意義呢?


相反,我可以聲明一個(gè)方法接受 s 列表ValueTuple:


public void DoSomethingWithTupleList(List<(string, int, DateTime)> theList) {?

? ? ?Console.WriteLine(theList[0].Item1);

}?

或使用命名元組:


public void DoSomethingWithTupleList(List<(string str, int num, DateTime time)> theList) {?

? ? ?Console.WriteLine(theList[0].time);

}?

* 從技術(shù)上講,您可以將匿名類型列表傳遞給泛型方法。但是您將無法訪問各個(gè)屬性。您能做的最好的事情就是訪問列表Count或迭代列表/可枚舉,也許打印默認(rèn)值ToString,這也并沒有給您帶來太多幫助。這里沒有通用的約束可以提供幫助。此方法中的第三條語句將生成編譯器錯(cuò)誤:


public void DoSomethingGenerically<T>(List<T> theList) {


? ? ? Console.WriteLine(theList.Count); // valid

? ? ? Console.WriteLine(theList[0]); // valid, prints default ToString


? ? ? Console.WriteLine(theList[0].num); // invalid! What's the point?


}


var list = new[] { new { str = "hi", num = 5, time = DateTime.Now } }.ToList();

// valid due to type inference, but see comments above

DoSomethingGenerically(list);?

請注意,您也會(huì)遇到同樣的問題ValueTuple,我只是澄清我的“什么也不做”聲明。


查看完整回答
反對 回復(fù) 2023-07-09
  • 1 回答
  • 0 關(guān)注
  • 208 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號