例えばスクリプタブルオブジェクトを継承したクラス「ExClass」があるとして、別のC#スクリプト内で定義してアタッチしようとすると Type cannot be found:*** Containing file and class name must match.
というエラーでアタッチできない問題は、ExClassが、ExClass.csというファイル名ではないcsファイル内に書かれていることが原因です。
プロジェクトウインドウで右クリック→ExClassという名前のC#スクリプトを新規作成して、そのなかにExClassを移動しましょう。
それでも同じエラーになったり、エラーにはならないけどアタッチできない場合、UNITYを終了してLibraryフォルダを削除してUNITYを起動すると直ります。
Libraryフォルダは一時ファイルを保存しておくフォルダなので、削除しても何の問題もありません。UNITYが壊れたと感じたらまずLibraryフォルダを削除するくらいの気軽さで削除しましょう。