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
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でやってくしかないのかなぁ。
903 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:02:33.45 ID:UG1yVXDX.net] そこまでやるなら被験者とモニターの距離も計測して一定にしないと…
904 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:12:00.40 ID:NJrC8qba.net] なぁに網膜に直接書き込んでしまえばw
905 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:20:56.75 ID:/DPGnFFi.net] いいね!
906 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:35:00.07 ID:tzO3VEeA.net] >>885 その通りですね。 同じような実験で被験者の姿勢によりスコアが変わるらしいので。
907 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:42:00.60 ID:AhiWvdUc.net] >>878 WpfにはViewBoxと言う拡大縮小自在なモジュール在るから上手くやりゃなんとかなるよ
908 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 18:59:42.15 ID:tzO3VEeA.net] >>889 ViewBox調べてみます。 少しフォームベースで初めてみたんですけど、 これから勉強するならWpfとフォームどちらで作るのがおすすめですか? フォームでもゴリゴリやっていけば狙ったものはつくれそうな感じはするんですけど、 wpfのほうがいいというのも聞いたりして悩み中です。
909 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 19:11:47.57 ID:AhiWvdUc.net] >>890 件の用途だとformsは厳しいと思われるのでwpfを奨めるが、情報少ないから習得は簡単じゃないと思うよ もし、不特定多数への配布を考えているならwpfの進化形であるUWPを使うのを奨める
910 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 19:59:43.42 ID:kEu+XyQj.net] >>882 ただ単に読み込むのはどのタイミングでどうやってるの?
911 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:17:53.84 ID:tzO3VEeA.net] >>891 wpf情報少ないんですか・・・。 UWPも書籍はまだ少ないみたいですね。 ど素人なので学習のための情報は欲しいなぁ。 フォームでも×を線で描いてしまえばなんとかなりそうなんですけど、 拙速コードでも早期論文化を目指してフォームでやるか 将来のためにUWPを勉強するか悩みますね。
912 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 20:26:11.30 ID:Tt7WJg3O.net] >>893 WPFでもFormでもスケーリングはページ変換使うだけだから難しくないと思う。 ■ Formを使う場合の問題点 - 自動でスケーリングされるのはグラフィックだけ。コントロールやそのフォントは コードでスケーリングや座標変換する必要がある ■ WPFを使う場合の問題点 - GDI+ほど簡単じゃない - 多数の図形を描画する場合はパフォーマンスが問題になる
913 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:01:55.63 ID:l8CCe9Lg.net] 何処の座標を実寸通りにしたいか? だけでformでいいだろ なんでボタンまでやる必要があるんだ?
914 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:04:08
] [ここ壊れてます]
915 名前:.01 ID:tzO3VEeA.net mailto: A4相当の大きさのウィンドウ表示って調べてみると難しいんですね。 DPI取得もなんかOSで100%以外の拡大表示にしてると当てにならないみたいだし、 ディスプレイの大きさはユーザーが実測値入力で妥協してももいいのかな・・・。 [] [ここ壊れてます]
916 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:09:29.60 ID:g9lQ5N9X.net] 厳密な同環境を求めてるみたいだが、 マウスの移動速度で無理が出ると思う
917 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:25:11.42 ID:l8CCe9Lg.net] >>896 だからできねぇって スマホもフルhdだろ? モニタもフルhdだろ?
918 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:26:20.15 ID:Tt7WJg3O.net] >>896 一応モニター自身が持つEDIDとかいう情報に表示領域の物理サイズが含まれているらしい WPFはどうだったか知らんけど、FormはOSのDPI設定を無視して指定ピクセルサイズでFormを 表示させられると思った。 だからDPIさえ分かれば目的の物理サイズのウィンドウを表示することは難しくないはず
919 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:40:05.11 ID:IoBwmw2C.net] >>898 さっきからスマホスマホうるさい WPFの時点でデスクトップWindows固定だって理解できないの?
920 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:48:21.76 ID:r1Fcmmf3.net] >>900 えー、だから解像度に対するモニタのサイズが決定しねーと駄目でしょって話何だけど? スマホを例に挙げたのはあんな小さいなりして解像度はフルhdだから
921 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:55:14.06 ID:IoBwmw2C.net] ユーザーがモニタサイズを入力って何回も書いてあるじゃん それじゃ不満なの?
922 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 22:55:29.08 ID:vbALr7Yq.net] デスクトプPCとタブレットPCにでもしときゃ良いだろうに
923 名前:デフォルトの名無しさん mailto:sage [2018/03/31(土) 23:28:19.33 ID:r1Fcmmf3.net] >>902 逆にそこまで決定してると疑問が出るのが謎
924 名前:デフォルトの名無しさん [2018/03/31(土) 23:45:29.31 ID:U08lgUq5.net] やっぱりC#もバカばかりなんだなあ 現代の三大バカ ペチパー、ジャバパー、シーシャーパー で決定やねw
925 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 00:58:58.57 ID:AmnK79El.net] 教えてください。 以下のような事をしたいと思います。 再現のために最低限必要なところだけを抜き出しているので、これだけだと意味が不明ですが、 同じような処理があちこちにあるので処理をまとめるため、このような事をしています。 public void Execute( string sql ) { using (var command = new System.Data.SqlClient.SqlCommand(sql.ToString() )) { } } これをビルドしても警告等は出ませんが、コード分析の実行を行うと SqlCommand のところで CA2100 の警告が出ます。意味は以下のページの通りです。 https://msdn.microsoft.com/ja-jp/library/ms182310.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3 要するに関数パラメータで受け取った文字列にはなにが含まれているのか分からないので危ないよ、と言われているのだと思いますが 出来れば上の関数を利用する形式で進めたいと思います。 この形式のまま CA2100 を回避する手段のアドバイスをいただけると助かります。
926 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:09:42.05 ID:v0T9GXCI.net] >>906 生のテキストを送るなバカ PrepareなりSqlParameterなり使ってSQL文とデータを分離しろバカ 詳しくは「C# インジェクション対策」でググれバカ
927 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:10:28.60 ID:RE1ojOXr.net] MDT_RAW_DPIで物理的なppiに近い値が返ってくるからそれ使えで済む話、で終われば良いんだが あれちゃんとした値が返ってくる保証が無さそうなのがねー
928 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:21:16.42 ID:GUPc3ba+.net] C#は、C++を難しく感じる人が使う言語だから。
929 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:26:38.59 ID:Cu8+FDkh.net] 文法だけならC言語が一番好き クラス以降いらねー
930 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:39:12.76 ID:AmnK79El.net] >>907 それはやってる。 再現する最低限までコードを削った結果としてその部分が見えなくなってるだけ。
931 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:43:15.77 ID:UKmXoisc.net] >>906 なんでToStringしてんの?
932 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 01:45:10.58 ID:AmnK79El.net] >>912 あ。ごめん。 いろいろ試してたときのコードが残ってました。 .ToString() がなくても再現します。実際にもそんな事してません。
933 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 02:06:42.96 ID:1BdiydkK.net] 急にタメ語になるのほんと草
934 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 02:10:36.19 ID:Cu8+FDkh.net] >>911 えー? でも出てる警告ってSQLインジェクションの警告ちゃうのん?
935 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 04:52:35.48 ID:fKZaPfKf.net] >>911 ほんとにやってる? このコードだけ出されても警告でるに決まってるし、リンク先のような対策しろとしか言えない
936 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 05:05:19.22 ID:fKZaPfKf.net] >>906 一応コード分析で警告表示させないようにするだけでいいなら、SuppressMessage属性を付ければでなくなる チームでやってるならメンバー全員の許可は必須
937 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 09:03:31.17 ID:gIH0xNQX.net] >>906 ちゃんとリンク先読んでる? メソッドに渡された文字列引数から構築された文字列を使用して IDbCommand.CommandText プロパティが設定されています。 って書いてあるんだからSqlCommamd.CommandTextに外部からもらった文字列を設定した時点でその警告になるよ パラメーター云々はその後の話 その形式のまま使いたいなら>>917 が書いてる通り抑止するしかない ちゃんとやるならやりたいこと毎に関数作ってSqlCommamd.CommandTextに固定の文字列を設定するようにしないとダメ
938 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 10:20:28.44 ID:JxTU817j.net] ストアド使いなさいよ
939 名前:906 mailto:sage [2018/04/01(日) 13:39:58.60 ID:AmnK79El.net] レスをくださった皆さん、ありがとうございます。 >>917 現状では、 教えていただいた属性をつける方法を相談して、NG ならこのまま警告を残す。って方向かなと思います。 一応、先のリンク先の以下に当てはまるのでセキュリティ的には問題ないと考えます。 >警告を抑制する状況 >コマンド テキストにユーザー入力が含まれない場合は、この規則による警告を抑制しても安全です。 >>918 >ちゃんとやるならやりたいこと毎に関数作って 同じような処理があちこちにあるのを嫌って、906 のように出来ないかなと考えました。 ただ、一般的なやり方ではなかったかも知れません。 >>919 ストアドとは、たとえばこのリンク先の事で正しいですか。 https://code.msdn.microsoft.com/windowsdesktop/DataAccess-howto-32c91bf0 自分が試した限りでは CA2100 が出ました。 いままではストアドでも execute 付けて普通に SQL 文として実行してましたが、こういう方法もあったのだと勉強になりました。 またストアドはローカルDB では問題ないのですが、基幹DB では使わせてもらえないようです。軽く聞いてみた範囲での事ですが。
940 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:26:06.48 ID:+XMM3OWE.net] 20年以上前にcを使っていたことがあるという状態で、c#を独学で学び始めたところです 極めて初歩的な話だとは思いますが、どうしてもわからないので教えてください 下記のコードで、「未割り当てのローカル変数'num'が使用されました」というエラーが出て コンパイルできません。 try-catch構文の後の Console.WriteLine(...) を、try節の中に中に入れるとコンパイルが できるのですが、try - catch構文以降は、変数のスコープが失われてしまうということなの でしょうか。 using System; class ExceptionTest { static void Main() { int num; string s; try { Console.Write("enter a number : "); s = Console.ReadLine(); num = Int32.Parse(s); } catch(Exception e) { Console.WriteLine(e.Message); } Console.WriteLine("Your number : " + num); } }
941 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:40:32.32 ID:ut+4lapb.net] >>921 もしtryブロックの中で例外が発生した場合、 > Console.WriteLine("Your number : " + num); この行に到達した時点でnumの値はどうなってるでしょうか?
942 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:48:12.04 ID:GWiU0YBt.net] 未定義
943 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:50:28.41 ID:JxTU817j.net] >>921 null許容型にするか、素直に0で初期化しておく
944 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:50:55.68 ID:JxTU817j.net] >>920 ストアドはそのとおりです
945 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 18:51:15.76 ID:/o+55+4t.net] >>921 スコープの問題ではなく、try節のnum代入に到達しない可能性があるから 文脈からすれば仰る様にnum出力をtry節に含める、あるいはint num = 0;等… C#はそういうの然り、C/C++よりガチガチに厳しい
946 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 19:28:44.37 ID:fxgoPYx5.net] そのうちc#にもdeferが導入されるみたいだけどそういうのでボコボココンパイルエラーが出るようになるのか
947 名前:デフォルトの名無しさん [2018/04/01(日) 19:39:39.66 ID:xe0krAxA.net] >>926 C/C++でだって未初期化の値を使うコードを書くべきじゃ無いけどな
948 名前:906 mailto:sage [2018/04/01(日) 21:34:56.28 ID:AmnK79El.net] >>925 thx
949 名前:デフォルトの名無しさん mailto:sage [2018/04/01(日) 23:12:20.14 ID:ECJY99tL.net] 未初期化の(可能性がある)変数は、参照できない。バグ
950 名前:デフォルトの名無しさん [2018/04/02(月) 12:27:49.40 ID:7SJzoey2.net] 必ず初期化されるやんC#
951 名前:921 mailto:sage [2018/04/02(月) 12:31:36.23 ID:sF1TxYYm.net] 皆様ありがとうございます 変数numが定義されていないというエラーだとばかり思っていたのですが、初期化されていないという意味だったのですね 理解できました
952 名前:921 mailto:sage [2018/04/02(月) 12:37:01.02 ID:sF1TxYYm.net] >>931 私もそう思っていたのですが、違うのでしょうか 手元に書籍がないので、参考にしている本にはなんと書いてあるか不明ですが、 c#では整数型の変数は自動的に0で初期化される、と書いているサイトも あるようです
953 名前:921 mailto:sage [2018/04/02(月) 12:39:19.98 ID:sF1TxYYm.net] >>933 訂正 クラスのフィールド変数は初期化されるけれど、メソッド内のローカル変数は初期化されないのですね 誤解していました
954 名前:デフォルトの名無しさん [2018/04/02(月) 18:07:44.63 ID:6bvpmFc5.net] C#技術者は他の言語に比べて年収はいいんですか?
955 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 18:13:31.05 ID:XIES5nIM.net] >>935 ここが技術板なのでプログラマ板で聞いてください
956 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 20:42:37.26 ID:6Vp1brVM.net] winformsのTableLayoutPanelで2つの列を作成したとき、プログラムの実行中に左右の幅をマウスで調整することはできますか?
957 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 20:44:29.22 ID:MPXX1X60.net] >>937 どのコントロールでもMouseDown/Move/UpイベントとSize指定ができればいくらでもできる
958 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 22:39:46.16 ID:zzbs2RRz.net] 解釈の原因は解釈者が持つ自分ルール。解釈の自由は責任を伴う 言葉風紀世相の乱れはそう感じる人の心の乱れの自己投影。人は鏡 憤怒は一時の狂気、無知無能の自己証明。中途半端な知識主ほど激昂 「真実は一つ」は錯誤。執着する者ほど矛盾を体験(争い煩悩) 他人に不自由(制約)を与えれば己も不自由(不快)を得る 問題解決力の乏しい者ほど自己防衛の為に礼儀作法マナーを要求 情報分析力の低い者ほどデマ宗教フェイク疑似科学に感化洗脳 自己肯定感の欠けた者ほど「己の知見こそ全で真」に自己陶酔 人生経験の少ない者ほど嫌いキモイ怖いウザイ憎い想定外を体験 キリスト教は世界最大のカルト。聖書は史上最も売れているト本 全ては必然。偶然 奇跡 理不尽 不条理は思考停止 視野狭窄の産物 人生存在現象に元々意味価値理由目的義務使命はない 宗教民族領土貧困は争いの原因ではなく口実動機言訳(原因帰属錯覚) 虐め差別犯罪テロ紛争は根絶可能。必要なのは適切十分な高度教育 体罰は指導力問題解決力の乏しい教育素人の独善甘え怠慢責任転嫁 死刑は民度の低い排他的集団リンチ殺人。「死ねば償える」は偽善 核武装論は人間不信と劣等感に苛まれた臆病な外交素人の精神安定剤 投票率低下は社会成熟の徴候。奇人変人の当選は議員数過多の証左 感情自己責任論 〜学校では教えない合理主義哲学〜 m9`・ω・)
959 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:16:17.88 ID:VPR2x1c1.net] 2chビューワのスレ欄のように、listViewでマウスオーバーするとその行の文字にアンダーラインが入るようにしたいです。 やってみると、以下のサイトにそれに近い方法がけいさいされていたのですが、サイトに指摘があるように画面がちらつきます。 ListViewのアイテムがポイントで選択、シングルクリックでアクティブにできるようにする - .NET Tips (VB.NET,C#...) https://dobon.net/vb/dotnet/control/lvpointselection.html そのため、ちらつきを抑制する方法を探したところ、いろいろ出てきましたが、どこにどのコードを記述すればいいのかさっぱりわかりませんでした。 下記サイトが一番丁寧な気がしましたが、これを参考にしてもフォーム上にlistviewが出てきません。 ListViewを更新したときのちらつきを抑制する(C#メモ): amongの雑記 どうすれば、ちらつきを抑えたlistviewを作成することができるのでしょうか?教えてください。
960 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:17:15.94 ID:VPR2x1c1.net] すいません、 >ListViewを更新したときのちらつきを抑制する(C#メモ): amongの雑記 についてはNGワードとなってしまいました 下記のURLのスペースを抜いたものです。 amonution.sb lo.jp/article/45398035.html
961 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:31:51.83 ID:MPXX1X60.net] >>940 これもどのコントロールでも同じなんだがコントロールにダブルバッファのプロパティを付け加えた新しいコントロールを作ってそれを使う おなじdobonのサイトに「リフレクションを使って、DoubleBufferedプロパティにアクセスする」もある https://dobon.net/vb/dotnet/control/doublebuffered.html
962 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:50:34.23 ID:VPR2x1c1.net] >>942 返
963 名前:信ありがとうございます。 初心者なもので >ダブルバッファのプロパティを付け加えた新しいコントロールを作ってそれを使う これの方法がよくわからないのです。 そのページも見たのですが、 >public class DoubleBufferingListView : ListView 以下の部分を全体のコードのどこに記述ればいいのか、記述したあとそれをどうやって使うのか、というのがそもそもわからないのです。 [] [ここ壊れてます]
964 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:53:34.69 ID:6Vp1brVM.net] >>938 すみません、もう少し詳しくおしえていただけないでしょうか? もとの文では分かりづらかったかもしれませんが、コントロール中の左右の幅(比率)を変更したいです。 (デザイナ上でやるように、つまみを掴んで左右に動かすイメージです)
965 名前:デフォルトの名無しさん mailto:sage [2018/04/02(月) 23:54:11.10 ID:VPR2x1c1.net] とりあえず、namespaceの直下に貼り付けてみてビルド→うーん、エラーか public partial class Form1 : Formの下に貼り付けてみる→動いたが、じゃあ次に何をすればいいのかわからん。 こんなレベルです。
966 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 00:03:03.60 ID:BdcH2dSM.net] >>943 クラスとして記述してデザイナに表示されなければ新しく作ったコントロールを含めたアセンブリを一度ビルドする dobonのどこかにもやり方あるんじゃないの >>944 MouseDown: マウスが押されたe.Location(をスクリーン座標に変える)を変数に記録する 決められた位置で押された場合にフラグをセットする MouseMove: フラグがセットされていれば現在の座標と記録していた座標の差分を計算してSizeを変更する MouseUp: フラグを破棄する
967 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 00:16:48.21 ID:Bkifwxhh.net] >>946 public partial class Form1 : Formの直下に記述して、F7を押してビルドして、form1.cs[デザイン]タブを開いてみましたが、 特に何か増えたような様子はありませんでした。 ご指摘事項を正しく実行できてますでしょうか?
968 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 00:25:08.53 ID:h9dQUiAD.net] >>946 >>937 です。 分かりやすく説明ありがとうございました。明日すぐ実装してみます。
969 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 10:13:42.24 ID:Bkifwxhh.net] すいません、これで解決しました。 System.Windows.Forms.Control のダブルバッファリングをさくっと有効にする - kawanon d.hatena.ne.jp/m_kawanon/20100708/1278587297
970 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 21:10:02.31 ID:tN12x087.net] リッチテキストボックスのスクロールバーだけ、ドラッグしてもバーがついてこないのですが、 私だけでしょうか?
971 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 21:29:32.68 ID:vN2mpw+F.net] 業務用アプリをオサレな画面にしたいんだけどWPF使ってそこらのテーマ拾ってくるのが手っ取り早いかね
972 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 23:35:42.00 ID:VCT3rU1H.net] >>951 WPFのテーマなんてクッソ古臭いデザインの10年近く前からメンテされてないのしかないぞ WebかUWPで今風のフラットデザインにしましょう
973 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 23:39:30.70 ID:LPfCppd2.net] デザインパターンって大事ですか?
974 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 23:42:17.43 ID:TkuXyycY.net] 普通は大事じゃない メジャーな一部の奴だけなぞっておけばいい
975 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 00:15:51.60 ID:Lt0+eORa.net] >>951 Material Design In XAML Toolkitが今風で良い感じだよ。 タブが必要なら同じ作者のDragablz Tab Controlも併せてどうぞ。
976 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 00:29:06.64 ID:scqJAZTy.net] >>953 全身シングルトンで武装して備えろ
977 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 01:35:51.04 ID:gGAYD4mI.net] ざっと知っておくに越した事は無い 使うかどうかは別としてね むしろ、「これはやるな」っていうアンチパターンを覚えた方が良いかもだ
978 名前:デフォルトの名無しさん [2018/04/04(水) 02:58:58.46 ID:3/OGlZbi.net] バグってハニー
979 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 07:59:24.78 ID:ClxMGJax.net] material designとかタッチメインならいいけど、マウスメインのデスクトップアプリならmaterial designはスペースが無駄すぎる
980 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:33:02.49 ID:n4eM316R.net] excelファイルを操作する必要があり、いろいろ調べたらclosedXMLを使うのが良さそうという 結論に達したのですが、詳しい解説のあるサイトや書籍はないでしょうか。 ファイルの開き方、セルの参照方法などは普通に見つかるのですが、提供されている メソッドの一覧とか、発生する例外とか、実用上知っておくべきことを知りたいのです (主にエラートラップをするためです) 公式ドキュメントがどこにあるかすら発見できなかった程度の英語力ですが、ドキュメントの ありかを教えていただければ、辞書を引きながらでも調べてみます
981 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:50:20.08 ID:K+0BZuJc.net] Excel操作はCOM Automation以外には手を出すな 地獄を見ることになる
982 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:53:47.86 ID:Uk0C/m1f.net] ClosedXMLはマジ大変
983 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:05:58.11 ID:Ft6CGKk+.net] 村の禁忌に触れたような言い様だなw
984 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:27:26.09 ID:mQqkiub7.net] 泣く子はいねかー
985 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:30:08.25 ID:PCVfDfH6.net] ExcelのCOMオートメーションはサーバーでの動作保証が無い時点でゴミなんすよ
986 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:32:26.97 ID:BmbE00Mi.net] >>960 https://github.com/closedxml/closedxml/wiki 使ったことないけどExcelDataReaderも速さの面ではいいってどっかの記事で見た https://github.com/ExcelDataReader/ExcelDataReader
987 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 22:21:19.70 ID:noE6VTyE.net] エクセルファイルなんてグレープシティのスプレッド買えば一瞬で終わるだろ
988 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 22:50:52.54 ID:OrTn2AQm.net] WPFってどういう用途なら使うべき? 文献やネット検索が少なくて使えん
989 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:00:46.54 ID:T8BktjHU.net] EPPlus
990 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:21:00.13 ID:Lsgd0/8M.net] >>968 いかなる用途でも使うべきではない MSの推奨はElectronとASP.NET
991 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:34:42.99 ID:Lt0+eORa.net] やたらElectron推す人いるけど、言うほどMSが勧めてるかなぁ
992 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:42:42.72 ID:9CBA0Lmr.net] Electronは縦書きエディタすら作れない駄目なやつ 表示はどうにでも出来るが入力が機能的に絶対無理とか俺が費やした半日を返せよ
993 名前:960 mailto:sage [2018/04/04(水) 23:46:48.80 ID:n4eM316R.net] >>961-966 触れてはいけないものに触れてしまったかのような反応ですが、なんとかドキュメントを 読んで頑張ってみますわ・・・ >>967 趣味で書いてたVBAマクロをスタンドアロンに書き直したい(データだけexcelファイルから 流用したい)という用途なので、万円単位の買い物は無理です、残念
994 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:48:56.91 ID:v0eOpRGB.net] >>969 EPPlusは早いし使いやすいよね
995 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 02:05:31.70 ID:G4evJUNh.net] >>972 縦書きはWPFも非対応だろ
996 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 08:55:29.27 ID:3wDwo2/L.net] MSがPWAに手を出したから、類似技術のElectronは始まる前にMSでは終わった
997 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 10:13:54.51 ID:c77DGTlb.net] コンソールとフォームしか作ったことないけどまだまだ
998 名前:「けますか? [] [ここ壊れてます]
999 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 11:09:05.32 ID:796HNo8s.net] 趣味ならどうでもいい 職業ならWebできないと仕事ない
1000 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 12:00:33.19 ID:D2y+fK6k.net] てっきり今後はWPFが主流になると思って使ってみたけど、 情報がネットに少なすぎてまいったわ
1001 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:16:56.73 ID:+3oTwv9E.net] 趣味で作ってるから問題ないわ
1002 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:48:57.38 ID:2ZtD67QF.net] 例外処理について教えてください 簡単な例で、キーボードから数字を入力させて処理するとして、非数字が入力されたら 数字が入力されるまで、正しい入力をするよう促したいとします (これだけなら例外を使わなくても簡単ですが、あくまで例として) bool flag = false; string str; int i=0; while(flag != true) { try { Console.Write("enter a number = "); str = Console.ReadLine(); i = Int32.Parse(str); flag = true; } catch { Console.WriteLine("incorrect number."); } } Console.WriteLine("your number is : " + i); こんな感じで、try-catchの間をループで囲んで、脱出フラグを用意するのが正攻法 なのでしょうか? なんかもっとスマートな方法がありそうなのですが
1003 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:57:03.35 ID:dUUr3xK4.net] >>981 いや、例だと 回答してもこれは違う実は書いてないけど こういう問題があって駄目だの 小出しでどんどん出るから ピンポイントでこの問題を解決したいってのを書いて
1004 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:58:19.97 ID:M7HPB+1x.net] do while int.TryParse
1005 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:59:25.26 ID:IVUDpQN0.net] var i = 0; while (true) { Console.Write("enter a number = "); var str = Console.ReadLine(); try { i = Int32.Parse(str); break; } catch (FormatException) { Console.WriteLine("incorrect number."); } } Console.WriteLine("your number is : " + i);
1006 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:04:19.96 ID:IVUDpQN0.net] iを0で初期化するのもやめたほうが良かったな
1007 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:11:00.58 ID:2ZtD67QF.net] >>982 すいません、ピンポイントで課題に直面しているのではなくて、勉強中で疑問に思ったので 質問しました 例えばファイルオープンで存在しないファイル名を掴まされたとか、テキストファイルを想定 しているところにバイナリを噛まされたとか、そういうケースのリトライをどうやって実装するのかと 疑問に感じたのです
1008 名前:981 mailto:sage [2018/04/05(木) 22:19:06.91 ID:2ZtD67QF.net] >>984 このソースは理解できましたが、>>985 はどういう意味でしょう? 私は921でもあるのですが、この時指摘いただいたとおり、iを初期化しておかないと 未割り当てとしてコンパイル通りませんが
1009 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:24:09.13 ID:dUUr3xK4.net] >>986 ファイル読み込みに失敗しました。 Windowsを終了します。
1010 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:36:19.31 ID:7xCMhR6w.net] 気持ちは分からんでもないが、抽象的な質問しても抽象的な答しか返ってこないと思うw static void Main(string[] args) { var number = 0; Func<bool> tryAskNumber = () => { Console.Write("enter a number = "); return int.TryParse(Console.ReadLine(), out number); }; while (!tryAskNumber()) Console.WriteLine("incorrect number."); Console.WriteLine($"your number is : {number}"); }
1011 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:36:33.86 ID:796HNo8s.net] >>986 そんなもん具体的に何をどうリトライしたいのかによる それが明確になってるならそれをそのまま実装するだけだ ネットワークエラーのようにそのまま自動的にリトライ可能なエラーならある程度決まったパターンがあるけど、 >>986 のように条件を変えない限りリトライしても必ず失敗するケースでは個別に考えるしかない
1012 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 23:38:35.52 ID:IVUDpQN0.net] >>987 この場合は while を抜けたときは必ず i に値が代入されているとコンパイラが判断できるので通る https://ideone.com/kUpXYh
1013 名前:981 mailto:sage [2018/04/06(金) 06:10:19.26 ID:e2Dy7HRM.net] >>989 私の学習では、まだ Func<bool> tryAskNumber = () => この書き方が理解できていないのですが、これでやっているのは例外の処理ではなくて boolでメソッドの戻り値を評価して処理を繰り返しているのですね? 抽象的な質問だと言われればそのとおりなのですが、エラーが発生したときに例外を 返してくるメソッドを使っているときに、正常処理ができるようになるまで同じ処理を繰り返す、 というケースの質問でした 条件を変えるとかは本質的な話ではなくて、「例外が発生しなくなるまで繰り返す」という 処理フローそのものの質問です >>984 で、break文でtryの中からwhileブロックを抜ければよい、と理解できたので十分です (tryブロックから、その外側のwhileを抜けられると思ってなかったので躓いてました) 数字入力を取り上げたのは、例として単純で、言わんとすることがすぐに伝わるかと思った だけです >>991 >>984 の var i=0; を var i; にしただけだとエラーになりましたが、int i; なら通るんですね
1014 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:09:07.04 ID:iz5pUoek.net] >>981 例外が出たらアプリケーションを止める ファイルオープンだとしてもそれは変わらず、存在しなくてリトライしたいなら以下のような事前チェックをするべき if(存在していない)continue; ってのが理想だけどファイル系のエラーってたくさんあるし、確認しずらいのもあるからtry-catchを使わないのが現実的じゃないことも メソッドが例外を出すのは使ってはいけない使い方をしているということなので、使っていい状態か確認してから呼び出すよう心がけるべきかな
1015 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:31:23.65 ID:KffLTaJD.net] foreach(var a in XXX) { みたいなことを可能にするためには XXX はどんなクラスを継承してないといけませんか? (何が必要か) たとえば、XXX がDataRowCollection 型だったら foreach(DataRow a in XXX) とやらないと怒られてしまいます。 DataRow[] だったら、var が使えます。 この違いは一体なんだろう(なにが必要なのかと)、と
1016 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:39:53.65 ID:QmpxvPzQ.net] ジェネリックインターフェイスを実装してるから
1017 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:44:13.58 ID:19AXhYIg.net] IEnum〜だっけ
1018 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:54:13.71 ID:KffLTaJD.net] つまり、DataRowCollection は IEnumerable を継承しているから、foreach の in に使えるけど IEnumerable<T> は継承してないから foreach(var は許されない ということですか
1019 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 12:11:24.19 ID:78uF6QEL.net] >>992 ラムダ式を使わずに書くとこう static void Main(string[] args) { var number = 0; while (!TryAskNumber(out number)) Console.WriteLine("incorrect number."); Console.WriteLine($"your number is : {number}"); } static bool TryAskNumber(out int number) { Console.Write("enter a number = "); return int.TryParse(Console.ReadLine(), out number); } プログラミングの基本は一気にすべてを解決しようとしないこと。 問題を小さな問題に分割すること。 「○○が成功するまで繰り返す」なら、○○の部分と成否を判定してリトライ する部分は分けた方が基本的に分かりやすくなる 抽象的な質問に対して何か言えるのはこの程度だと思うけど....
1020 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 12:42:38.82 ID:bxzO13cU.net] >>994 継承は関係ない GetEnumeratorってメソッドがあればok
1021 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 15:01:40.67 ID:Mgh91ASd.net] へー
1022 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 33日 23時間 52分 35秒
1023 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています