Send from filtered user list <T> using LINQ

I have my own list that inherits from Generic.List<T>as follows:

public class TransferFileList<T> : List<TransferFile> { .. }

When I install (where ' Files' is TransferFileList<T>):

var files = uploadResponse.Files.Where(x => !x.Success).ToList()

the object ' Files' is resolved as System.Collections.Generic.List<TransferFile>, and not TransferFileList<T>, what I would expect, since it was what was filtered through Where, so how could I successfully return the list TransferFileList<T>to 'files'?

I tried:

var files = uploadResponse.Files.Where(x => !x.Success).ToList() 
as TransferFileList<TransferFile>;

but using this secure listing, it just resolves to null.

Thank you guys and girls.

+3
source share
3 answers

-, , List<T>? 99% , .

, :

public static something PrintErrors(this List<TransferFile> list)
{
    //do your printing logic
}

: ToList() IEnumerable<T> List . List<T>, IEnumerable<T>, , .

Where() - IEnumerable<T> IEnumerable<T>.

- , , , , :

var myFiles = new TransferFileList<TransferFile>();
myFiles.AddRange(originalFileList.Where(condition));
+2

IEnumerable<TransferFile > :

public static TransferFileList ToTransferFileList(
    this IEnumerable<TransferFile> files)
{
    return new TransferFileList(files);
}

// ...

var files = uploadResponse.Files.Where(x => !x.Success).ToTransferFileList(); 

TransferFileList List<TransferFile>. , as null, , TransferFileList List<TransferFile>, . List<TransferFile> TransferFileList.

@RexM , List<T> - . (Has-A, Is-A), .

+1

Thanks guys.

I like the SLV extension approach, but is there another direct cast approach?

If it weren’t for me, I could just go with the right built-in approach, I was hoping to avoid:

var transferFiles = new TransferFileList<TransferFile>();
if (files != null) 
  transferFiles.AddRange(files);
0
source

Source: https://habr.com/ru/post/1719848/


All Articles