0

リフレクションを使用して、オブジェクトのすべてのプロパティを取得しています。次に、それらのプロパティの値のいずれかが、たまたまどのような型のデフォルト値であるかを確認する必要があります。以下は私の現在のコードです。名前空間または型が見つからないと不平を言っています。これは、c# が暗黙的な型強制を行う方法と関係があると私に信じさせます。私は実行時に型を取得しているので、それを比較する方法がわからないか、それについて本当に明確ではありません。

入ってくるタイプの名前を比較するスイッチケースを避けたいと思っていましたが、StackOverflowの優秀な人々が私を正しい方向に導くことができない限り、それが私の唯一の選択肢のように見えます.

 private bool testPropertyAttribute(PropertyInfo prop)
    {
        dynamic value = prop.GetValue(DataObject, null);
        Type type = prop.PropertyType;

        /* Test to see if the value is the defult of its type */
        return (value == default(prop.PropertyType) 

    }
4

2 に答える 2

2

==forobjectは常に意味します: 参照の等価性。参考までに、デフォルトは常にnullであるため、 の場合はチェック!prop.PropertyType.IsValueTypeのみが必要です。null値型の場合は、ボクシングになります。そのため、参照の等価性は常にfalseNullable<T>を報告します。ただし、両方が someTであり、両方が空でない限りです。ただし、「デフォルト」の値タイプ ( prop.PropertyType.IsValueType) を取得するには、 を使用できますActivator.CreateInstance(prop.PropertyType)。ここであなたが望むことをするつもり==ないことに注意してください. うまくいくEquals(x,y) かもしれません。

于 2013-02-11T20:17:26.853 に答える
0

これを行うことができますが、作業を行うために == 演算子に頼ることはできません。.Equals または object.ReferenceEquals を使用して比較を行います。

于 2013-02-11T20:16:37.747 に答える