Создание объекта типа T - C#
Формулировка задачи:
Доброго времени суток.
У меня в приложении выполняется одно действие два раза, но с разными объектами.
Вот первое действие:
А вот второе (на самом деле у
Подумал и предположил, что это можно сделать одним методом, принимая различные аргументы (Серьезна?), но застопорился на одном моменте.
На моменте
Но все равно интересно реально ли такое действие.
private void LoadUserData() { if (File.Exists(ApplicationPath.UserBasePath)) { var ReaderStream = File.Open(ApplicationPath.UserBasePath, FileMode.Open); if (ReaderStream.Length > 0) { var Formatter = new BinaryFormatter(); AllUsers = Formatter.Deserialize(ReaderStream) as Users; } ReaderStream.Close(); } else { File.Create(ApplicationPath.UserBasePath).Close(); } if (AllUsers == null) AllUsers = new Users(); }
меня нет второго
, просто я предположил, что будет как-то глупо и надо сделать получше):private void LoadUserData() { if (File.Exists(UserPath)) { var ReaderStream = File.Open(UserPath, FileMode.Open); if (ReaderStream.Length > 0) { var Formatter = new BinaryFormatter(); UserPasswords = Formatter.Deserialize(ReaderStream) as List<Password>; } ReaderStream.Close(); } else { File.Create(ApplicationPath.UserBasePath).Close(); } if (UserPasswords == null) UserPasswords = new List<Password>(); }
private void LoadUserData<T>(string Path, object Obj) { if (File.Exists(Path)) { var ReaderStream = File.Open(Path, FileMode.Open); if (ReaderStream.Length > 0) { var Formatter = new BinaryFormatter(); Obj = (T)Convert.ChangeType(Formatter.Deserialize(ReaderStream), typeof(T)); } ReaderStream.Close(); } else { File.Create(Path).Close(); } if (Obj == null) Obj = new T(); }
Obj = new T();
. Каак видно, я принимаю тип T и объект, после (операций с файлом и) чего мне необходимо инициализировать объект типа T
и записать его вObj
для дальнейшего возврата. Реально ли такое действие? Если да, то каким образом возможно реализовать такое? Проблему решил путем её обхода.AllUsers = LoadUserData(ApplicationPath.UserBasePath, AllUsers); if (AllUsers == null) AllUsers = new Users();UserPasswords = firstWindow.LoadUserData(ApplicationPath.GetUserPasswordsFile(CurrentUser), UserPasswords); if (UserPasswords == null) UserPasswords = new List<Password>();
Решение задачи: «Создание объекта типа T»
textual
Листинг программы
private T LoadUserData<T>(string Path) where T : class, new() { T result = null; if (File.Exists(Path)) { using (var fstream = File.Open(Path, FileMode.Open)) { if (fstream.Length > 0) { var formatter = new BinaryFormatter(); result = (T)formatter.Deserialize(fstream); } } } else { File.Create(Path).Close(); } return result ?? new T(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д