質問編集履歴

4

追記5

2015/03/28 20:16

投稿

ranran
ranran

スコア85

test CHANGED
File without changes
test CHANGED
@@ -632,6 +632,8 @@
632
632
 
633
633
  あわせてインターフェース、変換クラスのベースを作成します。
634
634
 
635
+ (インターフェースにふさわしくないメソッドがあり修正いたしました。)
636
+
635
637
 
636
638
 
637
639
  ```lang-<ここに言語を入力>

3

追記3

2015/03/28 20:16

投稿

ranran
ranran

スコア85

test CHANGED
File without changes
test CHANGED
@@ -588,31 +588,177 @@
588
588
 
589
589
  ''' <param name="i"></param>
590
590
 
591
+ ''' <returns>T 返却対象 F 返却対象でない</returns>
592
+
593
+ ''' <remarks>引数はリストの各インデックスである</remarks>
594
+
595
+ Protected Overrides Function IsGetEnumrable(ByVal i As Integer) As Boolean
596
+
597
+
598
+
599
+ If i <> Me.list.Count - 1 Then
600
+
601
+ '最後のインデックス以外
602
+
603
+ While GetItem(i) = GetItem(i + 1)
604
+
605
+ '連続する値は返さない
606
+
607
+ Return False
608
+
609
+ End While
610
+
611
+ End If
612
+
613
+
614
+
615
+ Return True
616
+
617
+
618
+
619
+ End Function
620
+
621
+
622
+
623
+ #End Region
624
+
625
+
626
+
627
+ End Class
628
+
629
+ ```
630
+
631
+
632
+
633
+ あわせてインターフェース、変換クラスのベースを作成します。
634
+
635
+
636
+
637
+ ```lang-<ここに言語を入力>
638
+
639
+ ''' <summary>
640
+
641
+ ''' 変換インターフェイス
642
+
643
+ ''' </summary>
644
+
645
+ ''' <remarks></remarks>
646
+
647
+ Public Interface IConvertEnumrable(Of T)
648
+
649
+
650
+
651
+ 'リストを受け取る
652
+
653
+ Sub SetEnumerable(ByVal list As IEnumerable(Of T), ByVal itemName As String)
654
+
655
+
656
+
657
+ 'リストを返す
658
+
659
+ Function GetEnumerable() As IEnumerable(Of T)
660
+
661
+
662
+
663
+ End Interface
664
+
665
+
666
+
667
+
668
+
669
+ ''' <summary>
670
+
671
+ ''' 変換クラス
672
+
673
+ ''' </summary>
674
+
675
+ ''' <typeparam name="T"></typeparam>
676
+
677
+ ''' <remarks></remarks>
678
+
679
+ Public MustInherit Class ConvertEnumrable(Of T)
680
+
681
+ Implements IConvertEnumrable(Of T)
682
+
683
+
684
+
685
+ #Region "変数"
686
+
687
+
688
+
689
+ 'リスト
690
+
691
+ Protected Property list As List(Of T)
692
+
693
+ '対象アイテム
694
+
695
+ Protected Property itemName As String
696
+
697
+
698
+
699
+ #End Region
700
+
701
+
702
+
703
+ #Region "公開メソッド"
704
+
705
+
706
+
707
+ ''' <summary>
708
+
709
+ ''' リストを受け取る
710
+
711
+ ''' </summary>
712
+
713
+ ''' <param name="list"></param>
714
+
715
+ ''' <param name="itemName"></param>
716
+
717
+ ''' <remarks></remarks>
718
+
719
+ Public Sub SetEnumerable(list As IEnumerable(Of T), ByVal itemName As String) Implements IConvertEnumrable(Of T).SetEnumerable
720
+
721
+
722
+
723
+ Me.list = list
724
+
725
+ Me.itemName = itemName
726
+
727
+
728
+
729
+ End Sub
730
+
731
+
732
+
733
+ ''' <summary>
734
+
735
+ ''' リストを返す
736
+
737
+ ''' </summary>
738
+
591
739
  ''' <returns></returns>
592
740
 
593
741
  ''' <remarks></remarks>
594
742
 
595
- Protected Overrides Function IsGetEnumrable(ByVal i As Integer) As Boolean
743
+ Public Iterator Function GetEnumerable() As IEnumerable(Of T) Implements IConvertEnumrable(Of T).GetEnumerable
596
-
597
-
598
-
744
+
745
+
746
+
599
- If i <> Me.list.Count - 1 Then
747
+ For i = 0 To Me.list.Count - 1
600
-
748
+
749
+
750
+
601
- '最後のインデクス以外
751
+ '返却対象でない場合スキ
602
-
752
+
603
- While GetItem(i) = GetItem(i + 1)
753
+ If IsGetEnumrable(i) = False Then Continue For
604
-
754
+
755
+
756
+
605
- '連続するさない
757
+ '値
606
-
758
+
607
- Return False
759
+ Yield Me.list(i)
608
-
609
- End While
760
+
610
-
611
- End If
761
+ Next
612
-
613
-
614
-
615
- Return True
616
762
 
617
763
 
618
764
 
@@ -624,230 +770,84 @@
624
770
 
625
771
 
626
772
 
773
+ #Region "内部メソッド"
774
+
775
+
776
+
777
+ ''' <summary>
778
+
779
+ ''' 返却対象の値であるか確認
780
+
781
+ ''' </summary>
782
+
783
+ ''' <param name="i"></param>
784
+
785
+ ''' <returns>T 返却対象 F 返却対象でない</returns>
786
+
787
+ ''' <remarks>引数はリストの各インデックスである</</remarks>
788
+
789
+ Protected MustOverride Function IsGetEnumrable(ByVal i As Integer) As Boolean
790
+
791
+
792
+
793
+
794
+
795
+ ''' <summary>
796
+
797
+ ''' アイテム取得
798
+
799
+ ''' </summary>
800
+
801
+ ''' <param name="i"></param>
802
+
803
+ ''' <remarks></remarks>
804
+
805
+ Protected Function GetItem(ByVal i As Integer) As String
806
+
807
+ Dim item As Object = Me.list(i) 'インデックスの位置のアイテム
808
+
809
+ Dim ret As String = Nothing '戻り値
810
+
811
+
812
+
813
+ If Me.itemName Is Nothing Then
814
+
815
+ 'アイテムの指定がなかった場合
816
+
817
+ ret = item.ToString()
818
+
819
+ Else
820
+
821
+ 'アイテムの指定があった場合
822
+
823
+ Select Case GetType(T)
824
+
825
+ '- DataRowの場合
826
+
827
+ Case GetType(DataRow)
828
+
829
+ ret = item.item(itemName)
830
+
831
+
832
+
833
+ End Select
834
+
835
+ End If
836
+
837
+
838
+
839
+ '比較対象を返す
840
+
841
+ Return ret
842
+
843
+ End Function
844
+
845
+
846
+
847
+ #End Region
848
+
849
+
850
+
627
851
  End Class
628
852
 
629
853
  ```
630
-
631
-
632
-
633
- あわせてインターフェース、変換クラスのベースを作成します。
634
-
635
-
636
-
637
- ```lang-<ここに言語を入力>
638
-
639
- ''' <summary>
640
-
641
- ''' 変換インターフェイス
642
-
643
- ''' </summary>
644
-
645
- ''' <remarks></remarks>
646
-
647
- Public Interface IConvertEnumrable(Of T)
648
-
649
-
650
-
651
- 'リストを受け取る
652
-
653
- Sub SetEnumerable(ByVal list As IEnumerable(Of T), ByVal itemName As String)
654
-
655
-
656
-
657
- 'リストを返す
658
-
659
- Function GetEnumerable() As IEnumerable(Of T)
660
-
661
-
662
-
663
- End Interface
664
-
665
-
666
-
667
-
668
-
669
- ''' <summary>
670
-
671
- ''' 変換クラス
672
-
673
- ''' </summary>
674
-
675
- ''' <typeparam name="T"></typeparam>
676
-
677
- ''' <remarks></remarks>
678
-
679
- Public MustInherit Class ConvertEnumrable(Of T)
680
-
681
- Implements IConvertEnumrable(Of T)
682
-
683
-
684
-
685
- #Region "変数"
686
-
687
-
688
-
689
- 'リスト
690
-
691
- Protected Property list As List(Of T)
692
-
693
- '対象アイテム
694
-
695
- Protected Property itemName As String
696
-
697
-
698
-
699
- #End Region
700
-
701
-
702
-
703
- #Region "公開メソッド"
704
-
705
-
706
-
707
- ''' <summary>
708
-
709
- ''' リストを受け取る
710
-
711
- ''' </summary>
712
-
713
- ''' <param name="list"></param>
714
-
715
- ''' <param name="itemName"></param>
716
-
717
- ''' <remarks></remarks>
718
-
719
- Public Sub SetEnumerable(list As IEnumerable(Of T), ByVal itemName As String) Implements IConvertEnumrable(Of T).SetEnumerable
720
-
721
-
722
-
723
- Me.list = list
724
-
725
- Me.itemName = itemName
726
-
727
-
728
-
729
- End Sub
730
-
731
-
732
-
733
- ''' <summary>
734
-
735
- ''' リストを返す
736
-
737
- ''' </summary>
738
-
739
- ''' <returns></returns>
740
-
741
- ''' <remarks></remarks>
742
-
743
- Public Iterator Function GetEnumerable() As IEnumerable(Of T) Implements IConvertEnumrable(Of T).GetEnumerable
744
-
745
-
746
-
747
- For i = 0 To Me.list.Count - 1
748
-
749
-
750
-
751
- '返却対象でない場合スキップ
752
-
753
- If IsGetEnumrable(i) = False Then Continue For
754
-
755
-
756
-
757
- '値を返す
758
-
759
- Yield Me.list(i)
760
-
761
- Next
762
-
763
-
764
-
765
- End Function
766
-
767
-
768
-
769
- #End Region
770
-
771
-
772
-
773
- #Region "内部メソッド"
774
-
775
-
776
-
777
- ''' <summary>
778
-
779
- ''' 返却対象の値であるか確認
780
-
781
- ''' </summary>
782
-
783
- ''' <param name="i"></param>
784
-
785
- ''' <returns>引数はリストの各インデックスである</returns>
786
-
787
- ''' <remarks>T 返却対象 F 返却対象でない</remarks>
788
-
789
- Protected MustOverride Function IsGetEnumrable(ByVal i As Integer) As Boolean
790
-
791
-
792
-
793
-
794
-
795
- ''' <summary>
796
-
797
- ''' アイテム取得
798
-
799
- ''' </summary>
800
-
801
- ''' <param name="i"></param>
802
-
803
- ''' <remarks></remarks>
804
-
805
- Protected Function GetItem(ByVal i As Integer) As String
806
-
807
- Dim item As Object = Me.list(i) 'インデックスの位置のアイテム
808
-
809
- Dim ret As String = Nothing '戻り値
810
-
811
-
812
-
813
- If Me.itemName Is Nothing Then
814
-
815
- 'アイテムの指定がなかった場合
816
-
817
- ret = item.ToString()
818
-
819
- Else
820
-
821
- 'アイテムの指定があった場合
822
-
823
- Select Case GetType(T)
824
-
825
- '- DataRowの場合
826
-
827
- Case GetType(DataRow)
828
-
829
- ret = item.item(itemName)
830
-
831
-
832
-
833
- End Select
834
-
835
- End If
836
-
837
-
838
-
839
- '比較対象を返す
840
-
841
- Return ret
842
-
843
- End Function
844
-
845
-
846
-
847
- #End Region
848
-
849
-
850
-
851
- End Class
852
-
853
- ```

2

追記2

2015/03/28 20:09

投稿

ranran
ranran

スコア85

test CHANGED
File without changes
test CHANGED
@@ -547,3 +547,307 @@
547
547
 
548
548
 
549
549
  ```
550
+
551
+
552
+
553
+ 追記2
554
+
555
+ 変換クラスである「NotConsecutive」において
556
+
557
+ 連続を省くという処理が分離されておらず
558
+
559
+ 良くないコードと感じましたので修正いたします。
560
+
561
+
562
+
563
+ ```lang-<ここに言語を入力>
564
+
565
+ ''' <summary>
566
+
567
+ ''' 変換クラス
568
+
569
+ ''' </summary>
570
+
571
+ ''' <remarks></remarks>
572
+
573
+ Class NotConsecutive(Of T)
574
+
575
+ Inherits ConvertEnumrable(Of T)
576
+
577
+
578
+
579
+ #Region "公開メソッド"
580
+
581
+
582
+
583
+ ''' <summary>
584
+
585
+ ''' 連続する値は返さない
586
+
587
+ ''' </summary>
588
+
589
+ ''' <param name="i"></param>
590
+
591
+ ''' <returns></returns>
592
+
593
+ ''' <remarks></remarks>
594
+
595
+ Protected Overrides Function IsGetEnumrable(ByVal i As Integer) As Boolean
596
+
597
+
598
+
599
+ If i <> Me.list.Count - 1 Then
600
+
601
+ '最後のインデックス以外
602
+
603
+ While GetItem(i) = GetItem(i + 1)
604
+
605
+ '連続する値は返さない
606
+
607
+ Return False
608
+
609
+ End While
610
+
611
+ End If
612
+
613
+
614
+
615
+ Return True
616
+
617
+
618
+
619
+ End Function
620
+
621
+
622
+
623
+ #End Region
624
+
625
+
626
+
627
+ End Class
628
+
629
+ ```
630
+
631
+
632
+
633
+ あわせてインターフェース、変換クラスのベースを作成します。
634
+
635
+
636
+
637
+ ```lang-<ここに言語を入力>
638
+
639
+ ''' <summary>
640
+
641
+ ''' 変換インターフェイス
642
+
643
+ ''' </summary>
644
+
645
+ ''' <remarks></remarks>
646
+
647
+ Public Interface IConvertEnumrable(Of T)
648
+
649
+
650
+
651
+ 'リストを受け取る
652
+
653
+ Sub SetEnumerable(ByVal list As IEnumerable(Of T), ByVal itemName As String)
654
+
655
+
656
+
657
+ 'リストを返す
658
+
659
+ Function GetEnumerable() As IEnumerable(Of T)
660
+
661
+
662
+
663
+ End Interface
664
+
665
+
666
+
667
+
668
+
669
+ ''' <summary>
670
+
671
+ ''' 変換クラス
672
+
673
+ ''' </summary>
674
+
675
+ ''' <typeparam name="T"></typeparam>
676
+
677
+ ''' <remarks></remarks>
678
+
679
+ Public MustInherit Class ConvertEnumrable(Of T)
680
+
681
+ Implements IConvertEnumrable(Of T)
682
+
683
+
684
+
685
+ #Region "変数"
686
+
687
+
688
+
689
+ 'リスト
690
+
691
+ Protected Property list As List(Of T)
692
+
693
+ '対象アイテム
694
+
695
+ Protected Property itemName As String
696
+
697
+
698
+
699
+ #End Region
700
+
701
+
702
+
703
+ #Region "公開メソッド"
704
+
705
+
706
+
707
+ ''' <summary>
708
+
709
+ ''' リストを受け取る
710
+
711
+ ''' </summary>
712
+
713
+ ''' <param name="list"></param>
714
+
715
+ ''' <param name="itemName"></param>
716
+
717
+ ''' <remarks></remarks>
718
+
719
+ Public Sub SetEnumerable(list As IEnumerable(Of T), ByVal itemName As String) Implements IConvertEnumrable(Of T).SetEnumerable
720
+
721
+
722
+
723
+ Me.list = list
724
+
725
+ Me.itemName = itemName
726
+
727
+
728
+
729
+ End Sub
730
+
731
+
732
+
733
+ ''' <summary>
734
+
735
+ ''' リストを返す
736
+
737
+ ''' </summary>
738
+
739
+ ''' <returns></returns>
740
+
741
+ ''' <remarks></remarks>
742
+
743
+ Public Iterator Function GetEnumerable() As IEnumerable(Of T) Implements IConvertEnumrable(Of T).GetEnumerable
744
+
745
+
746
+
747
+ For i = 0 To Me.list.Count - 1
748
+
749
+
750
+
751
+ '返却対象でない場合スキップ
752
+
753
+ If IsGetEnumrable(i) = False Then Continue For
754
+
755
+
756
+
757
+ '値を返す
758
+
759
+ Yield Me.list(i)
760
+
761
+ Next
762
+
763
+
764
+
765
+ End Function
766
+
767
+
768
+
769
+ #End Region
770
+
771
+
772
+
773
+ #Region "内部メソッド"
774
+
775
+
776
+
777
+ ''' <summary>
778
+
779
+ ''' 返却対象の値であるか確認
780
+
781
+ ''' </summary>
782
+
783
+ ''' <param name="i"></param>
784
+
785
+ ''' <returns>引数はリストの各インデックスである</returns>
786
+
787
+ ''' <remarks>T 返却対象 F 返却対象でない</remarks>
788
+
789
+ Protected MustOverride Function IsGetEnumrable(ByVal i As Integer) As Boolean
790
+
791
+
792
+
793
+
794
+
795
+ ''' <summary>
796
+
797
+ ''' アイテム取得
798
+
799
+ ''' </summary>
800
+
801
+ ''' <param name="i"></param>
802
+
803
+ ''' <remarks></remarks>
804
+
805
+ Protected Function GetItem(ByVal i As Integer) As String
806
+
807
+ Dim item As Object = Me.list(i) 'インデックスの位置のアイテム
808
+
809
+ Dim ret As String = Nothing '戻り値
810
+
811
+
812
+
813
+ If Me.itemName Is Nothing Then
814
+
815
+ 'アイテムの指定がなかった場合
816
+
817
+ ret = item.ToString()
818
+
819
+ Else
820
+
821
+ 'アイテムの指定があった場合
822
+
823
+ Select Case GetType(T)
824
+
825
+ '- DataRowの場合
826
+
827
+ Case GetType(DataRow)
828
+
829
+ ret = item.item(itemName)
830
+
831
+
832
+
833
+ End Select
834
+
835
+ End If
836
+
837
+
838
+
839
+ '比較対象を返す
840
+
841
+ Return ret
842
+
843
+ End Function
844
+
845
+
846
+
847
+ #End Region
848
+
849
+
850
+
851
+ End Class
852
+
853
+ ```

1

編集1

2015/03/28 20:05

投稿

ranran
ranran

スコア85

test CHANGED
File without changes
test CHANGED
@@ -22,6 +22,14 @@
22
22
 
23
23
 
24
24
 
25
+ 追記1
26
+
27
+ 1、2言のコメントでも頂けましたら幸いです。
28
+
29
+ 今後のプログラミングでいかしていけるよう心に留めます。
30
+
31
+
32
+
25
33
 
26
34
 
27
35
  ```lang-<ここに言語を入力>