teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

コメントの指摘に基づき内容を追記。

2019/04/24 04:54

投稿

heart_crimson
heart_crimson

スコア15

title CHANGED
File without changes
body CHANGED
@@ -24,49 +24,55 @@
24
24
  ```
25
25
 
26
26
  ### 該当のソースコード
27
+ 以下が最低限動くソースです。
27
28
 
28
29
  ```VB
30
+ Module Module1
31
+
32
+ Sub Main()
33
+ Try
34
+ PrintLabel(New MyCondition With
35
+ {
36
+ .AAA = 1
37
+ })
38
+ Catch ex As Exception
39
+ Console.WriteLine(ex.Message)
40
+ Console.ReadKey()
41
+ End Try
42
+ Console.ReadKey()
43
+ End Sub
44
+
29
45
  Private Sub PrintLabel(ByVal condition As MyCondition)
30
- Dim labelData = New MyClass With {
46
+ Dim labelData = New My_Class With {
31
47
  .ProductId = condition.ProductId,
32
- .ProductName = condition.ProductName
48
+ .ProductName = condition.ProductName,
33
49
  .AAA = condition.AAA,
34
- .BBB = condition.DetailList.Where(Function(p) p.VesselNumber > 0).Count(),
50
+ .BBB = "2019/04/01",
35
- .CCC = condition.ShelfLife,
51
+ .CCC = "2019/04/01",
36
- .DDD = Date.Parse(DateTime.Parse(condition.CreateDate)),
52
+ .DDD = "2019/04/01",
37
53
  .EEE = condition.EEE,
38
- .FFF = MstPreparation.LabelSize.Middle,
54
+ .FFF = MstTable.LabelSize.Middle,
39
55
  .GGG = condition.GGG,
40
56
  .HHH = 0,
41
- .III = MyClass.LabelTypeEnum.Box,
57
+ .III = MyCondition.LabelTypeEnum.Box,
42
- .JJJ = preparation.JJJ,
58
+ .JJJ = condition.JJJ,
43
- .KKK = preparation.KKK,
59
+ .KKK = condition.KKK,
44
- .LLL = preparation.LLL,
60
+ .LLL = condition.LLL,
45
- .MMM = preparation.MMM,
61
+ .MMM = condition.MMM,
46
- .NNN = preparation.NNN,
62
+ .NNN = condition.NNN,
47
- .OOO = New List(Of UsingIngredientDto)
63
+ .OOO = New List(Of MyDto)
48
64
  }
49
65
 
50
- LabelPrintUtils.PrintProductLabel(labelData, Config.PrinterName)
66
+ PrintProductLabel(labelData) 'ここで落ちる
51
67
  End Sub
52
68
 
53
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
54
- Public Shared Function PrintProductLabel(ByVal printDataList As IEnumerable(Of MyClass), Optional ByVal printerName As String = Nothing) As Boolean
69
+ Public Function PrintProductLabel(ByVal labelData As IEnumerable(Of My_Class)) As Boolean
55
- 'メソッド内省略
56
- return True
57
- End Function
58
70
 
59
- ```
71
+ Return True
72
+ End Function
60
73
 
61
- ```VB
62
- Namespace NH
74
+ Public Class MyCondition
63
75
 
64
- 'labelDataにNewしているクラスです。
65
-
66
- Public Class MyClass
67
-
68
- #Region "Enum"
69
-
70
76
  Public Enum LabelTypeEnum
71
77
 
72
78
  ''' <summary>商品</summary>
@@ -77,10 +83,6 @@
77
83
 
78
84
  End Enum
79
85
 
80
- #End Region
81
-
82
- #Region "プロパティ"
83
-
84
86
  ''' <summary>商品ID</summary>
85
87
  Public Property ProductId As Integer
86
88
 
@@ -105,17 +107,35 @@
105
107
  Public Property NNN As LabelTypeEnum
106
108
  Public Property OOO As List(Of MyDto)
107
109
 
108
- #End Region
110
+ End Class
109
111
 
112
+ Public Class My_Class
113
+ Public Property ProductId As Integer
114
+ Public Property ProductName As String
115
+ Public Property AAA As String
116
+ Public Property BBB As Object
117
+ Public Property CCC As Object
118
+ Public Property DDD As Date
119
+ Public Property EEE As Decimal
120
+ Public Property FFF As Object
121
+ Public Property GGG As String
122
+ Public Property HHH As Integer
123
+ Public Property III As Object
124
+ Public Property JJJ As Object
125
+ Public Property KKK As Object
126
+ Public Property LLL As Object
127
+ Public Property MMM As Object
128
+ Public Property NNN As Object
129
+ Public Property OOO As List(Of MyDto)
110
130
  End Class
111
131
 
112
- End Namespace
132
+ Public Class MyDto
113
- ```
133
+ Public Property Name As String
114
134
 
115
- ```VB
116
- Namespace NT
135
+ Public Property Dose As String
117
136
 
118
- 'MyClass.JJJに使用しているクラスです。
137
+ Public Property Unit As String
138
+ End Class
119
139
 
120
140
  Public NotInheritable Class MstTable
121
141
 
@@ -150,33 +170,80 @@
150
170
 
151
171
  End Class
152
172
 
153
- End Namespace
173
+ <Serializable>
154
- ```
174
+ Public Class AbstractEnumString
155
175
 
156
- ```VB
157
- Namespace HPMS
176
+ #Region "プロパティ"
158
177
 
159
- 'MyClass.OOOに使用しているクラスです。
178
+ Private Property Value As String
160
179
 
161
- Public Class MyDto
180
+ #End Region
162
181
 
163
- #Region "プロパティ"
182
+ #Region "コンストラクター"
164
183
 
165
- ''' <summary>名称</summary>
166
- Public Property Name As String
184
+ Private Sub New() : End Sub
167
185
 
168
- ''' <summary>用量</summary>
169
- Public Property Dose As String
186
+ Protected Sub New(ByVal value As String)
187
+ Me.Value = value
188
+ End Sub
170
189
 
171
- ''' <summary>単位</summary>
172
- Public Property Unit As String
190
+ #End Region
173
191
 
192
+ #Region "Public関数"
193
+
194
+ Public Overrides Function ToString() As String
195
+ Return Value
196
+ End Function
197
+
174
198
  #End Region
175
199
 
200
+ #Region "演算子オーバーロード"
201
+
202
+ Public Shared Operator =(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As Boolean
203
+ Return (String.Compare(lhs, rhs) = 0)
204
+ End Operator
205
+
206
+ Public Shared Operator <>(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As Boolean
207
+ Return (String.Compare(lhs, rhs) <> 0)
208
+ End Operator
209
+
210
+ Public Shared Operator >(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As Boolean
211
+ Return (String.Compare(lhs, rhs) > 0)
212
+ End Operator
213
+
214
+ Public Shared Operator >=(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As Boolean
215
+ Return (String.Compare(lhs, rhs) >= 0)
216
+ End Operator
217
+
218
+ Public Shared Operator <(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As Boolean
219
+ Return (String.Compare(lhs, rhs) < 0)
220
+ End Operator
221
+
222
+ Public Shared Operator <=(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As Boolean
223
+ Return (String.Compare(lhs, rhs) <= 0)
224
+ End Operator
225
+
226
+ Public Shared Operator &(ByVal lhs As AbstractEnumString, ByVal rhs As AbstractEnumString) As String
227
+ If lhs Is Nothing AndAlso rhs Is Nothing Then Return String.Empty
228
+ If lhs Is Nothing Then Return rhs
229
+ If rhs Is Nothing Then Return lhs
230
+ Return lhs.Value & rhs.Value
231
+ End Operator
232
+
233
+ Public Shared Widening Operator CType(value As AbstractEnumString) As String
234
+ If value Is Nothing Then Return Nothing
235
+ Return value.ToString
236
+ End Operator
237
+
238
+ Public Shared Narrowing Operator CType(value As String) As AbstractEnumString
239
+ Return New AbstractEnumString(value)
240
+ End Operator
241
+
242
+ #End Region
243
+
176
244
  End Class
245
+ End Module
177
246
 
178
- End Namespace
179
-
180
247
  ```
181
248
 
182
249
  ### 試したこと

3

コメントの指摘に基づき内容を追記。

2019/04/24 04:54

投稿

heart_crimson
heart_crimson

スコア15

title CHANGED
File without changes
body CHANGED
@@ -28,9 +28,23 @@
28
28
  ```VB
29
29
  Private Sub PrintLabel(ByVal condition As MyCondition)
30
30
  Dim labelData = New MyClass With {
31
- .id = condition.ProductId,
31
+ .ProductId = condition.ProductId,
32
- .Name = condition.ProductName
32
+ .ProductName = condition.ProductName
33
+ .AAA = condition.AAA,
34
+ .BBB = condition.DetailList.Where(Function(p) p.VesselNumber > 0).Count(),
35
+ .CCC = condition.ShelfLife,
36
+ .DDD = Date.Parse(DateTime.Parse(condition.CreateDate)),
37
+ .EEE = condition.EEE,
38
+ .FFF = MstPreparation.LabelSize.Middle,
39
+ .GGG = condition.GGG,
33
- }
40
+ .HHH = 0,
41
+ .III = MyClass.LabelTypeEnum.Box,
42
+ .JJJ = preparation.JJJ,
43
+ .KKK = preparation.KKK,
44
+ .LLL = preparation.LLL,
45
+ .MMM = preparation.MMM,
46
+ .NNN = preparation.NNN,
47
+ .OOO = New List(Of UsingIngredientDto)
34
48
  }
35
49
 
36
50
  LabelPrintUtils.PrintProductLabel(labelData, Config.PrinterName)
@@ -44,6 +58,127 @@
44
58
 
45
59
  ```
46
60
 
61
+ ```VB
62
+ Namespace NH
63
+
64
+ 'labelDataにNewしているクラスです。
65
+
66
+ Public Class MyClass
67
+
68
+ #Region "Enum"
69
+
70
+ Public Enum LabelTypeEnum
71
+
72
+ ''' <summary>商品</summary>
73
+ Product = 1
74
+
75
+ ''' <summary>商品の箱</summary>
76
+ Box = 2
77
+
78
+ End Enum
79
+
80
+ #End Region
81
+
82
+ #Region "プロパティ"
83
+
84
+ ''' <summary>商品ID</summary>
85
+ Public Property ProductId As Integer
86
+
87
+ ''' <summary>商品名</summary>
88
+ Public Property ProductName As String
89
+
90
+ '以降、諸事情で名称を変更しています。ご了承ください。
91
+
92
+ Public Property AAA As String
93
+ Public Property BBB As Decimal
94
+ Public Property CCC As Date
95
+ Public Property DDD As Date
96
+ Public Property EEE As Decimal
97
+ Public Property FFF As String
98
+ Public Property GGG As String
99
+ Public Property HHH As Decimal
100
+ Public Property III As String
101
+ Public Property JJJ As MstTable.LabelSize
102
+ Public Property KKK As Boolean
103
+ Public Property LLL As Integer
104
+ Public Property MMM As Integer
105
+ Public Property NNN As LabelTypeEnum
106
+ Public Property OOO As List(Of MyDto)
107
+
108
+ #End Region
109
+
110
+ End Class
111
+
112
+ End Namespace
113
+ ```
114
+
115
+ ```VB
116
+ Namespace NT
117
+
118
+ 'MyClass.JJJに使用しているクラスです。
119
+
120
+ Public NotInheritable Class MstTable
121
+
122
+ Private Sub New() : End Sub
123
+
124
+ ''' <summary>
125
+ ''' ラベルサイズ
126
+ ''' </summary>
127
+ ''' <completionlist cref="LabelSize" />
128
+ <Serializable>
129
+ Public NotInheritable Class LabelSize
130
+ Inherits AbstractEnumString
131
+
132
+ ''' <summary>1:小</summary>
133
+ Public Shared ReadOnly Property Small As New LabelSize("1")
134
+
135
+ ''' <summary>2:中</summary>
136
+ Public Shared ReadOnly Property Middle As New LabelSize("2")
137
+
138
+ ''' <summary>3:大</summary>
139
+ Public Shared ReadOnly Property Large As New LabelSize("3")
140
+
141
+ Private Sub New(ByVal value As String)
142
+ MyBase.New(value)
143
+ End Sub
144
+
145
+ Public Overloads Shared Narrowing Operator CType(value As String) As LabelSize
146
+ Return New LabelSize(value)
147
+ End Operator
148
+
149
+ End Class
150
+
151
+ End Class
152
+
153
+ End Namespace
154
+ ```
155
+
156
+ ```VB
157
+ Namespace HPMS
158
+
159
+ 'MyClass.OOOに使用しているクラスです。
160
+
161
+ Public Class MyDto
162
+
163
+ #Region "プロパティ"
164
+
165
+ ''' <summary>名称</summary>
166
+ Public Property Name As String
167
+
168
+ ''' <summary>用量</summary>
169
+ Public Property Dose As String
170
+
171
+ ''' <summary>単位</summary>
172
+ Public Property Unit As String
173
+
174
+ #End Region
175
+
176
+ End Class
177
+
178
+ End Namespace
179
+
180
+ ```
181
+
47
182
  ### 試したこと
48
183
 
49
184
  検索しようとは思ったが、上記のように説明することは出来ても

2

誤字修正

2019/04/23 10:51

投稿

heart_crimson
heart_crimson

スコア15

title CHANGED
File without changes
body CHANGED
@@ -4,10 +4,11 @@
4
4
  例外の原因は「IEnumerable(Of MyClass)を引数とするメソッドに、MyClassを投げていたため」でした。
5
5
  (下記のプログラムを参照してください。)
6
6
  IEnumerable(Of MyClass)を引数とするメソッドにIntegerを投げれば実行前に教えてくれるので、
7
- 動揺にIEnumerable(Of MyClass)を引数とするメソッドに、MyClassを投げていたら型が違うと教えてくれないのだろうか? と疑問に思い、質問を立ち上げました。
7
+ 同様にIEnumerable(Of MyClass)を引数とするメソッドに、MyClassを投げていたら型が違うと教えてくれないのだろうか? と疑問に思い、質問を立ち上げました。
8
8
 
9
9
  - 過去はエラーを出していたが後になって実装された機能に追従して変更されたのか
10
10
  - エラーにすると記述できないプログラム構文があるのか
11
+ - 設定すればエラーになるようにできるのか
11
12
  - 特に理由は無いのか
12
13
 
13
14
  参考になるサイト等、ご存知でしたらご教授いただければ幸いです。

1

説明文の修正

2019/04/23 09:54

投稿

heart_crimson
heart_crimson

スコア15

title CHANGED
File without changes
body CHANGED
@@ -3,9 +3,8 @@
3
3
  プログラムを組んでいる際、例外に遭遇しました。
4
4
  例外の原因は「IEnumerable(Of MyClass)を引数とするメソッドに、MyClassを投げていたため」でした。
5
5
  (下記のプログラムを参照してください。)
6
- 屁理屈を申し上げますと「これぐらいコンパイルの時に教えてくれよ」という感想です。
7
6
  IEnumerable(Of MyClass)を引数とするメソッドにIntegerを投げれば実行前に教えてくれるので、
8
- 動揺にIEnumerable(Of MyClass)を引数とするメソッドに、MyClassを投げていたら型が違うと教えてほしです
7
+ 動揺にIEnumerable(Of MyClass)を引数とするメソッドに、MyClassを投げていたら型が違うと教えてくれないのだろう? と疑問に思い、質問を立ち上げました。
9
8
 
10
9
  - 過去はエラーを出していたが後になって実装された機能に追従して変更されたのか
11
10
  - エラーにすると記述できないプログラム構文があるのか