anchor.diff:    end
     else
     begin
  -    rProp := rType.GetProperty(APropertyName);
  +    rProp := rType.GetProperty(APropertyOrFieldName);
       if Assigned(rProp) then
       begin
         if obj.IsObject then
  
positive.code:   obj: TValue;
  begin
    rType := TRttiContext.Create.GetType(TypeInfo(T));
    rField := rType.GetField(APropertyName);
    obj := TValue.From<T>(AObject);
    if Assigned(rField) then
    begin
      if obj.IsObject then
  
negative.code:     Exit(rProp.PropertyType.IsInstance);
  end;
  
  class procedure TSvRtti.SetValue(const APropertyOrFieldName: string; const AToObject: TObject;
    const AValue: TValue);
  var
    rType: TRttiType;
    rField: TRttiField;
    rProp: TRttiProperty;
  begin
    rType := TRttiContext.Create.GetType(AToObject.ClassType);
    rField := rType.GetField(APropertyOrFieldName);
    if Assigned(rField) then
    begin
      rField.SetValue(AToObject, AValue)
    end
    else
    begin
      rProp := rType.GetProperty(APropertyOrFieldName);
      if Assigned(rProp) then
      begin
        rProp.SetValue(AToObject, AValue)
      end
      else
      begin
        raise ESvRttiException.Create(Format('Property or field %S does not exist for a value %S',
          [APropertyOrFieldName, AToObject.ToString]));
      end;
    end;
  end;
  
  class procedure TSvRtti.SetValue<T>(const APropertyOrFieldName: string; const ATo: T; const AValue: TValue);
  var
    rType: TRttiType;
    rField: TRttiField;
  