Можете ли вы проверить нулевое значение, когда конструктор вызывает другой конструктор, используя объект, данный первому конструктору? - PullRequest
4 голосов
/ 20 марта 2009

Если у меня есть класс с двумя конструкторами следующим образом:

class Foo
{
    public Foo(string name)
    {...}

    public Foo(Bar bar): base(bar.name)
    {...}
}

Есть ли какой-нибудь способ, которым я могу проверить, является ли bar нулевым, прежде чем я получу исключение нулевой ссылки?

Ответы [ 3 ]

3 голосов
/ 20 марта 2009

Для этого можно использовать статический метод:

class Foo
{
    public Foo(string name) {
        ...
    }

    public Foo(Bar bar): base(GetName(bar)) {
        ...
    }

    static string GetName(Bar bar) {
        if(bar == null) {
            // or whatever you want ...
            throw new ArgumentNullException("bar");
        }
        return bar.Name;
    } 
}
2 голосов
/ 20 марта 2009
class Foo
{
    public Foo(Bar bar): base(bar == null ? default(string) : bar.name)
    {
        // ...
    }
}

альтернативно, пусть bar-класс обрабатывает объект bar-класса и выдает исключение ArgumentNullException, если вы хотите

1 голос
/ 20 марта 2009
public Foo(Bar bar): base(bar == null ? "" : bar.name)
{...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...