Правильный тип возврата для Задачи анонимного объекта из асинхронного метода в C # - PullRequest
0 голосов
/ 09 июля 2019

Каков наилучший / правильный тип возвращаемого значения для асинхронного метода в C #, который возвращает анонимный объект?Мой метод выбирает некоторые данные через Entity Framework.Мое лучшее предположение было таким:

public async Task<object> GetStuff() {
  abClass ret = await DoSomethingAsync();
  return new { Param1 = ret.a, Param2 = ret.b };
}

Но действительно ли Задача - лучший способ сделать это, или есть какая-то Задача, или что-то подобное?

Ответы [ 3 ]

2 голосов
/ 09 июля 2019

Во-первых, вы не должны возвращать анонимный объект из открытого метода.

Либо вернуть Tuple , как предложено @Krzysztof Skowronek, либо, что еще лучше, определить тип и вернутьпример этого:

public async Task<YourClass> GetStuff()
{
    abClass ret = await DoSomethingAsync();
    return new YourClass { Param1 = ret.a, Param2 = ret.b };
}

Любые потребители вашего класса должны поблагодарить вас за это.

2 голосов
/ 09 июля 2019

Начиная с C # 7, вы можете возвращать кортежи как в Python - используйте это вместо любых объектов:

public async Task<(int Param1, double Param2)> GetStuff() {
  abClass ret = await DoSomethingAsync();
  return (ret.A, ret.B);
}

// then you can do:

(int param1, double param2) = await GetStuff(); //or
var stuff = await GetStuff();
var a = stuff.Param1;
1 голос
/ 09 июля 2019

1-Ваша проблема не имеет ничего общего с заданием.2. Вы не должны возвращать анонимный объект из открытого метода, вы можете сделать это, только если это ответ API.3- Вы можете создать класс как сказал @ mm8 или использовать кортеж.

...