回答編集履歴

3

回答の追記

2019/10/15 14:41

投稿

tama_yn0815
tama_yn0815

スコア143

test CHANGED
@@ -44,6 +44,30 @@
44
44
 
45
45
 
46
46
 
47
+ 【追記】
48
+
49
+ 何故この様な型キャストが起きるのか?
50
+
51
+ こちらについては、このIF演算子の使い方が答えとなります。
52
+
53
+ この演算子は、厳密なOR代入です。
54
+
55
+ 第一引数を評価して、真なら第二引数を、偽なら第三引数を、
56
+
57
+ それぞれ評価してから、推論の型で返却し左辺(変数)へ代入します。
58
+
59
+ 代入する値の型が変数の許容外の場合、型の不一致エラーが起こりますので、
60
+
61
+ それを起こさない為に渡された引数の型から返すべき値の型を推論します。
62
+
63
+
64
+
65
+ ※ショートサーキット評価の場合、疎漏なOR代入の為に実行時点で、
66
+
67
+  例外スローか発生しますので、下記の参考リンクの様にエラー文が有ります。
68
+
69
+
70
+
47
71
  [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
48
72
 
49
73
  [参考リンク](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/misc/bc33110)

2

回答の修正

2019/10/15 14:41

投稿

tama_yn0815
tama_yn0815

スコア143

test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
 
6
6
 
7
- そのため、評価されて、引数3の値が戻ります。
7
+ そのため、評価された値の引数3の値が戻ります。
8
8
 
9
9
 
10
10
 
@@ -34,6 +34,16 @@
34
34
 
35
35
 
36
36
 
37
+ 下記に参考リンクを挙げておりますが、
38
+
39
+ 何故か?の理由は、ショートサーキット評価を行う際に、型を一致させるためです。
40
+
41
+
42
+
43
+ 日本語が変で申し訳ありません。
44
+
45
+
46
+
37
47
  [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
38
48
 
39
49
  [参考リンク](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/misc/bc33110)

1

回答の修正

2019/10/15 10:09

投稿

tama_yn0815
tama_yn0815

スコア143

test CHANGED
@@ -4,22 +4,36 @@
4
4
 
5
5
 
6
6
 
7
- そのため、評価されて、引数3の値が許容されないため、元の値が戻ります。
7
+ そのため、評価されて、引数3の値が戻ります。
8
8
 
9
9
 
10
10
 
11
- 制御構文IFとIF関数は、別物ですよ。
11
+ 1:IF演算子
12
12
 
13
- 同じ扱いをすること可能ですがそれには制約がいくつかあります。
13
+   2回目は、IF(Boolean型, Date型, Nothing);
14
14
 
15
- 今回場合Date型、null許容ではないためNothing代入きないと判断したため、
15
+   こ関数では渡された第二引数と第三引数は型を合わせます。(これが評価す。)
16
16
 
17
- 元々数b入っいた値がそのままされております。
17
+   関数の実行内部で型より、NothingをDate型のNothing(Date型の規定値とします。
18
18
 
19
19
 
20
20
 
21
+ 2:IF制御構文
22
+
23
+   Nothing(null)を代入しています。
24
+
21
- 気にりましたら関数の戻り値検証されることをお勧めします
25
+   ※変数dはnull許容型のでNothing(null)が代入されています。
26
+
27
+
28
+
29
+ 今回、ご質問の件ですが、
30
+
31
+ つまるところ、型の一致をさせる処理が動くため、演算子と制御構文で違いがあるです。
32
+
33
+ 同じ挙動にする場合、IF演算子で行う処理とIF制御構文で行う処理を厳密に合わせる必要が発生します。
22
34
 
23
35
 
24
36
 
25
37
  [本家リファレンス](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/language-reference/operators/if-operator)
38
+
39
+ [参考リンク](https://docs.microsoft.com/ja-jp/dotnet/visual-basic/misc/bc33110)