3

このコンテキストで、このエラーはどういう意味ですか?

if (value == null)
    return "";

if (value is Nullable && ((INullable)value).IsNull) //error on this line
    return "";

if (value is DateTime)
{
    if (((DateTime)value).TimeOfDay.TotalSeconds == 0)
        return ((DateTime)value).ToString ("yyyy-MM-dd");
    return ((DateTime)value).ToString ("yyyy-MM-dd HH:mm:ss");
}

検索しましたが、このエラーに関する情報は得られませんでした。Mono(2.10.8.1)でこれを試しています。これは実際には Windows 向けのプロジェクトですが、Monodevelop でコンパイルしようとすると、このエラーが発生しました。

4

2 に答える 2

7

問題はここにあります:

if (value is Nullable

構造体ではなく静的クラスSystem.Nullableについて話していると思いますSystem.Nullable<T>

おそらくあなたは次のことを意味しました:

if (value is INullable ...)

?

null値をボックス化すると null 参照が返され、null 以外の値をボックス化すると、基になる型のボックス化された値が返されるvalueためですobjectNullable<T>

他に達成しなければならないことがまだあると思われる場合は、何をしようとしているのかを具体的に示してください。

于 2012-08-28T20:03:47.817 に答える
4

System.Nullableは静的型です。つまり、インスタンスを作成できません。したがってvalue、 が の型になることはありませんNullable

Microsoft C# コンパイラにはこのエラーはありません。そのため、Visual Studio を使用している場合、このエラーは発生しません。ということで、RedditSaveTransferを作った人はVisual Studioを使っていたようです。MonoDevelop で同じものをコンパイルすると、明らかにこの余分なエラーが発生します。

私はこのコードについて何も知らないので、彼らがここで何をしようとしているのかわかりません。明らかvalueに typeNullableになることはあり得ないため、ステートメント全体ifは常に false になります。したがって、コードからブロックを削除するだけで安全だと思います。

しかし、コードに基づいて、値が何らかの種類であるかどうかを確認しようとしているように見えますSqlTypes.INullable。その場合、私は次のようなことをするかもしれません:

INullable nullable = value as INullable;
if(nullable != null && nullable.IsNull)
   return "";

ただし、元のコードとは異なる結果が生成されます。それが良いことか悪いことかはわかりません。

おそらくこれは のタイプミスだったというジョンの意見に同意しvalue is INullableます。しかし、よくわかりません。

于 2012-08-28T20:03:46.797 に答える