Доступ к C# анонимные текстовые объекты

ssc-hrep3, спасибо! В сети вкладка показала мне не могу игнорировать рег. У carToModalJSON reg было дополнительное: .. решил проблему.

12
задан Ali Kazmi 3 April 2009 в 11:13
поделиться

6 ответов

Как другие ответы указали, Вы действительно не должны делать этого. Но, если Вы настаиваете, затем существует противный взлом, известный как "бросок примером", который позволит Вам делать это. Техника упоминается в нескольких статьях, здесь и здесь.

public void FuncB()
{
    var example = new { Id = 0, Name = string.Empty };

    var obj = CastByExample(FuncA(), example);
    Console.WriteLine(obj.Name);
}

private object FuncA()
{
    var a = from e in DB.Entities
            where e.Id == 1
            select new { Id = e.Id, Name = e.Name };

    return a.FirstOrDefault();
}

private T CastByExample<T>(object target, T example)
{
    return (T)target;
}

(Я не могу взять кредит на этот взлом, хотя автор одной из тех статей говорит, что не хочет быть связанным с ним также. Его имя могло бы быть знакомым.)

27
ответ дан 2 December 2019 в 03:54
поделиться

Вы не можете возвратить анонимный тип из функции.

Из документации MSDN:

Для передачи анонимного типа или набора, который содержит анонимные типы вне границы метода, необходимо сначала бросить тип для возражения. Однако это побеждает строгий контроль типов анонимного типа. Если необходимо сохранить результаты запроса или передать их вне границы метода, рассмотреть использование обычной именованной структуры или класса вместо анонимного типа.

7
ответ дан 2 December 2019 в 03:54
поделиться

Анонимный тип является просто сгенерированным компилятором классом, и компилятор не готов сказать Вам название самого класса. Поэтому нет никакого способа, которым можно возвратить экземпляр этого класса от функции кроме возврата ссылки на object.

1
ответ дан 2 December 2019 в 03:54
поделиться

Ну, я думаю, что ответ: не используйте анонимный тип вне объема где его заявленное. В этом случае создайте простой тип.

1
ответ дан 2 December 2019 в 03:54
поделиться

Если вы используете .NET 4.0, вы можете использовать кортежи для этого, вы вернете Tuple. Вы можете реализовать свои собственные кортежи для 2.0 / 3.5, и на самом деле другие люди уже имеют, поэтому вы должны быть в состоянии сделать это, если хотите.

2
ответ дан 2 December 2019 в 03:54
поделиться

создаст класс для этого случая:

public class LISTFUNCA   
{                         
    public int identificacion;  
    public string nombre;      
}     

тогда:

public List<LISTFUNCA> FuncA()   
{                                          
    var lista = (from e in DB.Entities where e.Id == 1                        
                select new { identificacion = e.Id, nombre = e.Name})
                .FirstOrDefault();  
    return lista.ToList(); 
}     
0
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: