C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: Null許容型について


(過去ログ 48 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■26362 / inTopicNo.1)  Null許容型について
  
□投稿者/ じいおい (6回)-(2008/10/07(Tue) 18:46:47)

分類:[VB.NET/VB2005 以降] 

おせわになっております。
NULL許容型についておしえていただきたいのですが、

戻り値にNULL許容型の構造体ST_Dataを宣言すると、フィールドがメンバではありません。とおこられてしまいます。

    Public Structure ST_Data
        Public sDate As String
        Public sYuko As Int16
        Public Sdata() As Single
    End Structure

  Public Class Data
        Public Function Data_Read() As ST_FieldData?
      ・
      ・
      ・
        End Function
  End Class

  Dim D as String = Data.Data_Read().Sdate

VB9.0にて行っています。





引用返信 編集キー/
■26365 / inTopicNo.2)  Re[1]: Null許容型について
□投稿者/ ぽぴ王子 (401回)-(2008/10/07(Tue) 19:03:02)
ぽぴ王子 さんの Web サイト
No26362 (じいおい さん) に返信

> NULL許容型についておしえていただきたいのですが、
>
> 戻り値にNULL許容型の構造体ST_Dataを宣言すると、フィールドがメンバではありません。とおこられてしまいます。

どこでエラーが出ますか?

> VB9.0にて行っています。

VB9.0 ということは、Visual Studio 2008 ということでしょうか。
VB のバージョンよりは Visual Studio のバージョンを書いた方がわかりやすいかもしれませんね。


ソースを見る限りでは、そもそもまともに動きすらしなさそうな感じですが、これで再現ができますか?
VB はそんなに詳しくないですが

・ST_FieldData という型が定義されていない
・Data_Read 関数はメンバ関数であるのに Data のインスタンスを作成せずに使おうとしている
・Sdate なのか sDate なのか Sdata なのかがわかりにくい(たぶん Sdate→sDate だと思いますが)

パッと見ただけでもこれだけの不明点がありますし、このままではコンパイルすら通らなそうです。
そもそも省略されているので、コンパイルを目的としたものではないのでしょうが、何が悪いのかを
判断するために再現できるソースコードを提示することはアリだと思います。
逆に動かないソースコードを提示して「どこが悪いのか教えてください」と言われても「全部?」としか
答えようがないです。

どこがわからないのか、どこでエラーが発生するのか、どういったコードで発生するのか、を改めて
整理して書いてもらえますか?
よろしくお願いします。
引用返信 編集キー/
■26366 / inTopicNo.3)  Re[2]: Null許容型について
□投稿者/ Hongliang (296回)-(2008/10/07(Tue) 19:08:11)
Nullable(Of T) から T への変換は縮小変換であり、明示的なキャストが必要です。
http://msdn.microsoft.com/ja-jp/library/ms131345.aspx
逆に T から Nullable(Of T) への変換は拡大変換であり暗黙にキャストされます。
http://msdn.microsoft.com/ja-jp/library/ms131346.aspx

一般的には、キャストするよりも Value プロパティや GetValueOrDefault メソッドを使用して値を取得します。

// ということかしらん?
引用返信 編集キー/
■26367 / inTopicNo.4)  Re[3]: Null許容型について
□投稿者/ じいおい (7回)-(2008/10/07(Tue) 19:23:49)
Public Class class2
    Public Function Data_Read() As ST_data?
        Dim data As ST_data
        Try
            data.text = "123"
            Return data
        Catch ex As Exception
            Return Nothing
        End Try
    End Function
End Class

Public Structure ST_data
    Public text As String
End Structure

Public Class Class1
    Public Shared Sub Main()
        Dim c As New class2
        Dim text As String = c.Data_Read.text
    End Sub
End Class



        Dim text As String = c.Data_Read.text
このコードで、この部分がエラーになります。
'sDate' は 'tekuno.Data.ST_FieldData?' のメンバではありません。

    Public Function Data_Read() As ST_data?
ここの?をとると(NULL許容型)コンパイルできます。

分かりにくくてすみません。

引用返信 編集キー/
■26368 / inTopicNo.5)  Re[3]: Null許容型について
□投稿者/ じいおい (8回)-(2008/10/07(Tue) 19:31:19)
No26366 (Hongliang さん) に返信
> Nullable(Of T) から T への変換は縮小変換であり、明示的なキャストが必要です。
> http://msdn.microsoft.com/ja-jp/library/ms131345.aspx
> 逆に T から Nullable(Of T) への変換は拡大変換であり暗黙にキャストされます。
> http://msdn.microsoft.com/ja-jp/library/ms131346.aspx
>
> 一般的には、キャストするよりも Value プロパティや GetValueOrDefault メソッドを使用して値を取得します。
>
> // ということかしらん?

Dim text As String = c.Data_Read.text
      ↓
Dim text As String = c.Data_Read.value.text
としてみたら、コンパイルできました。

どうもありがとうございました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -