可以找到类型或命名空间 - 即使我声明了变量

时间:2012-04-20 16:45:35

标签: c# .net

我收到此错误:

  

无法找到类型或命名空间名称'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。非常感谢你的指导。

6 个答案:

答案 0 :(得分:7)

typeof operator采用类型标识符,而不是实例标识符作为参数。

您希望myObject.GetType()获取对象的类型:

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

甚至可以使用is运算符:

if (!(myObject is String))

答案 1 :(得分: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

答案 2 :(得分:2)

你需要myObject.GetType()或者你可以使用

if ((myObject as string)==null)

答案 3 :(得分:2)

正如BoltClock是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);

答案 4 :(得分:1)

typeof适用于类型而非实例,请将其更改为

myObject.GetType()

以下是不同的解决方案:

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

if (!(myObject is String))

if ((myObject as String)==null)

答案 5 :(得分:0)

typeof将类型作为参数。你已经把它传给了一个对象。你可能想要做的是:

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