C# valueofするには?Javaとの違いを比較

こんにちは!トミセンです。

JavaではメジャーなString.valueOfメソッドですが、

「C#でvalueofってどうやるの?」
「C#って、Javaと書き方が違うの?」

分かってしまえば簡単なんですが、簡単なことほど情報を見つけるのに苦労しがちで、思ったより時間がかかってしまいますよね。

今回はそんなお悩みを解決します。ずばり!
C# valueofするには?Javaとの違いを比較」についてご紹介します。

それでは一緒に学んでいきましょう!

この記事がおすすめな人
  • C#でJavaのvalueofメソッドが使いたい人
  • C#とJavaの違いが知りたい人
目次

C# valueofするには?

確認:Javaのvalueofメソッドは?

念のため、Javaのvalueofメソッドを確認しておきます。

valueofメソッドは、数値型、小数点型の値をString型に変換するために使用します。

toStringメソッドと似ていますが、変換する対象の値がnullの場合に違いがあります。

  • toStringは、例外が発生
  • valueOfは、String型の”null”を返す

つまり、nullの可能性がある場合は、valueOfメソッドの方が安全ということですね。

次は、C#のにvalueofメソッドについて紹介します。

結論:C#にvalueofメソッドはない

端的に結論を言うと、C#にvalueofメソッドはありません。

「それでも使いたい」って人がいるかもしれないので、作ってみました!

C#で作るとこんな感じになります。次ぎのソースを見てください。

public class Test
{
    public void Main()
    {
        int? number = null;
        Console.WriteLine($"'{StringHelper.ValueOf(number)}'");
		
        // 【実行結果】
        // 'null'


        int? number2 = 3;
        Console.WriteLine($"'{StringHelper.ValueOf(number2)}'");
		
        // 【実行結果】
        // '3'
    }
}


public static class StringHelper
{
    /// <summary>
    /// valueOfメソッド
    /// </summary>
    public static string ValueOf(object obj)
    {
        return (obj == null) ? "null" : obj.ToString();
    }
}

stringクラスを継承は出来ないので、ヘルパークラスで実装しました。

引数がnullなら、文字列“null”を返して、それ以外はToString()した結果を返します。

もう少し、C#っぽく書くとこんな感じにも書けます。

public class StringHelper
{
    /// <summary>
    /// valueOfメソッド
    /// </summary>
    public static string ValueOf(object obj)
    {
        return obj?.ToString() ?? "null";
    }
}

見慣れない書き方になっていますよね??.とか、??あたりがそう感じるはずです。

それぞれ、

  • 「?.」は、null条件演算子
  • 「??」は、null合体演算子

といいます。

null条件演算子は、?.の左側がnullならnullを返して、それ以降を処理しません。obj?.ToString()だと、objがnullだったらnullを返して、objがnull以外ならToString()をするという意味になります。

null合体演算子は、??の左側の結果がnullなら、右側を返します。obj?.ToString() ?? "null";で言うと、obj?.ToString()がnullなら、"null"を返すという意味になります。

つまり、(obj == null) ? “null” : obj.ToString();と同じ結果が返ってきます。

Javaとの違いを比較

C#ではどうしているの?

C#ではどうしているんだろう?って考えてみました・・・。

でもあまり、文字列”null”を意識した記憶はありません。

試しにnullをToString()してみるとどうなるでしょうか。

次にで試してみます。

C#のToString()はどうなる?

実際に、nullのToString()を試してみました。

次のソースを見てください。

public class Test
{
    public void Main()
    {
        int? number3 = null;
        Console.WriteLine($"'{number3.ToString()}'");
		
        // 【実行結果】
        // ''		
    }
}

例外が発生しませんでした。

私の記憶だと例外が発生するような気がしていたんですが、C#のバージョンが上がって挙動が変わったのかもしれません。

ちなみに検証環境は、Visual Studio Community 2017です。

null値をToStringする時に、””・nullを返すか明示的にしたい方は、こちらの「【C# 拡張メソッド】nullをToString()」の記事をどうぞ。

あわせて読みたい
【C# 拡張メソッド】nullをToString() nullをToString()すると見事に落ちます。 とはいえ、イチイチチェックするのは面倒ですよね。 そこで、拡張メソッドを使って簡単回避する方法をご紹介します。 【【C# ...

例外が発生しないなら、わざわざValueOfメソッドを作る理由がないような気がします。

時々ログのためだけに、ValueOfメソッドのように文字列”null”を表示することはありますが、実際のコーディングで見かけたことはありません。

まとめ

C#ではstring.IsNullOrEmpty()があるからでしょうか。string型の””とnullを区別する場面は見たことがありません。

そういう意味では、C#でValueOfメソッドを使うのはC#っぽくないコーディングになっているかもしれません。

string.IsNullOrEmpty()メソッドに興味がある方は、こちらの「C# IsNullOrEmpty null・空の判定と使い方のポイント!」の記事を参考にしてください。

それでは、また。

あわせて読みたい
C# IsNullOrEmpty null・空の判定と使い方のポイント! こんにちは、トミセン(@tomisenblog)です。 文字列がnullか空文字か判定するというのはよくある処理ですが、 「C#で文字列がnullか空文字かの判定って簡単にできないの...

よかったらシェアしてね!
目次
閉じる