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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы