Как передать в функцию 1 объект вместо нескольких его свойств? c#

Всем привет. У меня есть вот такая строка кода:

 await space.Insert(TarantoolTuple.Create(model.Id, model.Login, model.Balance));

Туда нужно передать необходимые параметры для вставки в базу через ",".
Все эти параметры, это свойства объекта model.
Однако если я передаю туда сам объект, то действие не выполняется.

public async Task<UserModel> Insert(UserModel model)
        {
            model.Id = Guid.NewGuid().ToString();
            await space.Insert(TarantoolTuple.Create(model));
            return model;
        }

Как можно решить эту проблему?
Эта функция позже будет обобщённой, и не хочется для каждого экземпляра прописывать все свойства только для этой функции.


Ответы (2 шт):

Автор решения: Scrim

Если это твой метод, то сделай так чтобы он принимал обьект класса UserModel:

TarantoolTuple.Create(UserModel model);

Если это не твой метод и у этого метода нет перегрузки которая принимает класс UserModel, то никак. Потому-что этот метод принимает параметры:

TarantoolTuple.Create(string id, string login, string balance);

И уже дальше с ними манипулирует.

→ Ссылка
Автор решения: Alexander Petrov

Метод TarantoolTuple.Create принимает отдельные значения и на их основе создаёт экземляр класса TarantoolTuple.

Можно создать метод-хелпер, который будет выполнять эту работу:

TarantoolTuple<string, string, decimal> CreateTuple(UserModel model)
{
    return TarantoolTuple.Create(model.Id, model.Login, model.Balance);
}

Теперь можно его использовать так:

await space.Insert(CreateTuple(model));

Другой вариант - написать метод расширения для класса Space.

public static class Extensions
{
    public static Task<DataResponse<TarantoolTuple<string, string, decimal>[]>> InsertModel(this Space space, UserModel model)
    {
        return space.Insert(TarantoolTuple.Create(model.Id, model.Login, model.Balance));
    }
}

Код с его использованием становится ещё короче:

await space.InsertModel(model);
→ Ссылка