[過去ログ]
ふらっと C#,C♯,C#(初心者用) Part137 (1002レス)
ふらっと C#,C♯,C#(初心者用) Part137 http://mevius.5ch.net/test/read.cgi/tech/1523004019/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
394: デフォルトの名無しさん (ワッチョイ 0a5d-N4mI) [sage] 2018/05/07(月) 14:38:50.30 ID:iApxgodj0 教えてください キャストが上手くできずに困っています 具体的には、VisualStudioでデバッグのウォッチウィンドウに Enumerable.Empty<int>() is IEnumerable<object> と入力するとtrueと表示されるので少なくとも条件が整えば IEnumerable<int> は IEnumerable<object> に キャストできるとおもうのですが、プログラム上で安直に Console.WriteLine(Enumerable.Empty<int>() is IEnumerable<object>); を実行すると画面にFalseと表示されてしまいます ウォッチウィンドウ上とプログラム上で何か条件の違いがあって このようなことが起こっているのだとは思いますが、理解が不十分で解決方法が分かりません そもそもIEnumerable<T>のTは共変なのでintがobjectにアップキャストできる以上 IEnumerable<int>も無条件でIEnumerable<object>にキャストできると 思っていたのですが、この部分に何か誤解があるのでしょうか VisualStudio15.6.7、コンソールアプリ、ターゲットフレームワーク4.7.1でテストしています よろしくお願いします http://mevius.5ch.net/test/read.cgi/tech/1523004019/394
396: デフォルトの名無しさん (ワッチョイ 0a5d-N4mI) [sage] 2018/05/07(月) 21:52:56.92 ID:iApxgodj0 >>395 レスどうもありがとうございます。その後色々と試してみると、プログラムで Console.WriteLine((Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184); を実行すると画面には184と表示され、教えていただいとことと辻褄が合うように思います また、これまでの結果から考えてウォッチウィンドウで (Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184 の値を調べれば4649と表示されるのかなと思いきや「メモリを読み取ることができません」と表示されたので、 こちらの挙動はおっしゃる通り分からない(バグ?)と考えるしかなさそうです ジェネリックでないIEnumerableはLINQが使えないのでこれまで if (x is IEnumerable<object> enumerableObject) { ... } と書く場面があったのですが、これではIEnumerable<値型>が拾えなさそうなので if (x is IEnumerable enumerable) { var enumerableObject = enumerable as IEnumerable<object> ?? enumerable.Cast<object>(); ... } とでも書いておこうかと思います(今のプログラムではxがジェネリックでないIEnumerableになることはないのですが) もっと良い方法があれば教えてもらえると嬉しいです http://mevius.5ch.net/test/read.cgi/tech/1523004019/396
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.030s