/// <summary>
    /// Checks the relevance fachkenntnis: Falls der Charakter einen höheren Wert besitzt, als die Restriktionen, wird true zurück gegeben
    /// Bemerkung: Zu prüfenden Charakterwerte können auch die Sinne sein, welche als Liste übergeben werden. Dann müssen alle Sinne des Charakters mit Restriktion geprüft werden.
    /// <returns><c>true</c>, if relevance fachkenntnis was checked, <c>false</c> otherwise.</returns>
    /// <param name="fkObject">Fk object.</param>
    private bool CheckRelevanceFertigkeit(List <LENEValue> restrictionEigenschaften)
    {
        //Hole Reflektionen der Charaktereigenschaften
        List <FieldInfo> eigenschaftenCharakterReflect = mCharacterHelper.GetCharacterFieldValues();

        //Falls keine Restriktion vorliegt, ist die Eigenschaft relevant!
        if (restrictionEigenschaften == null || restrictionEigenschaften.Count == 0)
        {
            return(true);
        }

        foreach (var item in restrictionEigenschaften)
        {
            foreach (FieldInfo eigenschaftReflect in eigenschaftenCharakterReflect)
            {
                int?characterValue = eigenschaftReflect.GetValue(mCharacterHelper.mCharacter) as int?;
                if (characterValue != null)
                {
                    //Fertigkeit zurückgeben
                    LENEValue newObject = new LENEValue();
                    newObject.name = eigenschaftReflect.Name;
                    newObject.val  = characterValue.Value;
                    if (ReflectValue(item, newObject) == true)
                    {
                        return(true);
                    }
                }
                else                     //könnte liste sein
                {
                    if (typeof(IList).IsAssignableFrom(eigenschaftReflect.FieldType))
                    {
                        var listValues = eigenschaftReflect.GetValue(mCharacterHelper.mCharacter);
                        // By now, we know that this is assignable from IList, so we can safely cast it.
                        foreach (var element in listValues as IList)
                        {
                            Type t = element.GetType();
                            if (t.Equals(typeof(Sinn)))
                            {
                                Sinn      sElement   = element as Sinn;
                                LENEValue newElement = new LENEValue();
                                newElement.name = sElement.name;
                                newElement.val  = sElement.value;
                                if (ReflectValue(item, newElement) == true)
                                {
                                    return(true);
                                }
                            }
                        }
                    }
                }
            }
        }
        //Falls nichts gefunden, Test fehlgeschlagen
        return(false);
    }
    /// <summary>
    /// Reflects the value.
    /// Prüft, der Charakterwert die Restriktion übertrifft
    /// </summary>
    /// <returns><c>true</c>, if value was reflected, <c>false</c> otherwise.</returns>
    /// <param name="item">Item.</param>
    /// <param name="eigenschaftReflect">Eigenschaft reflect.</param>
    private bool ReflectValue(LENEValue item, LENEValue eigenschaftReflect)
    {
        if (item.VZPositiv == true && eigenschaftReflect.name == item.name && eigenschaftReflect.val >= item.val)
        {
            return(true);
        }
        else
        {
            if (item.VZPositiv == false && eigenschaftReflect.name == item.name && eigenschaftReflect.val <= item.val)
            {
                return(true);
            }
        }

        return(false);
    }