気になったので、ちょっと調べてみました。
調査環境
- Unity 5.4.0f3 personal
- Visual Studio Tool for Unity 2.3.0.0
調査結果
上記の調査環境で調べた結果は以下のとおりです。
名前 | バージョン |
---|---|
C# | 4.0 |
.NET Framework | 3.5 |
調べ方
今後のバージョンアップでこの結果が変わる可能性もあるので、今回調べた方法を載せておきます。
C# のバージョンについて
試しに、C# 6.0 で導入された nameof 演算子を使うコードを書いてみます。
nameof(typeof(MonoBehaviour));
すると、Visual Studio のエラー一覧に以下のようなエラーが表示されます。
エラー CS8025 機能 'nameof 演算子' は C# 4 では使用できません。6 以上の言語バージョンを使用してください。
この結果から、使用できる C# のバージョンは 4.0 であることがわかります。
.NET Framework のバージョンについて
巷では .NET Framework 3.5 という情報が流れていたので、まずは 4.0 未満かどうかを調べます。
試しに、.NET Framework 4.0 で追加されたという、HasFlag を使用するコードを書いてみます。
[Flags]
public enum TestFlags
{
Value1 = 0x0001,
Value2 = 0x0002,
Value3 = 0x0004,
};
public class TestClass
{
void TestFunc()
{
TestFlags Flags = TestFlags.Value1;
Flags.HasFlag(TestFlags.Value1);
}
};
すると、Visual Studio のエラー一覧に以下のようなエラーが表示されます。
エラー CS1061 'TestFlags' に 'HasFlag' の定義が含まれておらず、型 'TestFlags' の最初の引数を受け付ける拡張メソッド 'HasFlag' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください。
この結果から、.NET Framework は 4.0 未満であることがわかります。
4.0 未満であることがわかったので、次は 3.5 であるかどうかを調べます。
3.5 ではクラス System.Collections.Generic.HashSet<T> が追加されているので、これを使ったコードを書いてみます。
public class TestClass
{
void TestFunc()
{
System.Collections.Generic.HashSet<int> v = new System.Collections.Generic.HashSet<int>();
v.Add(10);
v.Add(100);
}
};
すると、今度はエラーが表示されずにビルドが通ります。
この結果から、.NET Framework のバージョンは 3.5 であることがわかります。
最後に
わざわざこんなことするのも面倒なので、ひと目でバージョンがわかるようになってなってるとありがたいんですが……。