0

私は c# に慣れていないので、私の質問が素朴に思えるかもしれません。

私はこの方法を使用しています:

public static object ChangeType(object value, Type conversionType);

メタデータ マニュアルから:

戻り値:

型が conversionType で、その値が value と等しいオブジェクト。-または- value が null で conversionType が値の型でない場合は、null 参照 (Visual Basic では Nothing)。

ただし、メソッド シグネチャでは、返される型は常に「オブジェクト」です。では、返される型が の場合、値を変換する利点はobject何ですか?

4

4 に答える 4

4

Convert.ChangeType渡したオブジェクトと同等の値を持つ、指定された型の新しいオブジェクトを作成します。

たとえば、文字列ではなくConvert.ChangeType("42", typeof(int))ボックス化されたインスタンスを返します。int

実際の動作はIConvertible、渡したオブジェクトの実装内に完全に含まれています。

于 2012-07-17T14:50:27.517 に答える
1

また、

msdn ドキュメントから: http://msdn.microsoft.com/en-us/library/aa324833(v=vs.71).aspx

*

value
IConvertible インターフェイスを実装するオブジェクト。

*

于 2012-07-17T14:52:24.723 に答える
1

.net メソッドには固定されたシグネチャがあります (ジェネリックを使用すると、さらに先に進むことができますが、ここではそうではありません) - したがって、この変換メソッドでは、最も一般的な型を選択しました: object.

と を検討PersonしてくださいManManと定義されている

class Man : Person

アドレス帳を作成するために、次の 2 つの方法は作成しません。

Man GetByName(string name);
Woman GetByName(string name);

代わりに、1 つのメソッドを作成します。

Person GetByName(string name);

このメソッドは を返しPerson、実際に返されるオブジェクトは ですが、Man現在わかっているのはそれが であるということだけですPerson

コンバーターに戻ります。パラメーターで提供した戻り値の型はわかっていますが、メソッドが作成されたずっと前に、パラメーターとして何を提供するかを知りませんでした。結果を既知の型に安全にキャストできます。

MyType myObject = (MyType)ChangeType(value, typeof(MyType));
于 2012-07-17T14:55:39.710 に答える
1

その理由は、特定の型にキャストできるからです。このメソッドはジェネリック型の前にあるため、任意の数の型の 1 つを返すことができる唯一の方法は、それらすべてのスーパータイプ、つまり object を返すことです。もちろん、それを選択したタイプにキャストして、成功することを保証できますが、他の唯一のオプションは、すべてのタイプのオーバーロードであり、少し重くなります。:)

注意すべきことは、これは単にキャスティングと同じではないということです。指定したタイプではなく、要求したタイプのまったく新しいオブジェクトを返します。

于 2012-07-17T14:51:18.913 に答える