2009-06-09 17 views
1

私は次の文があります。のNullable列挙型(??)とLinqToSQL

select new Action { 
    ParentContentType = action.ParentContentType != null ? (ContentType)Enum.ToObject(typeof(ContentType), action.ParentContentType) : null 
}; 

ParentContentTypeがNULL可能int型であるデータベースのテーブルにタイプContentTypeをNULL可能の列挙

action.ParentContentTypeマップです。

action.ParentContentType イマイチ nullの場合、私が使用して列挙型の値を決定します。

action.ParentContentType は、私がnull値にNULL可能列挙型を設定しよう NULLの場合の場合は
(ContentType)Enum.ToObject(typeof(ContentType), action.ParentContentType) 

は、このdoesntのコンパイルと私が取得:

Error 1 Type of conditional expression cannot be determined because there is no implicit conversion between ContentType' and '<null>' 

EDIT

私はすなわちContentType.EMPTY ..ヌル列挙値を作成することができます。しかし

ParentContentType = action.ParentContentType == nullの? ContentType.EMPTY:(ContentType)Enum.ToObject(typeof(ContentType)、action.ParentContentType) };

どちらも問題ありません。

私は例外を取得:

The argument 'value' was the wrong type. Expected 'Enums.ContentType'. Actual 'System.Object'. 

答えて

2

私はそうでなければ、すべてのアプリケーション全体でヌルをチェックされますContentType.NullContentType.Emptyのあなたのアイデアとなるだろう...プラスContentType.Emptyがより記述です。

0

nullはタイプされていません。あなたはそれを明示的にキャストしなければなりません? C#の演算子は、第2引数が最初の引数と同じ型(暗黙的に変換可能)でなければならないことを要求します。

2つが同じタイプである必要があり、かつnullは値型にキャストすることはできませんので、NULL可能タイプのどちらもする必要があります。

select new Action { 
    ParentContentType = action.ParentContentType != null ? 
    (ContentType?)Enum.ToObject(typeof(ContentType), action.ParentContentType) : 
    (ContentType?)null 
}; 

はしかし、これはかなり曖昧です。列挙型のnullableを作成することはできませんでした(あなたが質問を投稿して以来、私は試したことはありません)。

あなたが示唆したように、「何も意味しません」を意味する列挙値を使用したほうがよいでしょう。それはほとんどの開発者にとってあまり驚くことではありません。 enumがNULL可能であるとは思わないだけです。奇妙なことに

+0

実際この場合、nullをキャストすると「式を変換できませんでした」という例外が発生します。 – iasksillyquestions

+0

それは変です。上記のコードはコンパイルされ、私のために走った。 ParentContentTypeの型の定義を投稿できますか? –

1

:例外で

ParentContentType = action.ParentContentType == null ? ContentType.EMPTY : (ContentType)Enum.ToObject(typeof(ContentType), action.ParentContentType) 

結果:

The argument 'value' was the wrong type. Expected 'Enums.ContentType'. Actual 'System.Object'. 

WTF?

+0

まあ、ParentContentTypeもenumですか?それからそれはContentType.Emptyを持っていますか? – bytebender

+0

action.ParentContentTypeはnull可能なintであり、DB – iasksillyquestions

+0

から供給されます。ただし、dbの値は決して== nullになりません。 DOh! – iasksillyquestions