我收到此错误:
无法找到类型或命名空间名称'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。非常感谢你的指导。
答案 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))