What is the correct syntax for this:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
What am I messing up? What does TSource mean?
-
Try this:
List<string> names = new List<string>("Tom,Scott,Bob".Split(',')); names.Reverse();tyndall : I get the error - Cannot implicitly convert type 'void' to 'System.Collections.Generic.ListY Low : I just tried it and it worked perfectly -
The problem is that you're calling
List<T>.Reverse()which returnsvoid.You could either do:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>(); names.Reverse();or:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();The latter is more expensive, as reversing an arbitrary
IEnumerable<T>involves buffering all of the data and then yielding it all - whereasList<T>can do all the reversing "in-place". (The difference here is that it's calling theEnumerable.Reverse<T>()extension method, instead of theList<T>.Reverse()instance method.)More efficient yet, you could use:
string[] namesArray = "Tom,Scott,Bob".Split(','); List<string> namesList = new List<string>(namesArray.Length); namesList.AddRange(namesArray); namesList.Reverse();This avoids creating any buffers of an inappropriate size - at the cost of taking four statements where one will do... As ever, weigh up readability against performance in the real use case.
flesh : skeet's a beast! -
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();This one works.
-
What your missing here is that .Reverse() is a void method. It's not possible to assign the result of .Reverse() to a variable. You can however alter the order to use Enumerable.Reverse() and get your result
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()The difference is that Enumerable.Reverse() returns an IEnumerable<T> instead of being void return
-
Or we can use LINQ to get the same result
var result = from s in "Tom,Scott,Bob".Split(',') orderby s descending select s;
0 comments:
Post a Comment