9

なぜ私はこれを行うことができます:

public T GetMainContentItem<T>(string moduleKey, string itemKey)
{
    return (T)GetMainContentItem(moduleKey, itemKey);
}

しかし、これではありません:

public T GetMainContentItem<T>(string moduleKey, string itemKey)
{
    return GetMainContentItem(moduleKey, itemKey) as T;
}

ジェネリック型を十分に制限していないと不平を言っていますが、そのルールは "(T)" を使用したキャストにも適用されると思います。

4

5 に答える 5

23

「T」は値型である可能性があり、「as T」は値型には意味がないためです。あなたはこれを行うことができます:

public T GetMainContentItem<T>(string moduleKey, string itemKey)
    where T : class
{
    return GetMainContentItem(moduleKey, itemKey) as T;
}
于 2009-07-24T15:06:21.580 に答える
6

T が値型の場合、これは例外です。T が Nullable またはクラスであることを確認する必要があります。

于 2009-07-24T15:06:11.440 に答える
1

T値型ですか?その場合、as演算子が失敗するとnull、値型に格納できない が返されます。

于 2009-07-24T15:07:30.610 に答える
0

Yuriy Faktorovichs の回答を拡張します。

public T GetMainContentItem<T>(string moduleKey, string itemKey) where T: class
{
    return GetMainContentItem(moduleKey, itemKey) as T;
}

これはトリックを行います...

于 2009-07-24T15:07:58.660 に答える