开发者

Extension Method ConvertAll

What 开发者_StackOverflow社区is the proper use of ConverAll ? Will it convert one type to another type?

like

List<int> intList = new List<int>();
intList.Add(10);
intList.Add(20);
intList.Add(30);
intList.Add(33);

var query= intList.ConvertAll(x=>(double)x);

for this i can use cast or OfType<>.


ConvertAll isn't an extension method, it's a real method on List<T> itself.

It returns a new list containing the converted elements. So in your example, the query variable isn't actually a query, it's a List<double>.

Cast and OfType are extension methods that operate on IEnumerable and return an IEnumerable<T>. However they're not suitable for your stated purpose: Cast can convert reference types but cannot convert value types, only unbox them. OfType doesn't perform any conversion, it just returns any elements that are already of the specified type.


ConvertAll will just call your delegate/anonymous method for each element of the list. What this does is entirely up to you.

In the example code you posted, it will attempt to cast each element to a double and return that, which means you'll get a List<Double> in return.

You should not use OfType<T>, since this will filter the elements based on the type, and will only return a different type than the original if it is type compatible due to inheritance or interface implementation.

In other words, .OfType<Double> will return no elements, since none of the ints are also doubles.


ConvertAll is a projection operator and maps most closely to LINQ's Select. LINQ's Cast is a specific projection operator and represents doing what you did [via projection] - or it would (as pointed out in Luke's answer [and comment], which I +1'd) if you weren't converting to a value type.

In general, LINQ has a more complete and well-thought-through set of operators, which makes older stuff like ConvertAll look a bit silly at times [like this]. (or @stoopid :D).


to my knowledge, OfType<T> will only return the elements in the collection that are of the specified type T. ConvertAll allows you to convert the elements to another type.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜