转换值为null的对象

菜鸟

成员
已加入
2013年12月19日
留言内容
7
编程经验
3-5
给定getDog此有效代码是否返回(Object)Dog或(Object)null?如果可以的话,它使我的代码变得非常容易

C#:
public Object getDog() {
    .......
    if (noDogsFound) {
       return null;
    }
}

....

Dog dog = (Dog) getDog();  // casting a null object to type Dog

if (dog != null) {
     ...dosomething();
}
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,076
地点
挪威
编程经验
10+
您应该将函数返回类型更改为Dog,null是该函数的有效返回值。
 

菜鸟

成员
已加入
2013年12月19日
留言内容
7
编程经验
3-5
不幸的是,这不是一个选择。我提供的代码仅是示例。读取的代码更加复杂,并且可能会根据参数返回许多对象。

C#:
enum Animal {DOG, CAT, INT, LONG};

Dod d = (dog)getObject(DOG); // guaranteed to return a dog but may also return null
Cat c = (Cat) getObject(CAT);
int i = (int) getObject(INT); // returns 0 and not null so this isn't an issue

我想这没什么大不了的

C#:
object o = getObject(DOG);
if (o!=null) {d = (Dog)o;}
else {d = null}

但这很难阅读。
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,566
地点
悉尼,澳大利亚
编程经验
10+
您可能应该做这样的事情:
var result = GetObject();
Dog d;
Cat c;

if (result == null)
{
    // There is not object.

    return;
}

d = result as Dog;

if (d != null)
{
    // The object is a Dog instance;

    return;
}

c = result as Cat;

if (c != null)
{
    // The object is a Cat instance;

    return;
}
 
最佳 底部