11

オブジェクト変数から指しているクラスを取得したいと思います。

たとえば、後で Object 変数を設定する StringBuilder オブジェクトのインスタンスがある場合、Object 変数が StringBuilder オブジェクトを指していることをどうにかして知ることができますか?

例:

StringBuilder sbText = New StringBuilder();
Object oMyObject = sbText;
// How can I determine that oMyObject points to an instance of StringBuilder object using only oMyObject

typeof(oMyObject)考えられるすべての組み合わせでまたはを使用してみoMyObject.GetType()ましたが、それでもObject. これを行うにはかなり簡単な方法があるはずですが、おそらくあるようですが、私はそれを見つけていません。

これを、リンクを提供した質問と重複する質問としてマークしたユーザーに同意しなければなりません。私の質問のタイトルは、可能な限り明確ではなかった可能性があり(少し変更しました)、両方への回答には同じ方法が含まれる可能性がありますが、他の質問をしたユーザーはインスタンス化する方法を探していました別のオブジェクトと同じタイプのオブジェクト。私が持っているのはオブジェクト型の変数だけである場合に、クラスの名前を取得する方法だけを探していました。その質問を見て、リードが提供した答えを思い付くことは決してなかったでしょうし、このサイトの検索やより広いGoogle検索で出てきたことを思い出したこともありません.

4

5 に答える 5

21

GetType()実行時に適切なSystem.Typeオブジェクトを提供する必要があります。

たとえば、次のように表示され"StringBuilder"ます。

StringBuilder sbText = new StringBuilder();
Object oMyObject = sbText;

Console.WriteLine(oMyObject.GetType().Name);

is特定のクラス タイプ(またはas) をチェックするだけの場合は、多くの場合、 を取得するよりもきれいに機能することに注意してくださいType

StringBuilder sbText = new StringBuilder();
Object oMyObject = sbText;

//...

StringBuilder sb = oMyObject as StringBuilder;
if (sb != null)
{
    // oMyObject was a StringBuilder - you can use sb as needed:
    sb.AppendText("Foo");
}
于 2013-08-16T18:15:04.123 に答える
0

おそらく、をTypeオブジェクトに格納しているためです。これを試して:

Type myType = sbText.GetType();
于 2013-08-16T18:15:16.030 に答える
0

oMyObject のみを使用して、oMyObject が StringBuilder オブジェクトのインスタンスを指していることを確認するにはどうすればよいですか

あなたはこれを行うことができます

StringBuilder sbText = new StringBuilder();
Object oMyObject = sbText;
if (oMyObject is StringBuilder)
{
   StringBuilder sb = (StringBuilder)oMyObject; // safe now as you know type
   //your code
}

ただし、型を取得する必要がある場合は、オブジェクトでGetTypeを使用する必要があります。

于 2013-08-16T18:17:37.910 に答える
0

これらはすべて機能します。

StringBuilder sbText = new StringBuilder();
Object oMyObject = sbText;

oMyObject is StringBuilder;
oMyObject.GetType() == typeof(StringBuilder);

StringBuilder test = oMyObject as StringBuilder;
if (test != null)
{
  //Do Work
}
于 2013-08-16T18:19:14.970 に答える
-1
if (oMyObject is StringBuilder) { ... }
于 2013-08-16T18:14:59.877 に答える