コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】The predefined type 'System.Runtime.CompilerServices.isExternalinit must be defined or imported in order to declare init-only setter.

はじめに

sealed record Character( int Id, string Name );

Unity 2021.2 でレコード型を使おうとしたら

The predefined type 'System.Runtime.CompilerServices.isExternalinit 
must be defined or imported in order to declare init-only setter.

f:id:baba_s:20211027140640p:plain

Predefined type 'System.Runtime.CompilerServices.IsExternalInit' 
is not defined or imported

f:id:baba_s:20211027140713p:plain

これらのエラーが発生した

解決方法

using System.ComponentModel;

namespace System.Runtime.CompilerServices
{
    [EditorBrowsable(EditorBrowsableState.Never)]
    internal class IsExternalInit{}
}

上記のコードをプロジェクトに追加したらエラーが発生しなくなって

using UnityEngine;

sealed record Character( int Id, string Name );

public sealed class Example : MonoBehaviour
{
    private void Start()
    {
        var character = new Character( 25, "ピカチュウ" );
        Debug.Log( character.Id );
        Debug.Log( character.Name );
    }
}

レコード型を正常に使えた

参考サイト様