2011-07-14 4 views
2

Je reçois une erreur de débordement de pile de la dernière ligne du code ci-dessous. Je ne vois pas pourquoi. Des idées?Dépassement de pile avec ToArray()

 var slots = from a in db.AvailableAppointments 
        where a.RequestID == reqId 
        select new 
        DataLayer.DateAndTimeslot 
        { 
         date = a.Date.ToShortDateString(), 
         timeSlot = a.Timeslot 
        }; 

     returnValue.DateAndTimeslot = slots.ToArray(); 

Ma classe;

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Runtime.Serialization; 

namespace DataLayer 
{ 
    [DataContract(Namespace = "http://wholesale.fluidata.co.uk/bt/AppointmentAvailabilityResponse")] 

    public class AppointmentAvailabilityResponse : DataLayer.WebserviceMessage 
    { 
     DateAndTimeslot[] _dateAndTimeSlot; 

     [DataMember] 
     public DateAndTimeslot[] DateAndTimeslot 
     { 
      get { return _dateAndTimeSlot; } 
      set { _dateAndTimeSlot = value; } 
     } 

    } 

    public class DateAndTimeslot 
    { 
     private String _date; 
     private String _timeSlot; 

     [DataMember] 
     public string date 
     { 
      get { return this._date; } 
      set {_date = value;} 
     } 

     [DataMember] 
     public string timeSlot 
     { 
      get { return this.timeSlot; } 
      set {_timeSlot = value;} 
     } 

    } 
} 

Ma table (avec des données par exemple)

ID RequestID Date   Timeslot 
171 3214 2005-12-28 00:00:00.000 EV 
172 3214 2005-12-28 00:00:00.000 EV 
173 3214 2005-12-29 00:00:00.000 EV 
174 3214 2005-12-29 00:00:00.000 EV 
175 3214 2005-12-30 00:00:00.000 EV 
176 3214 2005-12-30 00:00:00.000 EV 


CREATE TABLE [dbo].[AvailableAppointments](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [RequestID] [int] NOT NULL, 
    [Date] [datetime] NOT NULL, 
    [Timeslot] [varchar](21) NOT NULL, 
CONSTRAINT [PK_AvalibleAppointments] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Répondre

7

ici:

[DataMember] 
public string timeSlot 
{ 
    get { return this.timeSlot; } 
    set { _timeSlot = value; } 
} 

Avis disparus _ dans le getter et l'appel récursif?

devrait être:

[DataMember] 
public string timeSlot 
{ 
    get { return this._timeSlot; } 
    set { _timeSlot = value; } 
} 

Et par la voie depuis que je commencé à utiliser Auto implemented properties en C# ce genre d'erreurs est entré dans l'oubli:

[DataMember] 
public string TimeSlot { get; set; } 

Juste une note côté tatillon: il est bon codage pratique pour avoir les noms de propriété commencent par une lettre majuscule (TimeSlot au lieu de timeSlot).

+1

+1 C'est là en utilisant le cas de chameau capitale pour les propriétés aurait fourni une meilleure chance d'attraper celui-ci plus tôt. – spender

+0

Parfait merci :) –

3

Voici votre récursivité. Vous avez besoin d'un _ ici: get { return this.timeSlot; }

public string timeSlot 
    { 
     get { return this.timeSlot; } 
     set {_timeSlot = value;} 
    } 
Questions connexes