Какой тип у анонимного типа в с#?

Рейтинг: 0Ответов: 2Опубликовано: 17.02.2023

Суть задачи: У меня есть данные на с#, которые я получаю в результате определенных алгоритмических вычислений. Далее мне необходимо отправить и по сети, на сервер nodejs, на JS объект имел бы такой вид:

const test = {a: 1, b: 2, c: "string"}

На C# я создал так.

new { Id = 1, b = 2, Body = "string" },

Допустим я создал такой тип.

Когда передаю его в функцию, типизирую его как object, потом обращаюсь:

Далее передаю в функцию отправки, где обращаюсь к одному из полей, на что получаю ошибку. Как описать такой объект?

Send(object a) {
  a.Body;
}

И получаю:

error CS1061: 'object' does not contain a definition for 'Body' and no accessible extension method 'Body' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

Как решить?

Ответы

▲ 1Принят

А зачем вы используете анонимные типы? C# - строго типизированный язык, описание классов здесь норма.

public class MyMessage
{
    public int Id { get; set; }
    public int b { get; set; }
    public string Body { get; set; }
}
public void Send(MyMessage message)
{
    string body = message.Body;
}
Send(new MyMessage { Id = 1, b = 2, Body = "string" });
▲ 1

Собственно, как я справлялся с подобной задачей. Вы делаете условный запрос приводя его к виду List<a'>, а затем передаете вашу переменную

select new 
{
    abnId = _abn.Id,
    abnName = _abn.Name,
    contactId = _contact.Id,
    contactFIO = _contact.F + " " + _contact.I + " " + _contact.O,
    abnMail = _contact.Email
}).Distinct().OrderByDescending(x => x.abnId).ToList();