3

null許容型を返す関数がありますstruct。私は2つの同様のケースに気づきました

最初:うまく機能します:

public static GeometricCircle? CircleBySize(GeometricPoint point, double size)
{
    if (size >= epsilon)
        return null;

    return new GeometricCircle(point.Position, new Vector(1, 0, 0), size, true);
}

2番目:null値をGeometricCircleに変換する必要がありますか?

public static GeometricCircle? CircleBySize(GeometricPoint point, double size)
{
    return size > epsilon ? new GeometricCircle(point.Position, new Vector(1, 0, 0), size, true) : (GeometricCircle?)null;
}

誰かが違いが何であるか知っていますか?

4

1 に答える 1

5

最初の例では、nullいつ戻ってきますかsize >= epsilon。コンパイラnullは、それが null 許容型の有効な値であることを認識しています。

2 番目の例では、独自のルール セットが付属する?:三項演算子を使用しています。

condition ? first_expression : second_expression;

MSDNは私たちに教えてくれます(私の強調)...

first_expressionとの型がsecond_expression同じであるか、ある型から別の型への暗黙的な変換が存在する必要があります。

ここでの重要な違いは、暗黙的に, ( your の型) に変換nullできないことです。GeometricCirclefirst_expression

したがって、キャストを使用して明示的GeometricCircle?に行う必要があります。これは、暗黙的に に変換可能GeometricCircleです。

于 2012-10-15T08:49:33.077 に答える