Why does the editor crash whenever I select a certain script in the project or object with the same script attached in the hierarchy?

Unity was crashing whenever I select a particular script in the project view or object with the script attached in the hierarchy view. It would crash by freezing as soon as I made the selection and then eventually unity would close. The editor logs showed nothing regarding the crash. I systematically found that it was a particular field in the class which was causing the problem. Eventually I found the answer which is to do with recursive field types in classes that inherit from MonoBehaviour. I will post the solution and select as the correct answer. Just wanted to let others know as there does not appear to be any information I have found on this issue anywhere else online.

So the reason why unity was crashing was because the script that was causing it to crash had a reference to a type which in turn had a reference to another type which in turn had a reference to the original type. For example, Script1 has a field of type Type1, Type1 has a field of type Type2 and Type2 has a field of type Type1:

public class Script1 : MonoBehaviour
{
   private Type1 fieldVar;
}
public class Type1
{
    private Type2 fieldVar;
}
public class Type2 
{
    private Type1 fieldVar;
}

I found that the crash only occurred if Script1 is a MonoBehaviour. This lead me to conclude that the way in which unity’s inspector works perhaps involves recursively searching through the fields to find serializeable types to expose in the UI. All fields in my case were private and I’m unsure why private fields would be searched through in this way. Also, this does not explain why this would happen in the project view. But it is the only explanation that seems to make at least partial sense. Post a comment if you know why this is the case!

I fixed the issue by having one the the types that reference each other implement an interface. For example, you would make Type1 implement interface IType1 which has the same properties/methods and then change the field of Type2 to by of type IType1. This fixed the issue for me:

public class Type1 : IType1
{
    private Type2 fieldVar;
}
public class Type2
{
    private IType1 fieldVar;
}

I’m having a similar problem, but I don’t know exactly what scripts are involved because when I click on the game object in the hierarchy, it crashes immediately. Is there any way to see what scripts are attached to that object without using the inspector?