- 1 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 15:09:05.75 ID:SBEkwl3H.net]
- 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980を踏んだ人は新スレを建てて下さい。 >>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part95 mevius.5ch.net/test/read.cgi/tech/1508180530/ C#, C♯, C#相談室 Part93 https://mevius.5ch.net/test/read.cgi/tech/1492818720/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part135 mevius.5ch.net/test/read.cgi/tech/1517749348/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/ja-jp/library/gg145045.aspx https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/ - VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
- 802 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 17:32:32.77 ID:+cAt7TAV.net]
- ランバダのPVはエロかったなあ
関係ないけど
- 803 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:08:45.57 ID:qHFB3R53.net]
- >>780
この本よかったぞ 基本的な知識はあるがLINQ、ラムダ、推論型の知識があやふやならおススメ 「C#プログラマーのための 基礎からわかるLINQマジック! 」 https://www.amazon.co.jp/dp/product/B01FEZ7QNY/ref=as_li_tf_tl?camp=247&creative=1211&creativeASIN=B01FEZ7QNY&ie=UTF8&linkCode=as2&tag=bookmeter_book_image_image_pc_logoff-22
- 804 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:19:24.61 ID:LI6oPksr.net]
- 人脈?
- 805 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:25:17.02 ID:QYlpMr10.net]
- 質問失礼します。
以下のようなプログラムを書いたところコメントに書いたようなメッセージが表示されますが、 このメッセージに従ってインライン化しようにも、どのように修正すれば良いか分かりません。 これはIDEのバグだと思って無視しても良いものなのでしょうか。 インライン化の有無は可読性だけの問題でパフォーマンスなどに影響はないのだと思いますが、 このようなメッセージが表示されたままプログラムを完成とするのはあまり気分がよくありません。 プログラムの修正方法や、このようなメッセージに対する考え方など、 分かることがあれば教えていただけないでしょうか。よろしくお願いします。 static void Main(string[] args) { void getMessage1(out string _message) => _message = "x is 1."; void getMessage2(out string _message) => _message = "x is not 1."; int x = 1; string message; // IDE0018 変
- 806 名前:数の宣言をインライン化できます
if (x == 1) { getMessage1(out message); } else { getMessage2(out message); } Console.WriteLine(message); } [] - [ここ壊れてます]
- 807 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:42:11.73 ID:q+LDJ3nt.net]
- そんなもん買っても十中八九忘れる
基本ネットに転がってるコピペで食いつなぐのが一流
- 808 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:44:40.56 ID:LI6oPksr.net]
- >>789
なんでoutを使うのかが分からないんだけど
- 809 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:49:12.82 ID:+cAt7TAV.net]
- >>789
"IDE0018"でググったら一発で解説が見つかるんだけどw 何でその長文タイプうする前に検索しないのよw そこが分からん
- 810 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:57:29.01 ID:roepBgfb.net]
- >>789
これ、どうしろって言ってん?
- 811 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:57:31.26 ID:LI6oPksr.net]
- >>792
そういうことを言ってるんじゃないと思うけど… 手元にあるc#7.1じゃ再現しないんだけど
- 812 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 18:59:03.69 ID:LI6oPksr.net]
- 普通に考えるとスコープから外れるからインライン化できないはずなのにインライン化を進めてくるってことでそ
- 813 名前:789 mailto:sage [2018/03/30(金) 19:11:19.76 ID:QYlpMr10.net]
- 早速たくさんのレスありがとうございます。
お返事に少し時間がかかってしまいそうなので、上から順に書き込みたいと思います。 お待たせしてしまって申し訳ありません。 >>791 レスどうもありがとうございます。 色々なクラスで定義されているTryParseやIDictionaryのTryGetValueは 使いやすいと感じていて、それを参考に定義したメソッドをifの内側で使おうとしたのが >789のようなプログラムを書いた経緯です。 しかし確かに複数の情報を返却したければそれ用のクラスを定義すれば良いことですし、 C#7ではタプルも構文化されているので、もはやoutは時代遅れということでしょうか。 C#にはいくつか負の遺産もあるということなので、その辺りについても勉強したいと思います。
- 814 名前:789 mailto:sage [2018/03/30(金) 19:21:12.54 ID:QYlpMr10.net]
- >>792
説明が不十分で申し訳ありません。 >>795の方が分かりやすく説明してくださっているので蛇足になってしまうかも知れませんが、 私が検索した範囲では、 string message; getMessage1(out message); は getMessage1(out string message); に直せば良いということは分かったものの、変数の定義と関数の呼び出しとの間に (今回の例のifのような)別のコードがあって、それが移動できないように見えても メッセージが表示されてしまう場合があるということです。 ただ、「移動できないように見える」という部分に自信がなかったのと、 仮にそれが正しかったとしてもこのようなメッセージをどの様に受け止めれば良いのかが よく分からなかったので質問させていただきました。
- 815 名前:789 mailto:sage [2018/03/30(金) 19:31:31.59 ID:QYlpMr10.net]
- >>793
IDEがなんと言ってきているのか、とういことでしょうか。 サンプルコードを空行も含めて上から数えて7行目のコメント文なのですが、 「IDE0018 変数の宣言をインライン化できます」というメッセージが表示されます。 それとも、私がどのようなお返事を期待しているかとういことであれば、 このメッセージに対処するためのプログラムの修正方法や、 このようなメッセージに対する考え方などを教えていただけないかと考えています。 しかし、私の期待していること自体が見当はずれということもあると思うので、 それ以外でも何か気がつくことがあれば教えていただけると嬉しいです。
- 816 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 19:34:47.70 ID:roepBgfb.net]
- msに
これ壊れててん? ってメール出してみよう
- 817 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 19:44:57.86 ID:DYwliZHB.net]
- VSとターゲットのフレームワークのバージョンを書いてないのがいまいち
- 818 名前:789 mailto:sage [2018/03/30(金) 20:00:44.22 ID:QYlpMr10.net]
- >>794
早速検証までしていただいてどうもありがとうございます。 また、本来書くべきC#のバージョンが抜けてしまっていて申し訳ありません。 >>789 を始めに確認したときのターゲットフレームワークは4.6.2だったので、 以下の対応表によればC#のバージョンは6.0ということになるのでしょうか。 https://qiita.com/nskydiving/items/3af8bab5a0a63ccb9893 しかし、その後ターゲットフレームワークを4.7.1や3.5に変更して試してみても やはり同じメッセージが表示されました。 あと、これも後出しになってしまって申し訳ないのですが、 あからさまな構文エラーと違ってこのメッセージはコンパイルするまで表示されないようです。 IDEはVisual Studio 2017を使用していて、OSはWindows 10 Pro 64 bitです。 他に何かお伝えすべきことがあれば教えていただけると嬉しく思います。 よろしくおねがいします。
- 819 名前:789 mailto:sage [2018/03/30(金) 20:06:29.84 ID:QYlpMr10.net]
- >>795
分かりやすく補足していただいてどうもありがとうございます。 C#のバージョンについてもそうですが、正確にお伝えするための情報の確認が不十分でした。 これはプログラミング以前の問題だと思うので気をつけていきたいと思います。申し訳ありません。
- 820 名前:789 mailto:sage [2018/03/30(金) 20:18:53.64 ID:QYlpMr10.net]
- >>799
アドバイスどうもありがとうございます。一日程度このスレッドを拝見してみて、 私の勘違いという証拠が見つからなければマイクロソフトに報告してみようと思います。 報告する場合、Visual Studio の 「ヘルプ(H)>フィードバックの送信(F)>問題点の報告(P)」を利用しようと考えていますが、 もし他におすすめの連絡先などがあれば教えていただけると嬉しく思います。
- 821 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:21:01.69 ID:keCNvJ3G.net]
- つまりこう書けるよってことじゃないの?
if(x == 1) getMessage1(out string message); else getMessage2(out string message);
- 822 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:23:34.69 ID:sxHgkaP9.net]
- >>803
https://www.google.co.jp/search?client=opera&q=IDE0018&sourceid=opera&ie=UTF-8&oe=UTF-8 https://vimalakitty.blogspot.jp/2017/09/10-01.html
- 823 名前:789 mailto:sage [2018/03/30(金) 20:32:11.02 ID:QYlpMr10.net]
- >>800
おっしゃる通りで、大変失礼いたしました。申し訳ありません。 >>801と内容が一部重複してしまいますが、これまでの内容を改めて整理したいと思います。 (これまでいただいたレスの表現を一部お借りしています) 問題の概要: 関数のout引数に関して、スコープから外れるためインライン化できないと思われる場面で インライン化を推奨するメッセージが表示されることがある 問題を再現するコード及びメッセージの内容: >>789 問題が再現する環境: Windows 10 Pro 64bit Visual Studio 2017 ターゲットフレームワーク:3.5/4.6.2/4.7.1 で確認 備考: コードのコンパイル後にメッセージを確認 以上です。他に何か書くべきことがあれば教えていただけると嬉しいです。 どうぞよろしくお願いいたします。
- 824 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:37:12.26 ID:+cAt7TAV.net]
- >>803
何でそうなるw だから、まずググろうよ"IDE0018"で そうすればこれはC#7の追加機能に起因する警告であり、不具合ではないとすぐに分かる。 何でそんな長文タイプする手間は惜しまないのにちょっと検索する手間は惜しむのよw 意味が分からん ちなみに、この警告を無視するにはこうするんだってさ https://developercommunity.visualstudio.com/content/problem/159716/is-there-a-way-to-disable-ide0018-globally.html これもググってれあばすぐに自分で見つけられてるはず
- 825 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:40:09.19 ID:keCNvJ3G.net]
- 一行ならブロックスコープ外せるから>>804だと思うんだけど自分の6.0環境では試せなくて悲しい
- 826 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 20:59:52.66 ID:keCNvJ3G.net]
- ごめん、無理だね
ブロック外してもスコープはローカルになっちゃうみたい
- 827 名前:789 mailto:sage [2018/03/30(金) 21:13:54.63 ID:QYlpMr10.net]
- >>804>>808>>809
修正方法のご提示とご検証どうもありがとうございます。問題は>>809にお書きいただいたとおりです。 ただ、お書きいただいた通り問題はスコープにありますので、 Console.WriteLine(message);をifとelseの両方の中に書けばこの問題は起こりません。 この程度の内容を2回書くことは大した問題になりませんし、 この部分に対応するコードが長くなってしまった場合もメソッドとして切り出せば同じことですので、 いただいたレスを読みながら、>>789のようなプログラムを書くこと自体が筋が悪くて、 やはり>>804に適合するプログラムになるよう全体を修正するべきなのかなとも考えました。 ただ、メソッドとして切り出す方法であらゆる状況に対応できるかどうか自信がないので、 いずれにしても確信は持てていない状況です。
- 828 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:24:37.09 ID:DYwliZHB.net]
- >>807
いつまでトンチンカンなこと言ってんの?
- 829 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:25:20.49 ID:DYwliZHB.net]
- 例のおじいちゃんかよ
レスして損した
- 830 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:28:28.22 ID:+cAt7TAV.net]
- >>811
トンチンカンでもおじいちゃんでもないからw こんなググればすぐに理由も対処法もわかる話でMSにクレーム付けたら 質問者が恥をかくだけ
- 831 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:30:10.03 ID:DYwliZHB.net]
- NG推奨
- 832 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:30:33.31 ID:roepBgfb.net]
- >>813
じゃ、どうしろって書いてあんの? リンクのどこ見ればいいかわかんないよ 対象のコード貼ってくれ
- 833 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:30:33.58 ID:+cAt7TAV.net]
- >>814
もうした
- 834 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:31:54.48 ID:DYwliZHB.net]
- おじいちゃんに触れても無駄だよ
いつまでも間違いに気づいてないしレスも読んでないから
- 835 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:32:50.48 ID:+cAt7TAV.net]
- >>815
無視するか気になるなら>>867で対処する 当たり前でしょう
- 836 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:33:56.46 ID:roepBgfb.net]
- >>818
じゃ、バグってんじゃんw
- 837 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:34:34.33 ID:+cAt7TAV.net]
- >>819
だから何でそうなるw 意味が分からない
- 838 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:35:21.33 ID:DYwliZHB.net]
- >>819
おじいちゃんはまだ何が起こってると言う話なのか判ってないからレスしても無駄 スコープもわからないから
- 839 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:36:16.37 ID:+cAt7TAV.net]
- >>821
トンチンカンなことを言ってるのは君の方なんだけど、自覚がないってのは幸福でいいねw
- 840 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:37:18.61 ID:roepBgfb.net]
- >>820
いや、バグでしょコレ だってこんなん指摘してきた同僚がいたらキチガイじゃん
- 841 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:37:22.84 ID:MnRWcQoL.net]
- >>810
Visual Studio のバグでしょ とりあえず頓珍漢野郎の>>807のリンク先に抑止方法書いてあるからそれでしのげばいいかと
- 842 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:38:22.07 ID:+cAt7TAV.net]
- っていうか、>>789みたいなコードが警告されるのはむしろ当たり前。
outの変数を使いまわしするなんてよい作法とは言えないからだ
- 843 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:39:20.19 ID:DYwliZHB.net]
- ジジイはトンチンカンすぎてダメだな
いつまでたっても成長しない
- 844 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:40:20.48 ID:MnRWcQoL.net]
- 使い回しとかほんとに意味わかってないんだな w
- 845 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:41:00.76 ID:roepBgfb.net]
- >>825
使うからoutしてんじゃん ガイジが過ぎるぞ自重しろ
- 846 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:41:07.53 ID:+cAt7TAV.net]
- しかし、バグバグいってる連中はちゃんとググって解説記事読んでるのかねw
こんなのが同僚だったら張り倒すよw
- 847 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:41:48.65 ID:DYwliZHB.net]
- ジジイは失礼なので取り消しておじいちゃんにまた戻す
- 848 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:42:50.83 ID:roepBgfb.net]
- >>829
ありえねーレベルのアホだなw outしたの使わないでどーすんだよ
- 849 名前:789 mailto:sage [2018/03/30(金) 21:45:40.64 ID:QYlpMr10.net]
- >>805
参考ページのご紹介どうもありがとうございます。 このページは拝見したのですが、問題の解決に至る道筋を見つけることができませんでした。 (確認したページのうち主要なものはあらかじめお伝えしておくべきだったかもしれません。 申し訳ありません。) 質問させていただいている身でこのようなことをお願いするのは大変心苦しいのですが、 もしお時間に余裕がありましたら具体的な修正方法のご説明をお願いすることはできませんでしょうか。 ご説明の中で私の疑問を理解していただければ幸いですし、 いただいたご説明で問題が解決できれば願ってもないことです。 煽るような文章で答えを引き出すような形になってしまい大変申し訳ありませんが、 私の説明能力の無さゆえの苦肉の策ということで、どうぞ失礼をお許しください。
- 850 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:46:08.85 ID:rq+fXpbo.net]
- ガイジでいいだろ
本人もそう言ってる
- 851 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 21:49:29.47 ID:DYwliZHB.net]
- >>832
とりあえず別のことに時間使ったほうがいいよ ひまーな時に思い出して修正されたか確かめるといい うちじゃ全然再現されないからどうしようもない
- 852 名前:789 mailto:sage [2018/03/30(金) 22:03:34.15 ID:QYlpMr10.net]
- ID:+cAt7TAV 様
警告の抑制方法についてご案内いただきどうもありがとうございます。 他に解決策が見つからなければマイクロソフトに問題を報告し、 マイクロソフトに修正していただけるまで教えていただいた方法で警告を抑制したいと思います。 ただ、他の方にいただいたレスも拝見し、やはり私としてはこのメッセージが適切であるとは確信できずにいます。 もしお時間に余裕がありましたら、>>832のお願いを ID:+cAt7TAV 様にもさせていただけないでしょうか。 お願いの方法も内容も大変失礼なもので申し訳ないのですが、どうぞお許しください。
- 853 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:06:55.10 ID:+cAt7TAV.net]
- まあ質問者がここのお馬鹿さんを代表してMSに質問してみたらいいと思う。
恥をかくのも勉強のうちかも 個人的にはちょっと調べてちょっと自分の頭で考えれば分かるはずのことを理解しようとせず、 「このバグどうなってんだコラー」なんて突撃するのは愚の骨頂にしか思えんけど つーか、ちょっと考えれば、この警告は余計なお世話のように思えて 一定の合理性があることぐらいすぐ分かると思うんだけど、ガチで分からない奴もいるんだね世の中には
- 854 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:10:00.19 ID:+cAt7TAV.net]
- >>835
だから、警告の意図はout変数を値を戻す以上の目的で使うのはよい作法じゃないよ、 ってことでしょう。 外側のブロックでも値を使いたいなら別の変数にコピーしてねと
- 855 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:14:49.66 ID:roepBgfb.net]
- は?こんなのバグだろ
- 856 名前:789 mailto:sage [2018/03/30(金) 22:22:13.29 ID:QYlpMr10.net]
- たくさんご反応をいただきどうもありがとうございます。
とても勉強させていただいています。 お返事が遅くなってしまい申し訳ありません。 予想以上のレスの多さでこの話題に触れてくださった方すべてにお返事するのが難しくなってきましたので、 大変勝手ながら、これ以降、直接私の書き込みにアンカーを付けてくださった方と 特に教えていただきたいことがある方へのメッセージのみ書き込みたいと思います。どうぞよろしくお願いします。 >>825 皆さんのお話を聞いて、コードの無作法が警告メッセージの直接または間接的な原因なのではということを かなり感じてきました。ただ、作法に関する私の理解が不十分でどうにも宙に浮いたような感覚なのです。 もしよろしければ、>>810考えについてコメントなどをいただくことはできないでしょうか。よろしくお願いいたします。
- 857 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:29:53.50 ID:MnRWcQoL.net]
- >>836
どう書けばいいのかを書いてからほざけば? w
- 858 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:30:40.89 ID:CA+6T7VZ.net]
- トンチンチン
- 859 名前:789 mailto:sage [2018/03/30(金) 22:32:45.82 ID:QYlpMr10.net]
- >>824
レスどうもありがとうございます。 やはりバグと考えるのが妥当なのかなという気持ちが強くなってきました。 これだけたくさんのレスをいただき、バグであろうというご意見もいただいているので もうマイクロソフトに報告を出してしまってもいいかなという気もしているのですが、 一応>>803に書いたとおり一日置いてから報告しようかと思います。 ただバクだとしても、このバグが今まで大した問題にならなかったということは 再現するためのコードに多かれ少なかれ作法の問題があるのではという気持ちもあり、 色々と勉強させていただきたいと考えています。
- 860 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 22:37:24.89 ID:MUNCeVRK.net]
- >>842
現象再現するソリューション一式をアップローダにあげたら何か進展あるかもよ
- 861 名前:デフォルトの名無しさん mailto:sage [2018/03/30(金) 23:04:09.64 ID:L1eApEVG.net]
- >>789
以下の書き方ってビルド通るっけ? ビルドエラーの時は原因と関係ない警告でたりするからmessage=nullみたいに何かいれれば解決したりしない? string message; if (x == 1) getMessage1(out message); else getMessage2(out message); Console.WriteLine(message); 後outメソッドではなく、戻り値で文字列を返すのが普通 根本的な解決じゃないけどoutキーワードを使わないgetに直せば警告を消せる
- 862 名前:789 mailto:sage [2018/03/30(金) 23:06:10.14 ID:QYlpMr10.net]
- >>834
アドバイスとご検証どうもありがとうございます。 再現性の問題については、警告のカスタム規則セットなどは使っていないつもりなのですが、 そのあたりの理解が不十分でお伝えすべきことが不足してしまっているのかも知れません。 念のため、解説ページなどを読むなどしてもう一度確認したいと思います。 また、とりあえず別のことに時間をということについて、お心遣いをとても嬉しく思います。 ただ、せっかくこれだけの反応をいただけたのだからできる限りのことを吸収して…という 殊勝(?)な考え以上に、私が感じた問題に多くの方が興味を持ってくださったことが嬉しく、 娯楽という意味でもう少しこの場にお邪魔させていただきたいと思っています。
- 863 名前:789 mailto:sage [2018/03/30(金) 23:33:26.14 ID:QYlpMr10.net]
- >>837
大変勉強になるコメントどうもありがとうございます。この観点はまったく気づいていませんでした。 確かにout変数の使い道をそこまで限定することで警告は表示されなくなりますし、 この制限はプログラムの保守性を高める効果もありそうです。 これで私個人の、警告が表示されて気持ちが悪いという問題は解決したように思います。 どうもありがとうございます。 ただそれはそれとして、今回の警告はやはり意図されたものではないと思うのですが、 もしよければこの点についてもご意見をお聞かせいただけないでしょうか。 私がこのように思うのは、以下のコードで警告が表示されないというところにあります。
- 864 名前:789 mailto:sage [2018/03/30(金) 23:33:45.21 ID:QYlpMr10.net]
- bool tryGetMessage1(int _x, out string _message)
{ if (_x == 1) { _message = "x is 1."; return true; } else { _message = default(string); return false; } } void getMessage2(out string _message) => _message = "x is not 1."; int x = 1; if (!tryGetMessage1(x, out string message)) { getMessage2(out message); } Console.WriteLine(message);
- 865 名前:789 mailto:sage [2018/03/30(金) 23:34:33.28 ID:QYlpMr10.net]
- >>837の制限に従えば上のプログラムのifの部分は次のように修正されるべきです。
しかしこの例では警告文表示されず、従って警告文は>>837の制限を課すためのものではないと思われるので、 「今回の警告は意図されたものではない」という結論に至りました。 int x = 1; string message; if (tryGetMessage1(x, out string message1)) { message = message1; } else { getMessage2(out string message2); message = message2; }
- 866 名前:789 mailto:sage [2018/03/30(金) 23:56:19.78 ID:QYlpMr10.net]
- >>843
アドバイスどうもありがとうございます。 今更ですが、警告が表示されるコードを含むソリューションをアップロードしてみました。 https://dotup.org/uploda/dotup.org1498398.7z.html
- 867 名前:789 mailto:sage [2018/03/31(土) 00:03:56.30 ID:a/TgDl8y.net]
- >>844
レスどうもありがとうございます。 お書きいただいたコードでは、ビルドは通りますが>>789と同じ警告文が表示されました。 これは message = null と書き換えても同じようです。 戻り値で文字を返すべきだというのはおっしゃるとおりだと思います。 ただ>>796のような理由もあり、out変数でも警告が表示されずにすまないか思って質問させていただきました。
- 868 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:04:10.00 ID:r1Fcmmf3.net]
- >>849
えー、このスレで解決しないといけないの? 初心者スレの領域越えてない?
- 869 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:04:41.30 ID:r1Fcmmf3.net]
- しかも無駄に長文だしちょっと控えてよ
- 870 名前:789 mailto:sage [2018/03/31(土) 00:25:14.41 ID:a/TgDl8y.net]
- >>851 >>852
申し訳ありません。 もともと不具合なのかどうかの判断もできずこのスレで質問させていただきましたが、 IDEの不具合であるとすれば、おっしゃるとおりここで解決を目指すことではないと思います。 ただ、もしこの問題に興味を持ってくださる方がいて、問題が再現されないようであれば、 >>849のソリューションファイルでもお試しいただければ嬉しく思います。 これ以降は、「IDEのバグ修正」という方向の話について私の方から書き込むことは控えたいと思います。 しかし、すでに私が書き込んでしまった内容にお返事をいただいた際のレスについてはお許しください。 以上、長々と失礼いいたしました。
- 871 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 00:25:16.57 ID:p9TP0
]
- [ここ壊れてます]
- 872 名前:5UX.net mailto: >>806
Visual Studio 2017のバージョンは? 最新版(15.6.4)で>>849のソリューションビルドしたけど、IDE0018は出なかった。 後、ID:+cAt7TAVは頓珍漢な上に指摘を一切聞かない人だから無視した方が良いよ。 [] - [ここ壊れてます]
- 873 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 02:11:28.67 ID:r7WFMRHn.net]
- >> 853
Visual Studio 15.5.7 だけど IDE0018 は出なかった リファクタリングしたらどうなるの? https://codezine.jp/article/detail/9861?p=4
- 874 名前:789 mailto:sage [2018/03/31(土) 08:06:10.45 ID:Mw1mdL1r.net]
- レスどうもありがとうございます。お返事が遅くなってしまい申し訳ありません。
日中はVisual Studioを使えそうになく、申し訳ないのですがきちんとしたお返事は夜になってしまうと思います。 中途半端な内容になってしまいますが、ひとまずいただいたレスにお返事したいと思います。 後ほど改めて書き込みますので、失礼をお許しください。 >>854 Visual Studio 2017のバージョンについてご報告できておらず申し訳ありません。 恥ずかしいことに最新版を使うという意識も持てていなかったので、古いバージョンを使っているかも知れません。 (ただ、古いバージョンで検証して下さった>>855様もIDE0018は出なかったとのことなので、 なにか他のところに問題があるのかなとも思っています。) >>855 ご検証どうもありがとうございます。 >>854様の結果と合わせて2つのバージョンで再現しなかったとのことなので、 私は何かとても基本的なところで間違いを犯してしまっているのかも知れません。 リファクタリング機能については、ご指摘をいただいた上で試したわけではないので後でまた確認しようと思いますが、 問題の箇所では動作しなかったように記憶しています。
- 875 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:08:51.24 ID:r1Fcmmf3.net]
- >>855
不具合報告スレでも立ててそっちでやれよ
- 876 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:43:46.87 ID:+WsDcfNX.net]
- 別にいいよ
片っ端から透明あぼーんするだけだし
- 877 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 08:51:48.82 ID:OaeapR1O.net]
- >>836
> 「このバグどうなってんだコラー」なんて突撃するのは愚の骨頂にしか思えんけど 1年も前にバグと判明して解決してる https://developercommunity.visualstudio.com/content/problem/8924/ide0018-false-suggestion.html > 恥をかくのも勉強のうちかも 実践乙 w
- 878 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:03:24.19 ID:9aphfiP0.net]
- >>789
正解だけ教える bool TryGetMessage1(out string x) { x = "1"; return true; } bool TryGetMessage2(out string x) { x = "2"; return true; } string GetMessage(int x) { if (x == 1 && TryGetMessage1(out var s)) return s; if (TryGetMessage2(out var s)) return s; return null; } WriteLine(GetMessage(x));
- 879 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 09:07:37.87 ID:r1Fcmmf3.net]
- >>860
これが恥の上塗りか
- 880 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 12:42:07.43 ID:x9Yyswdb.net]
- (結局調べれば分かることで、ググれというレスを罵倒してた奴らは今どんな心境なんだろう)
- 881 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 12:44:49.99 ID:LMRl+wCl.net]
- >>860
これは主旨が違うじゃん
- 882 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 12:45:43.39 ID:O8yBke8L.net]
- ワッチョイないからNGがタルい
- 883 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:03:27.79 ID:9aphfiP0.net]
- >>863
もともと修正方法教えろって言ってるんだからこれが正解だよ
- 884 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:09:24.39 ID:LMRl+wCl.net]
- ワッチョイ必要だな
- 885 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:32:48.06 ID:OaeapR1O.net]
- >>862
> (結局調べれば分かることで、ググれというレスを罵倒してた奴らは今どんな心境なんだろう) 罵倒されてもしょうがないよね って感じですけど? しかも恥の上塗りしてる奴までいるし w
- 886 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 13:32:50.70 ID:IoBwmw2C.net]
- >>865
>>789と出力結果が違うのに正解とか何ほざいてんのw
- 887 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:17:13.71 ID:G6tH+bWp.net]
- FirstOrDefaultについて教えて下さい。
List<T>をFirstOrDefaultで条件のものを返してきた場合、 それは参照先のアドレスが返ってくるのでしょうか? それとも写像としてコピーされたものが返ってくるのでしょうか 取り出したものの値を更新したときに、元のListは更新されますか?
- 888 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:28:08.82 ID:IoBwmw2C.net]
- 数分で試せることをなぜやらない
- 889 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:34:02.83 ID:r1Fcmmf3.net]
- List<int>とかとList<MyClass>とかで違うよね的な?
- 890 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:39:45.66 ID:UG1yVXDX.net]
- やってることは同じ(値をコピーしてくる)だけど結果が違ってくると言うこと
- 891 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 15:48:48.09 ID:feZwED6X.net]
- 教習所の教官「生徒が減ったので褒めちぎったら運転技術は向上!合格率も事故率も改善!俺はなんで今まで怒ってたんやろう?」 [274141358]
https://leia.5ch.net/test/read.cgi/poverty/1522384054/ 5 名前:番組の途中ですがアフィサイトへの転載は禁止です (ワッチョイWW d3e8-gBuS)[] 投稿日:2018/03/30(金) 13:30:33.99 ID:F53Z/ySd0 よく考えたら本当にジャップ案件だよな 初心者に対して怒鳴り散らしてどこが悪いかは一切教えない 部活と一緒だわ
- 892 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:04:38.32 ID:fwgHW5nR.net]
- >>869
List<T>とかHashSet<T>とか初めから使えるやつはTが値型か参照型かだけ考えればいいよ あと「Listが更新されるか」という言い方はTが参照型だと意味が曖昧になるから改めたほうがいいかと ふと↓こんなのが頭をよぎったけど意味が分からなければスルーしておくれ class MyList<T> : IList<T> where T : ICloneable { ... }
- 893 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:14:25.21 ID:UG1yVXDX.net]
- IListは実装したことないな
実装例は見かけるけどOSSで実装してるのは見かけない
- 894 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:27:15.53 ID:fwgHW5nR.net]
- >>875
>>874でIEnumerableでもICollectionでもなくIListを選んだのには深い理由があるのよ 文字数という理由がね まあIsReadOnlyプロパティとかどうかとは思うよ
- 895 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:49:04.27 ID:G6tH+bWp.net]
- ご指導ありがとうございます
Tが値型か参照型かというところが意識から抜けておりました 適当に組んで試してみて、その違いも確認できました
- 896 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 16:55:49.06 ID:tzO3VEeA.net]
- モニタの解像度によらず実寸A4サイズのウィンドウを開いて2pの×を座標ランダムに20表示
それをクリックするというアプリを開発しようと思ってます。 最初モニタの解像度取得してモニタの実寸をユーザーが入力して、 そこからA4サイズは何ドットになるか計算してというのをフォームで作り始めたんだけど、 これだと×や他のボタンも全て計算して調整しなければいけないのかと気づきました。 WPFで開発するとこういうモニタサイズにかかわらず実寸で表示って簡単に処理できるの?
- 897 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:16:01.57 ID:l8CCe9Lg.net]
- 実寸はモニタ変更するたび変えないと駄目じゃん
フルHDのスマホとモニタじゃちげーし
- 898 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:27:51.62 ID:47Bv8u8/.net]
- ユーザーが勝手にWindowsのDPI設定を変更してない限りはできるけど、
今更オワコンWPFに手を出すくらいならHTMLで作ることを強くお勧めする CSSならmm単位で実寸指定できるからWPFよりも簡単だよ
- 899 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:34:37.92 ID:FNt76Udy.net]
- >>868
お前は返しまでくだらないな
- 900 名前:デフォルトの名無しさん [2018/03/31(土) 17:37:43.10 ID:GqrQqkMZ.net]
- イベント処理でキー読み込むのと、ただ単にキー読み込むのではどう違うの?
実行すると速度が全然違うんだけど...
- 901 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:38:31.40 ID:io+mDfEy.net]
- 例の教育心理系君か
AWS S3にHTML/CSS/JavaScript置いてURL教えるのが一番手っ取り早いだろうな 結果もJavaScriptからS3 APIで保存するようにすれば完全サーバーレスだ その程度なら料金は月10円もしない
- 902 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 17:58:49.73 ID:tzO3VEeA.net]
- ご無沙汰しておりました。
教育心理系のものです。 ようやっとC#の本読み終えて作り始めましたけど、 実世界での用紙とか×とかの大きさを統一しないと実験結果に影響が出るので実o単位で画面表示が必要なことに気づきました。 a. ディスプレイ解像度はC#で取得できたので、後は実モニタサイズをユーザーに入力してもらえば、小学生の算数レベルでA4用紙のウィドウは作れる でいいかと思ったんだけど、 そうすると×の大きさや当たり判定の範囲まですべて計算しなければいけず、 なんかあほらしいことをやってるのか?? と疑問に思ってきました。 ブラウザ上に表示するとユーザー側でctrl+スクロールで表示の大きさ変えられちゃうんですよね。 実世界でのo単位での大きさを固定したいってあまりなさそうな要求だし、aでやってくしかないのかなぁ。
|

|