|
■No91717 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士さん、返信ありがとうございました。 大変助かります。
(1) Property 内に Get ブロックしかありません。これではコンパイルエラーになるでしょう。 Set ブロックも記述するか、または ReadOnly Property にすべきです。
→ReaOnly付けるの忘れてました。ありがとうございます。
(2) hoge はフィールド変数なので、後ろの丸括弧は余計です。これではコンパイルエラーとなるでしょう。 括弧を外して In hoge もしくは In Me.hoge と記述してください。
→なるほど、了解しました。
(3) 列挙される型は As KeyValuePair ではありません。これではコンパイルエラーとなるでしょう。 この場合は As KeyValuePair(Of String, String) です。というか As 句を省略した方が手っ取り早いです。
→省略も出来るんですね。ありがとうございます。
(4) ループ内で Return してしまったら、最初の一件目を返却しただけで終わってしまいます。 エラーにはなりませんが、これでは列挙している意味がありません。 複数件の県庁所在地情報を、どのような文字列として返すことを期待しているのでしょうか?
→呼び出しされたら、Arrayに入っている情報全てが出てくるのを期待していました。 ただ、呼び出し方法含めてよくわからなくて。大変助かります。
(5) hoge 内にデータが 0 件だった場合に、何を Return するかが明示されていません。 自動的に Nothing が返されるのでエラーにはなりませんが、コンパイラ警告として報告されてしまうでしょう。
→なるほど、了解しました。
(6) Format 関数の使い方が出鱈目です。正しくは第一引数がデータ、第二引数が書式です。 String.Format メソッドであれば、第一引数が書式、第二引数以降がデータ群ですが、 いずれにせよダブルクォーテーションや波括弧の指定が間違っているので、コンパイルエラーとなるでしょう。
→そうでしたね。Console.Writeベースで書いちゃってました。 申し訳ありません、また、ありがとうございます。
列挙案1〜3も記載くださいまして、本当にありがとうございました。 自分がやりたいことに合致した方法と、もう少し勉強してやってみます。 全く分からなかったので、記載いただいて本当にうれしかったです。
また機会がありましたら、どうぞよろしくお願い致します。
本当にありがとうございました。
> ■No91713 (HYDE2019 さん) に返信 >>プロパティとの事で、こういう書き方であってますでしょうか? > いや、明らかに駄目でしょう。 > > >>Public Property hogehoge() As String >> Get >> For Each entry As KeyValuePair In hoge() >> Dim Ken As String = entry.Key >> Dim City As String = entry.Value >> Return Format({"0" "1"},Ken ,City) >> Next >> End Get >>End Proprty > > (1) Property 内に Get ブロックしかありません。これではコンパイルエラーになるでしょう。 > Set ブロックも記述するか、または ReadOnly Property にすべきです。 > > (2) hoge はフィールド変数なので、後ろの丸括弧は余計です。これではコンパイルエラーとなるでしょう。 > 括弧を外して In hoge もしくは In Me.hoge と記述してください。 > > (3) 列挙される型は As KeyValuePair ではありません。これではコンパイルエラーとなるでしょう。 > この場合は As KeyValuePair(Of String, String) です。というか As 句を省略した方が手っ取り早いです。 > > (4) ループ内で Return してしまったら、最初の一件目を返却しただけで終わってしまいます。 > エラーにはなりませんが、これでは列挙している意味がありません。 > 複数件の県庁所在地情報を、どのような文字列として返すことを期待しているのでしょうか? > > (5) hoge 内にデータが 0 件だった場合に、何を Return するかが明示されていません。 > 自動的に Nothing が返されるのでエラーにはなりませんが、コンパイラ警告として報告されてしまうでしょう。 > > (6) Format 関数の使い方が出鱈目です。正しくは第一引数がデータ、第二引数が書式です。 > String.Format メソッドであれば、第一引数が書式、第二引数以降がデータ群ですが、 > いずれにせよダブルクォーテーションや波括弧の指定が間違っているので、コンパイルエラーとなるでしょう。 > > > > Public Class Class1 > Private hoge As New Dictionary(Of String, String)() From { _ > {"東京都", "新宿区"}, _ > {"埼玉県", "さいたま市"}, _ > {"神奈川県", "横浜市"}, _ > {"千葉県", "千葉市"}, _ > {"茨城県", "水戸市"}, _ > {"栃木県", "宇都宮市"}, _ > {"群馬県", "前橋市"} _ > } > > > '列挙案1:イテレーターとして実装する > Public ReadOnly Iterator Property Property1() As IEnumerable(Of String) > Get > For Each entry As KeyValuePair(Of String, String) In hoge > Yield String.Format("{0}, {1}", entry.Key, entry.Value) > Next > End Get > End Property > > '列挙案2:配列を返すプロパティとして実装する > Public ReadOnly Property Property2() As String() > Get > Return hoge.Select(Function(e) $"{e.Key}, {e.Value}").ToArray() > End Get > End Property > > '列挙案3:改行で区切った文字列として返すよう実装する > Public ReadOnly Property Property3() As String > Get > Dim sb As New System.Text.StringBuilder() > For Each key In hoge.Keys > sb.AppendLine(key & "の県庁所在地は" & hoge(key) & "です。") > Next > Return sb.ToString() > End Get > End Property > End Class
|