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

InitializeFields() private method

Initializes this instance's field-related properties.
private InitializeFields ( ) : void
return void
        private void InitializeFields()
        {
            this.FieldMembers = new List<DataMemberAttribute>();
            this.Fields = new List<FieldInfo>();

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

            var tuples = from f in fields
                         let attr = f.GetCustomAttributes(false)
                         let member = attr.OfType<DataMemberAttribute>().FirstOrDefault()
                         where !f.IsLiteral && attr.OfType<IgnoreDataMemberAttribute>().Count() == 0
                         select new
                         {
                             Info = f,
                             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.FieldMembers.Add(member);
                this.Fields.Add(tuple.Info);
            }
        }