A
в B
нельзя, потому что A - это не B. Потому что B
содержит какое-то дополнительное состояние (b
), которого нет в A
и компилятору неизвестно, каким оно должно быть в текущем виде (A
конструировался иначе, чем B
и как получить валидный B
из A
- известно лишь программисту). Invalid Cast
).Enumerable.OfType<T>()
- фильтрует по типу и законно возвращает пустой список (у вас список A
, там действительно нет B
)Enumerable.Cast<T>()
- последовательно делает каст, который невозможен.listA.Select(x => new B{ a = x.a }).ToList();
A
необходимые данные для конструирования объекта B
. Важно понимать, что это будут именно ДРУГИЕ объекты. Если A некопируем по своей природе, то этот фокус не пройдет. ICollection<T>
/ IList<T>
. Для словарей - IDictionary<TKey, TValue>
и т. д. Не соглашусь с предыдущим решением "не создавайте собственные коллекции вообще" - коллекции нужно создавать, стандартные не всегда подходят для реализации некоторых моделей. Например, для WPF есть ObservableCollection<T>
, а что если нужен отслеживаемый словарь? public interface IEntity
{
int Id { get; set; }
}
public class Model : IEntity
{
public int Id { get; set; }
// ...
}
public static bool ExistById<T>(this DbSet<T> source, int id) where T : IEntity
{
return source.Count(c => c.Id == id) > 0;
}
private static List<SomeType> ReadFromFile(string path) {
if (path == null) {
throw new ArgumentNullException("path");
}
if (File.Exists(path)) {
string file = File.ReadAllText(path);
...
} else {
throw new FileNotFoundException(path);
}
}
private void doTheBestBtn_Click(object sender, EventArgs e)
{
try {
var myList = ReadFromFile(txtInput.Text);
...
}
catch(ArgumentNullException ex) {
MessageBox.Show("Необходимо указать путь к файлу!");
}
catch(FileNotFoundException ex) {
MessageBox.Show("Указанный файл не найден!");
}
}
MyDelegate myDelegate = new MyDelegate(MyClass.Method)