динамический как тип возврата - PullRequest
0 голосов
/ 25 октября 2011

Я нахожусь в ситуации, когда мне нужно вернуть объект анонимного типа из метода. Является ли хорошей идеей использовать dynamic в качестве возвращаемого типа? какие соображения принять?

public dynamic MyMethod()
{
    // process and return the object of an anonymous type
}

Ответы [ 3 ]

4 голосов
/ 25 октября 2011

Это не имеет никакого смысла, вы можете вернуть object с тем же эффектом.

PS: также анонимные типы не так хороши, как возвращаемые типы.

3 голосов
/ 25 октября 2011

Да, это имеет смысл Если вы «гарантируете», что всегда будете возвращать объект с некоторыми характеристиками , например, с Id (игнорируя, что, возможно, было бы лучше использовать интерфейс)

public dynamic MyMethod()
{
    var temp = new ExpandoObject();
    temp.Id = 5;
    return temp;
}

Console.WriteLine(MyMethod().Id);

Таким образом, если вы гарантируете, что все ваши объекты могут Turn Left-Right, но вы не гарантируете, являются ли они самолетами, автомобилями, мотоциклами, лодками. (так что хорошо, если вы делаете Утка, набрав When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.)

Обратите внимание, что если вам необходимо отразить ваши объекты, это может стать уродливым: Как мне отразить элементы динамического объекта?

0 голосов
/ 25 октября 2011

Возвращение динамического объекта имеет преимущество, позволяющее вам получить доступ к свойствам анонимного типа без использования отражения (хотя и без intellisense). Если вы используете этот подход, вам нужно убедиться, что свойства анонимного типа совпадают с тем, к чему вы обращаетесь к динамическому объекту. В противном случае вы получите ошибки во время выполнения

Однако я бы посоветовал вам вместо этого возвращать конкретный тип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...