- PR -

プロパティのチェック

1
投稿者投稿内容
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2005-11-22 16:09
次のようなプロパティがあるとしまして
プロパティに設定する場合に

dim a as new dt
a.field36 = "aaa"

は問題ないのですが


プロパティにSETする値がNullの可能性もあるので
Set時に、Nullのチェック(IsDBNull)をつけてみたのですが
動作させてみると、「型'DBNull'から型'String'へのキャストが有効ではありません」
というエラーになります。

プロパティにSETする値のチェックは、SET時ではなく、
SET前に、行うようにしたほうがよいのでしょうか?


-------------------------------- プロパティ
Public Class dt

Private m_field36 As String

Public Property field36() As String
Get
Return m_field36
End Get
Set(ByVal Value As String)
If IsDBNull(Value) = True Then
m_field36 = ""
Else
m_field36 = Value
End If
End Set
End Property

End Class
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-22 16:37
引用:

バニラミントさんの書き込み (2005-11-22 16:09) より:

プロパティにSETする値がNullの可能性もあるので
Set時に、Nullのチェック(IsDBNull)をつけてみたのですが
動作させてみると、「型'DBNull'から型'String'へのキャストが有効ではありません」
というエラーになります。


えっと、

コード:

    If [value] Is Nothing Then
      MessageBox.Show("Null だよ")
    End If


ですよね?

引用:

プロパティにSETする値のチェックは、SET時ではなく、
SET前に、行うようにしたほうがよいのでしょうか?


クラス側の設計に因りますが、通常はおせっかいなことはしません。(特にプロパティは)
メソッドでも時には例外をスローすべきだったりしますからね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2005-11-22 16:40
SetのValueがString型じゃないですか。
DBNullを設定しようとした場合は、Setの部分のコードが呼び出されれる前に例外になってしまいますね。
ですので、Set内での処理でIsDBNullをやっても無駄です。
バニラミント
ベテラン
会議室デビュー日: 2005/05/27
投稿数: 58
投稿日時: 2005-11-22 17:00
じゃんぬねっとさん、一郎さん、レスありがとうございました

基本は、プロパティの外。値をSETする前に
チェックを行うわけですね。

私、チェックもかならずプロパティの中で
行わなければいけないものと勘違いしてました。

良い勉強になりました。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)