2014-11-14 4 views
0

Быть в поиске и пробовать разные вещи, но просто не может показаться, что он работает правильно.
Итак, вот основы ...
Установить класс в IEnumerable и получить тип

namespace Model 
{ 
    [Serializable] 
    public class SomeMDL : IEnumerable<string> 
    { 
     public int ID { get; set; } 
     public int Volumne { get; set; } 
     public int Size { get; set; } 
    } 

    public IEnumerator<string> GetEnumerator() 
    { 
     yield return ID.ToString(); 
     yield return Volume.ToString(); 
     yield return Size.ToString(); 
    } 

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return this.GetEnumerator(); 
    } 
} 

Затем вызовите класс:

 Model.SomeMDL mdl = new Model.SomeMDL(); 
     mdl.ID = 1; 
     mdl.Volume = 2; 
     mdl.Size = 2; 

     string myVar;    
     foreach (string item in mdl) 
     {     
      //myVar = item.GetType().ToString(); 
      //myVar = item.GetEnumerator().GetType().Name.ToString(); 
      //myVar = item.GetEnumerator().GetType().FullName.ToString(); 
      //myVar = item.GetEnumerator().GetType().DeclaringType.FullName.ToString(); //null ref 
      myVar= item.ToString(); //gets the value    
     } 

Что я ищу это способ не только вернуть значения, которое item.ToString(), но мне нужно знать, какой public int он читает. Это идентификатор, объем или размер?
Необходимо вернуть строку типа (идентификатор, объем или размер).

Благодаря

+0

Не могли бы вы рассказать нам, что вы пытаетесь сделать с помощью цикла 'foreach'? Тогда мы могли бы предложить другой способ добиться того, чего вы хотите, потому что реализация 'IEnumerable' здесь не имеет смысла. – juharr

ответ

1

Если я не я пропустил что-то о вашем коде здесь, кажется, что вы злоупотребляя/непонимание основной концепции интерфейса IEnumerable. IEnumerable используется для представления группы объектов одного и того же типа, которые затем могут быть пропущены через. Все, что вы делаете, просто уступает каждому из свойств вашего класса - в чем смысл? Если вам нужно какое-либо одно из свойств, почему бы просто не получить доступ к нему в обычном режиме? Что, по вашему мнению, вы выиграете, позволив себе и другим слепо перебирать три свойства?

+0

Во-первых, есть причина, по которой мне нужно это значение, или я бы вообще этого не делал. И, во-вторых, поскольку вы не ответили на вопрос напрямую, я воспринимаю это так, как вы не знаете ответа. –

+1

@ Zath. Есть причина, по которой вам нужно какое значение, в частности? Я отвечаю на вопрос напрямую - не будет способа определить, к какой собственности вы обращаетесь в любой момент перечисления, потому что это не то, как работают IEnumerables. Вся концепция состоит в том, что они всего лишь группа значений, которые нужно повторить, а не то, что вы должны быть в состоянии сказать: «О, это соответствует этому свойству в содержащем классе». Если вы хотите выйти далеко за рамки того, как все используют что-то, вам нужно быть более конкретным о том, чего вы пытаетесь достичь. – furkle

+0

На самом деле, у меня есть 10 отдельных моделей для перебора и размещения в базе данных. Таким образом, размещение всех элементов в наборе данных и использование определяемого пользователем типа таблицы для вставки/обновления базы данных - лучший способ пойти вместо добавления 100 параметров хранимой процедуры. –

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