Exemple #1
0
             static void Main(string[] args)
             {
                 var foo = new Stats(123, 456, 7, 89);
                 var fields = FieldSorter.GetSortedFields(foo.GetType());
                 foreach (DisplayAttribute att in fields.Keys)
                     Console.WriteLine("{0}: {1} ({2}) == {3}", 
                         att.Order, att.Name, att.Description, fields[att].GetValue(foo, null));
 null));
     
             }
Exemple #2
0
        protected virtual bool ResolveFields(FtMeta meta, out string errorDescription)
        {
            FieldSorter.Rec[]  sorterRecArray = new FieldSorter.Rec[fieldList.Count];
            FieldReadElement[] sortedElements;

            for (int i = 0; i < fieldList.Count; i++)
            {
                FieldReadElement element = fieldList[i];

                sorterRecArray[i].Target   = element;
                sorterRecArray[i].Implicit = i;
                sorterRecArray[i].Explicit = element.ExplicitIndex;
            }

            int duplicateExplicitIndex;

            if (!FieldSorter.TrySort(sorterRecArray, out sortedElements, out duplicateExplicitIndex))
            {
                errorDescription = string.Format(Properties.Resources.FieldedTextReadElement_ResolveFields_DuplicateExplicitIndexInFields, duplicateExplicitIndex);
                return(false);
            }
            else
            {
                errorDescription = "";
                bool result = true;

                for (int i = 0; i < sortedElements.Length; i++)
                {
                    FieldReadElement element = sortedElements[i];
                    FtMetaField      field   = meta.FieldList.New(element.DataType);
                    if (!element.ResolveTo(field, out errorDescription))
                    {
                        result = false;
                        break;
                    }
                }

                return(result);
            }
        }
Exemple #3
0
        private void AddFields(Type t)
        {
            int startind = myFields.Count;

            if (!IsPersistentType(t))
            {
                return;
            }
            FieldInfo[] finfos = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
            foreach (FieldInfo fi in finfos)
            {
                string fname;
                if ((fname = fi.Name).StartsWith("_ndo"))
                {
                    continue;
                }

                if (!fi.IsPrivate)
                {
                    continue;
                }

                if (fi.IsInitOnly)
                {
                    continue;
                }

                Type ft = fi.FieldType;

                // Typen, die nicht speicherbar sind.
                if (ft.IsInterface)
                {
                    continue;
                }

                object[] attributes = fi.GetCustomAttributes(false);
                bool     cont       = false;
                foreach (System.Attribute attr in attributes)
                {
                    string name;
                    if ((name = attr.GetType().Name) == "NDOTransientAttribute")
                    {
                        cont = true;
                    }
                    if (name == "NDORelationAttribute")
                    {
                        cont = true;
                    }
                }
                if (cont)
                {
                    continue;
                }

                if (StorableTypes.Contains(ft))
                {
                    this.myFields.Add(fname);
                    if (!myPersistentFields.ContainsKey(fname))
                    {
                        myPersistentFields.Add(fname, fi);
                    }
                }
                else if (ft.IsValueType)
                {
                    AddValueType(fi);
                }
                else if (ft.IsClass)
                {
                    AddEmbeddedType(fi);
                }
                // Alle anderen Fälle werden ignoriert
            }
            // Pro Klasse werden die Strings sortiert
            // Sortiert wird ohne Länderberücksichtigung, sonst sortiert die
            // Anwendung auf norwegischen Systemen anders als auf deutschen.
            if (myFields.Count - startind > 0)
            {
                FieldSorter fs = new FieldSorter();
                myFields.Sort(startind, myFields.Count - startind, fs);
            }
        }