System.Runtime.Serialization.Plists.TypeCacheItem.InitializeProperties C# (CSharp) Method

InitializeProperties() private method

Initializes this instance's property-related properties.
private InitializeProperties ( ) : void
return void
        private void InitializeProperties()
        {
            this.Properties = new List<PropertyInfo>();
            this.PropertyMembers = new List<DataMemberAttribute>();

            var properties = this.hasCustomContract ?
                this.type.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) :
                this.type.GetProperties(BindingFlags.Instance | BindingFlags.Public);

            var tuples = from p in properties
                         let attr = p.GetCustomAttributes(false)
                         let member = attr.OfType<DataMemberAttribute>().FirstOrDefault()
                         where p.CanRead && p.CanWrite && attr.OfType<IgnoreDataMemberAttribute>().Count() == 0
                         select new
                         {
                             Info = p,
                             Member = member
                         };

            foreach (var tuple in tuples.Where(t => !this.hasCustomContract || t.Member != null))
            {
                DataMemberAttribute member = tuple.Member != null ?
                    tuple.Member :
                    new DataMemberAttribute()
                    {
                        EmitDefaultValue = true,
                        IsRequired = false
                    };

                member.Name = !string.IsNullOrEmpty(member.Name) ? member.Name : tuple.Info.Name;

                this.PropertyMembers.Add(member);
                this.Properties.Add(tuple.Info);
            }
        }