戸森ブログ

主にUnityやC#のTipsを書いていきます

【Unity】 There are inconsistent line endings in the 'Assets/Scripts/Hoge.cs' script. の対処法

見慣れない警告

f:id:tomori-aki2961:20160803001715p:plain

There are inconsistent line endings in the 'Assets/Scripts/Hoge.cs' script. Some are Mac OS X (UNIX) and some are Windows.
This might lead to incorrect line numbers in stacktraces and compiler errors. Many text editors can fix this using Convert Line Endings menu commands.

エディタ拡張でクラス生成を行っていたときに上記の警告に遭遇しました。

改行コードの一貫性がないことが原因

OS 改行コード
Windows \r\n
UNIX \n
Mac \r

Windows上では" \n "と" \r\n "が内部的に適当に変換されるらしく
厳密にはWindowsの改行コードは" \r\n "だそうです。

private void Hoge(string className)
{
    StringBuilder builder = new StringBuilder();

    builder.Append(String.Concat("public class ", className, "\n"));
    builder.Append(String.Concat("{", "\n"));
    builder.Append("}");
}

私はWindowsユーザーなのですが改行コードを\nだと勘違いしており、上記のようなコードを書きました。
次項では2つの解決方法を紹介いたします。

解決方法1

private void Hoge(string className)
{
    StringBuilder builder = new StringBuilder();

    builder.AppendLine(String.Concat("public class ", className));
    builder.AppendLine("{");
    builder.Append("}");
}

AppendLineメソッドを呼び出すことでメソッドが行末に使用している環境で定義されている改行コードを追加してくれます。
改行コードだけを追加したい場合も下記のようにオーバーロードされているAppendLineメソッドを呼び出すことで追加出来ます。

private void Hoge(string className)
{
    StringBuilder builder = new StringBuilder();

    builder.Append(String.Concat("public class ", className)).AppendLine();
    builder.Append("{").AppendLine();
    builder.Append("}");
}

解決方法2

private void Hoge(string className)
{
    StringBuilder builder = new StringBuilder();

    builder.Append(String.Concat("public class ", className, Environment.NewLine));
    builder.Append(String.Concat("{", Environment.NewLine));
    builder.Append("}");
}

Environment.NewLineプロパティを呼び出すことで
使用している環境で定義されている改行コードを取得することが出来ます。
なお、AppendLineメソッドでは自動的にEnvironment.NewLineが追加されます。