-1

このエラーが発生します:

タイプまたは名前空間の名前'myObject'が見つかりませんでした

この行で:

if (typeof(myObject) != typeof(String))

これが周囲のコードです:

 for (int rCnt = 1; rCnt <= EmailList.Rows.Count; rCnt++)
            {
                object myObject = (EmailList.Cells[rCnt, 1] as Excel.Range).Value2;
                if (typeof(myObject) != typeof(String))
                    continue;
                cell = (string)(EmailList.Cells[ rCnt,1] as Excel.Range).Value2;
                if (cell!=null)
                    emails.Add(cell.ToString());
            }

私は何が間違っているのですか?私は明らかにmyObjectを宣言しています。ご指導ありがとうございます。

4

6 に答える 6

7

typeof演算子は、インスタンス識別子ではなく、型識別子を引数として取ります。

myObject.GetType()オブジェクトの型を取得したい:

if (myObject.GetType() != typeof(String))

または、is代わりに演算子を使用することもできます:

if (!(myObject is String))
于 2012-04-20T16:46:44.513 に答える
3

typeofタイプ名でのみ機能します。

あなたがしたい:

if (myObject.GetType() != typeof(String))

is次の演算子を使用することもできます。

if (!(myObject is String))

違いは、継承を扱っている場合にのみ現れます。

DerivedInstance.GetType() == typeof(BaseType) // false
DerivedInstance is BaseType // true

コメントで述べたようにnull、問題です。DerivedInstanceが実際に null の場合:

DerivedInstance.GetType() == typeof(BaseType) // NullReferenceException
DerivedInstance is BaseType // false
于 2012-04-20T16:47:19.323 に答える
2

myObject.GetType() が必要か、使用できます

if ((myObject as string)==null)
于 2012-04-20T16:47:11.050 に答える
2

BoltClock's a Unicorn が言及したように、この場合は が必要GetType()です。さらに、あなたが書いたコード全体は不要です。

            object myObject = (EmailList.Cells[rCnt, 1] as Excel.Range).Value2;
            if (typeof(myObject) != typeof(String)) // !(myObject is String) is enough. Plus, this won't work, if myObject is null.
                continue;
            cell = (string)(EmailList.Cells[ rCnt,1] as Excel.Range).Value2; // you can operate with myObject here as well
            if (cell!=null) // in case of object having type, this is unnecessary.
                emails.Add(cell.ToString()); // why calling ToString() on string?

あなたが必要とする唯一のものは

string str = (EmailList.Cells[rCnt, 1] as Excel.Range).Value2 as string;
if (str != null)
    emails.add(str);
于 2012-04-20T16:50:33.190 に答える
1

typeof はインスタンス用ではなく型用です。

myObject.GetType()

さまざまなソリューションを次に示します。

if (myObject.GetType() != typeof(String))

if (!(myObject is String))

if ((myObject as String)==null)
于 2012-04-20T16:47:14.547 に答える
0

typeof は型を引数として取ります。代わりにオブジェクトを渡しました。おそらくあなたがやろうとしていることは次のとおりです。

if (myObject.GetType() != typeof(string))
于 2012-04-20T16:47:57.633 に答える