Check value equality of two Instances of the same type

Example: I have two game objects (object A and object B) in the scene with a light component attached to each. I want to compare the light components on both objects to see if they have the same exact values (Range, Color, Intensity, etc.).

Essentially I want something like if(LightComponentA == LightComponentB) to only return true if all field or property values on both instances match. Is there any simple way to do this, or do I just need to use reflections and iterate over each field of the object instance and then compare with my own function?

Yes, specify your own function in the class

for example:

public bool Equals(YourClass other){ 
//returns true only if both bools in classes are equal AND both myObj point to the same thing.
       return this.myBool == other.myBool && ReferenceEquals(this.myObj, other.myObj);
}

To make it even shorter, you can override the == thing, which is just a function, behind the curtains.

public static bool operator ==(YourClass left, YourClass right) {
        // If both are null, or both are same instance, return true.
        if (System.Object.ReferenceEquals(left, right)) {
            return true;
        }

        // If one is null, but not both, return false. 
        if (((object)left == null) || ((object)right == null)) {
            return false;
        }

        return left.Equals(right);
    }

You’ll probably have to right your own equals method.
Something along these lines should do the trick:

public static bool SameLight(Light firstLight, Light secondLight)
{       
     if(firstLight.color != secondLight.color)
     {
          return false;
     }
     else if(firstLight.type != secondLight.type)
     {
          return false;
     }
     //for all other variables you want to check
     
     return true;
}

This is written as a static method as you can’t inherit from the light component, as a consequence, you can’t override any of their default operators. Unity does there own background checks to determine whether their backend representation is the same, which is basically what occurs each time you use the == operator or the Equals method, for Unity objects.
What classifies as a valid Equals case is up to, if your valid case is that they have all the same values, then you need to check through each value to determine whether they are the same. No shortcuts I’m afraid. You won’t have to use reflection either, as the fields that you’re concerned about are publicly accessible. Won’t have to use iteration either. Just check the values that you care about. If that’s all of them, then check all of them.

Hopefully this helps.