Создание объекта типа 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();
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д