Saya melihat cuplikan kode kemarin di salah satu tanggapan di sini di StackOverflow yang membuat saya penasaran. Itu seperti ini:
List<string> myList = new List<string> {"aBc", "HELLO", "GoodBye"};
myList.ForEach(d=>d.ToLower());
Saya berharap saya bisa menggunakannya untuk mengonversi semua item di myList menjadi huruf kecil. Namun, itu tidak terjadi ... setelah menjalankan ini, casing di myList tidak berubah.
Jadi pertanyaan saya adalah apakah ADA cara, menggunakan ekspresi LINQ dan Lambda untuk dengan mudah mengulang dan mengubah konten daftar dengan cara yang mirip dengan ini.
Terima kasih, Max
Itu karena ToLower mengembalikan string huruf kecil daripada mengubah string asli. Jadi Anda menginginkan sesuatu seperti ini:
List<string> lowerCase = myList.Select(x => x.ToLower()).ToList();
sumber
[TestMethod] public void LinqStringTest() { List<string> myList = new List<string> { "aBc", "HELLO", "GoodBye" }; myList = (from s in myList select s.ToLower()).ToList(); Assert.AreEqual(myList[0], "abc"); Assert.AreEqual(myList[1], "hello"); Assert.AreEqual(myList[2], "goodbye"); }
sumber
ForEach
penggunaanAction<T>
, yang berarti bahwa Anda dapat memengaruhix
jika tidak dapat diubah. Karenax
astring
, itu tidak dapat diubah, jadi tidak ada yang Anda lakukan di lambda yang akan mengubah propertinya. Solusi Kyralessa adalah pilihan terbaik Anda kecuali Anda ingin menerapkan metode ekstensi Anda sendiri yang memungkinkan Anda mengembalikan nilai pengganti.sumber
var _reps = new List(); // with variant data _reps.ConvertAll<string>(new Converter<string,string>(delegate(string str){str = str.ToLower(); return str;})).Contains("invisible"))
sumber