Создание объекта типа 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();
}