Convert.ToString()と.ToString()の違い


158

違いは何であるConvert.ToString()とは.ToString()

オンラインで多くの違いを見つけましたが、主な違いは何ですか?


7
あなたはあなたがウェブ上で多くの違いを得たと言い、後であなたはそれがこの特定の理由のためだけであるかどうか尋ねますか?ウェブで他に何を見つけましたか?
ライアン、

3
Convert.ToString()にはCultureInfoを使用できるようにするオーバーロードがありますが、.ToString()にはそのようなオーバーロードはありません。
Artemix 2014

回答:


232

Convert.ToString()は処理しますがnull、処理しToString()ません。


3
良い..この特定の理由のために彼らだけが使用しています。2つの方法?
TinTin

また、半関連、詳細についてはこの回答を参照してください。stackoverflow.com/questions/496096/...
JYelton

:JustDecompile /リフレクターを使用しての違いの詳細についてはkodefuguru.com/post/2011/06/14/...
Ubikuity

5
あなたがしたいですかnull空の文字列を返すか、例外をスローしますか?キャストと使用の違いのようなものですas:サイレント変換。
スタイル

@Ubikuity:リンクが壊れています
hdoghmen

64

ToString()オブジェクトを呼び出すと、そのオブジェクトはnullでないと見なされます(インスタンスメソッドを呼び出すにはオブジェクトが存在する必要があるため)。Convert.ToString(obj)ヌル(それは変換クラスの静的メソッドであるとして)ではありませんが、代わりに返されたオブジェクトを推定する必要はありませんString.Empty、それは場合はnull。


var arg = Request.Params.Get( "__ EVENTARGUMENT"); string _arg = Convert.ToString(arg); argがnullの場合、_argはString.Emptyを再起動しません。どうして?
vml19

2
@Nilaaコメントではなく、これを尋ねる別の質問を開くことをお勧めします。私の最初の質問は、argがnullのときに何返されるかです。私が最初に考えたのは、 "arg"は実際には "string"型であるため、Convert.ToString(...)のオーバーロードを呼び出して、渡したものを返すだけだということです。この説明は、メソッドの「オブジェクト」オーバーロードに関するものです。
Chris Dwyer

4
@Rosheええ、私はこれで少しを得ました。 引数がの場合にConvert.ToString(string value)戻ります。 引数がの場合に戻ります。nullnullConvert.ToString(object value)String.Emptynull
Tim Goodman

22

null値の処理に関する他の回答に加えて、baseを呼び出す前におよびConvert.ToStringを使用しようとします。IFormattableIConvertibleObject.ToString

例:

class FormattableType : IFormattable
{
    private double value = 0.42;

    public string ToString(string format, IFormatProvider formatProvider)
    {
        if (formatProvider == null)
        {
            // ... using some IOC-containers
            // ... or using CultureInfo.CurrentCulture / Thread.CurrentThread.CurrentCulture
            formatProvider = CultureInfo.InvariantCulture;
        }

        // ... doing things with format
        return value.ToString(formatProvider);
    }

    public override string ToString()
    {
        return value.ToString();
    }
}

結果:

Convert.ToString(new FormattableType()); // 0.42
new FormattableType().ToString();        // 0,42

1
これは非常に重要な情報であるため、正解に追加する必要があります。
Santhos

2
補足として、参照ソースに 基づくことIConvertibleが優先されIFormattable、それがObject.ToString()実装よりも優先されます。
Grx70

11

この例で違いを理解しましょう:

int i= 0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i));

またはiを使用して整数を変換できます。違いは何ですか?i.ToString ()Convert.ToString

それらの間の基本的な違いは、Convert関数がNULLSを処理する一方で処理i.ToString ()しないことです。NULL参照例外エラーがスローされます。したがって、適切なコーディングの実践convertは常に安全です。


11
あなたの例はintがnullになることはないので少し無効です
MikeT

6

クラスを作成してtoStringメソッドをオーバーライドし、必要な処理を実行できます。

たとえば、クラス「MyMail」を作成し、toStringメソッドをオーバーライドして、現在のオブジェクトを書き込む代わりに、メールを送信したり、その他の操作を実行したりできます。

Convert.toString、指定された値を同等の文字列表現に変換します。


2
Convert.ToStringは実際にはnullをチェックする安全なメソッドであり、値がnullでない場合は単にそのメソッドでToStringメソッドを呼び出します。したがって、いずれの場合でも、オーバーライドされたToStringメソッドがある場合、オーバーライドされたToStringメソッドが呼び出されます。
ZafarYousafi 2013

そして、このnullの安全性は、クラスを扱う場合にのみ役立ちます。値の型をnullにすることはできないため、それらに対してToStringメソッドを安全に呼び出すことができます。
ZafarYousafi 2013

5
object o=null;
string s;
s=o.toString();
//returns a null reference exception for string  s.

string str=convert.tostring(o);
//returns an empty string for string str and does not throw an exception.,it's 
//better to use convert.tostring() for good coding

4

メソッドは「基本的に」同じですが、null 処理する点が異なります

Pen pen = null; 
Convert.ToString(pen); // No exception thrown
pen.ToString(); // Throws NullReferenceException

MSDNから:
Convert.ToStringメソッド

指定された値を同等の文字列表現に変換します。

Object.ToString

現在のオブジェクトを表す文字列を返します。


「何も印刷しない」?何は何ですか?null""または"null"
weston

3

ではConvert.ToString()、ConvertはNULL値を処理するかどうかを.ToString()処理しNULLますが、値とNULL参照例外エラーを処理しません。したがって、を使用することをお勧めしますConvert.ToString()


3

コード愛好家にとって、これが最良の答えです。

    .............. Un Safe code ...................................
    Try
        ' In this code we will get  "Object reference not set to an instance of an object." exception
        Dim a As Object
        a = Nothing
        a.ToString()
    Catch ex As NullReferenceException
        Response.Write(ex.Message)
    End Try


    '............... it is a safe code..............................
    Dim b As Object
    b = Nothing
    Convert.ToString(b)

1
私はあなたの答えにかなり満足しています。したがって、+ 1。ありがとうございました。
Ashok kumar 2013

3

@ Ryanの回答に同意します。ちなみに、この目的のためにC#6.0から始めて、あなたは使うことができます:

someString?.ToString() ?? string.Empty;

または

$"{someString}"; // I do not recommend this approach, although this is the most concise option.

の代わりに

Convert.ToString(someString);

2

ToString()null値を処理できず、nullである値をconvert.ToString()処理できるため、システムでnull値を処理する場合は、を使用しますconvert.ToString()


2

Convert.ToString(strName)ヌル可能な値を処理すると、strName.Tostring()NULL値を処理し、例外をスローしません。

使用することをお勧めしますそれはそうConvert.ToString()そして、.ToString();


2
ToString() Vs Convert.ToString()

類似点:-

どちらも特定の型を文字列に変換するために使用されます。つまり、intから文字列、floatから文字列、またはオブジェクトから文字列に変換します。

違い:-

ToString()Convert.ToString()null値を処理する場合はnullを処理できません。

例:

namespace Marcus
{
    class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    class Startup
    {
        public static void Main()
        {
            Employee e = new Employee();
            e = null;

            string s = e.ToString(); // This will throw an null exception
            s = Convert.ToString(e); // This will throw null exception but it will be automatically handled by Convert.ToString() and exception will not be shown on command window.
        }
    }
}

Convert.ToString扱いませんNull Exception。それは単に行います:return value == null ? string.Empty : value.ToString()
Fabio

0

両方の方法を理解するために、例を見てみましょう:

int i =0;
MessageBox.Show(i.ToString());
MessageBox.Show(Convert.ToString(i)); 

ここでは両方のメソッドが文字列の変換に使用されていますが、それらの基本的な違いは次のとおりです:Convert関数ハンドルNULLi.ToString()それはスローされませんNULL reference exception error.Soを使用する優れたコーディング実践convertは常に安全です。

別の例を見てみましょう:

string s;
object o = null;
s = o.ToString(); 
//returns a null reference exception for s. 

string s;
object o = null;
s = Convert.ToString(o); 
//returns an empty string for s and does not throw an exception.

0

Convert.ToString(value)OBJキャスト最初の試みIConvertibleは、その後、IFormattable対応呼び出すためのToString(...)方法を。代わりにパラメータ値がnull返された場合string.Empty。最後の手段として、obj.ToString()他に何も機能しない場合は返却してください。

たとえばnull Convert.ToString(value) 返されたnull場合にvalue.ToString()返される可能性があることに注意してください。

.Netリファレンスソースを参照してください


0

私はこのコードを書いてコンパイルしました。

class Program
{
    static void Main(string[] args)
    {
        int a = 1;
        Console.WriteLine(a.ToString());
        Console.WriteLine(Convert.ToString(a));
    }
}

「リバースエンジニアリング」(ilspy)を使用して、「object.ToString()」と「Convert.ToString(obj)」が正確に1つのことを行うことを確認します。実際には 'Convert.ToString(obj)'は 'object.ToString()'を呼び出すため、'object.ToString()'の方が高速です。

Object.ToStringメソッド

class System.Object
{
    public string ToString(IFormatProvider provider)
    {
        return Number.FormatInt32(this, null, NumberFormatInfo.GetInstance(provider));
    }
}

Conver.ToStringメソッド

class System.Convert
{
    public static string ToString(object value)
    {
        return value.ToString(CultureInfo.CurrentCulture);
    }
}

0

C#では、文字列変数を宣言し、その変数に値を割り当てない場合、デフォルトではその変数はnull値を取ります。このような場合、ToString()メソッドを使用すると、プログラムはnull参照例外をスローします。一方、Convert.ToString()メソッドを使用すると、プログラムは例外をスローしません。


0
  • Convert.Tostring() 基本的には次のように呼び出します value == null ? String.Empty: value.ToString()

  • (string)variableキャストする対象に暗黙的または明示的な演算子がある場合にのみキャストします

  • ToString()タイプによってオーバーライドできます(タイプによって何が行われるかを制御できます)。そうでない場合は、タイプの名前になります。

明らかにオブジェクトがnullの場合、インスタンスメンバーToString()にアクセスできません。例外が発生します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.