このようにプロパティ定義した構造体(Direction)の変数に直接値を代入すると以下のようなエラーが出ます。
error CS1612: Cannot modify a value type return value of `Hoge.Direction'. Consider storing the value in a temporary variable
プロパティ定義した型(この場合Sample型)で代入しないといけません。
Unityを使っててよく出てくるのは、このようなコード。
localPositionはプロパティなので同様のエラーが出力されます。Vector3型を直接代入しないといけません。
もちろんプロパティではなく、フィールドの場合は問題ありません。
余談
構造体にすべきか、クラスにすべきか悩むケースは開発していると遭遇する時がありますが、公式ページにはこのようにあります。
プリミティブ型のような単一の値を論理的に表す (int, 、double, などです。)。
・16 バイト未満のサイズのインスタンスがあります。
・変更可能なことはできません。
・頻繁にボックス化することはありません。
また、構造体は容量の少ないスタックメモリに積まれ、そして値型なのでアクセする度にメモリ内にコピーされるため、容量を小さくする必要があります。
ヒープメモリではなくスタックメモリに積まれるためガベージコレクション対象ではありません。
※ガベージコレクションはアプリケーションに大きな負荷がかかりFPSを大きく下げる場合がある
寿命が少なく容量が小さいのであれば、構造体を選択するメリットは十分にあると思います。