2015-11-23 2 views
-11

У меня есть 2 функции в C#:Anonymous Тип объекта

function A(){ 
    var arrDataList = new[] { new { dlName = dlFashion, idCate = 1 }, new { dlName = dlSport, idCate = 2 }, new { dlName = dlElec, idCate = 3 } }; 
    B(arrDataList); 
} 

function B(Array a){ 
    var arrDataList = a; 
    foreach (var item in arrDataList) 
     { 
      item.dlName.DataSource = new ServiceReference1.Service1Client().GetProductBestSeller(item.idCate); // throw error 
      item.dlName.DataBind(); // throw error 
     } 
} 

Как функционировать B см arrDataList в функции А.

+2

Вместо использования анонимного типа создайте закрытый класс с этими свойствами в них 'private class MyProducts {public string idCate {get; set]; (другие свойства здесь)} 'и передать массив из них в вашу функцию' B (MyProducts [] a) ' – Grax

+0

Проблема заключается в том, что вы хотите передать объект анонимно, а не как объявленный тип параметра« Array »? – Ciara

+2

Вы знаете, что в C# нет «fuctions», но методы? Таким образом, ваш код даже не будет компилироваться. Однако вы хотите передать список анонимных объектов методу 'B'? Тогда вы можете использовать ключевое слово 'dynamic' внутри' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' – HimBromBeere

ответ

2

Как анонимные объекты только унаследовать от object вы caonnot сохранить тип-информацию. Однако вы можете использовать dynamic:

void B(dynamic[] a){ 
    var arrDataList = a; 
    foreach (var item in arrDataList) 
    { 
     item.dlName.DataSource = new ServiceReference1.Service1Client().GetProductBestSeller(item.idCate); // throw error 
     item.dlName.DataBind(); // throw error 
    } 
} 

Однако нет времени компиляции типа проверки, так что если ваши объекты в массиве НЕ implment свойства, которые вы заметите это только во время выполнения. Этот подход не рекомендуется. Вам лучше не создавать реальные типы и метод, ожидающий этих типов.

+0

Я предпочитаю избегать динамических как можно больше, но он действительно отвечает на вопрос – Grax

+0

@Grax Me тоже, я добавил извещение об этом. – HimBromBeere

Смежные вопросы