-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实际上为空:

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 提到的独角兽,在这种情况下你需要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 回答