ふらっと C#,C♯,C#(初心者用) Part136at TECH
ふらっと C#,C♯,C#(初心者用) Part136 - 暇つぶし2ch824:デフォルトの名無しさん
18/03/30 20:37:12.26 +cAt7TAV.net
>>803
何でそうなるw
だから、まずググろうよ"IDE0018"で
そうすればこれはC#7の追加機能に起因する警告であり、不具合ではないとすぐに分かる。
何でそんな長文タイプする手間は惜しまないのにちょっと検索する手間は惜しむのよw
意味が分からん
ちなみに、この警告を無視するにはこうするんだってさ
URLリンク(developercommunity.visualstudio.com)
これもググってれあばすぐに自分で見つけられてるはず

825:デフォルトの名無しさん
18/03/30 20:40:09.19 keCNvJ3G.net
一行ならブロックスコープ外せるから>>804だと思うんだけど自分の6.0環境では試せなくて悲しい

826:デフォルトの名無しさん
18/03/30 20:59:52.66 keCNvJ3G.net
ごめん、無理だね
ブロック外してもスコープはローカルになっちゃうみたい

827:789
18/03/30 21:13:54.63 QYlpMr10.net
>>804>>808>>809
修正方法のご提示とご検証どうもありがとうございます。問題は>>809にお書きいただいたとおりです。
ただ、お書きいただいた通り問題はスコープにありますので、
Console.WriteLine(message);をifとelseの両方の中に書けばこの問題は起こりません。
この程度の内容を2回書くことは大した問題になりませんし、
この部分に対応するコードが長くなってしまった場合もメソッドとして切り出せば同じことですので、
いただいたレスを読みながら、>>789のようなプログラムを書くこと自体が筋が悪くて、
やはり>>804に適合するプログラムになるよう全体を修正するべきなのかなとも考えました。
ただ、メソッドとして切り出す方法であらゆる状況に対応できるかどうか自信がないので、
いずれにしても確信は持てていない状況です。

828:デフォルトの名無しさん
18/03/30 21:24:37.09 DYwliZHB.net
>>807
いつまでトンチンカンなこと言ってんの?

829:デフォルトの名無しさん
18/03/30 21:25:20.49 DYwliZHB.net
例のおじいちゃんかよ
レスして損した

830:デフォルトの名無しさん
18/03/30 21:28:28.22 +cAt7TAV.net
>>811
トンチンカンでもおじいちゃんでもないからw
こんなググればすぐに理由も対処法もわかる話でMSにクレーム付けたら
質問者が恥をかくだけ

831:デフォルトの名無しさん
18/03/30 21:30:10.03 DYwliZHB.net
NG推奨

832:デフォルトの名無しさん
18/03/30 21:30:33.31 roepBgfb.net
>>813
じゃ、どうしろって書いてあんの?
リンクのどこ見ればいいかわかんないよ
対象のコード貼ってくれ

833:デフォルトの名無しさん
18/03/30 21:30:33.58 +cAt7TAV.net
>>814
もうした

834:デフォルトの名無しさん
18/03/30 21:31:54.48 DYwliZHB.net
おじいちゃんに触れても無駄だよ
いつまでも間違いに気づいてないしレスも読んでないから

835:デフォルトの名無しさん
18/03/30 21:32:50.48 +cAt7TAV.net
>>815
無視するか気になるなら>>867で対処する
当たり前でしょう

836:デフォルトの名無しさん
18/03/30 21:33:56.46 roepBgfb.net
>>818
じゃ、バグってんじゃんw

837:デフォルトの名無しさん
18/03/30 21:34:34.33 +cAt7TAV.net
>>819
だから何でそうなるw
意味が分からない

838:デフォルトの名無しさん
18/03/30 21:35:21.33 DYwliZHB.net
>>819
おじいちゃんはまだ何が起こってると言う話なのか判ってないからレスしても無駄
スコープもわからないから

839:デフォルトの名無しさん
18/03/30 21:36:16.37 +cAt7TAV.net
>>821
トンチンカンなことを言ってるのは君の方なんだけど、自覚がないってのは幸福でいいねw

840:デフォルトの名無しさん
18/03/30 21:37:18.61 roepBgfb.net
>>820
いや、バグでしょコレ
だってこんなん指摘してきた同僚がいたらキチガイじゃん

841:デフォルトの名無しさん
18/03/30 21:37:22.84 MnRWcQoL.net
>>810
Visual Studio のバグでしょ
とりあえず頓珍漢野郎の>>807のリンク先に抑止方法書いてあるからそれでしのげばいいかと

842:デフォルトの名無しさん
18/03/30 21:38:22.07 +cAt7TAV.net
っていうか、>>789みたいなコードが警告されるのはむしろ当たり前。
outの変数を使いまわしするなんてよい作法とは言えないからだ

843:デフォルトの名無しさん
18/03/30 21:39:20.19 DYwliZHB.net
ジジイはトンチンカンすぎてダメだな
いつまでたっても成長しない

844:デフォルトの名無しさん
18/03/30 21:40:20.48 MnRWcQoL.net
使い回しとかほんとに意味わかってないんだな w

845:デフォルトの名無しさん
18/03/30 21:41:00.76 roepBgfb.net
>>825
使うからoutしてんじゃん
ガイジが過ぎるぞ自重しろ

846:デフォルトの名無しさん
18/03/30 21:41:07.53 +cAt7TAV.net
しかし、バグバグいってる連中はちゃんとググって解説記事読んでるのかねw
こんなのが同僚だったら張り倒すよw

847:デフォルトの名無しさん
18/03/30 21:41:48.65 DYwliZHB.net
ジジイは失礼なので取り消しておじいちゃんにまた戻す

848:デフォルトの名無しさん
18/03/30 21:42:50.83 roepBgfb.net
>>829
ありえねーレベルのアホだなw
outしたの使わないでどーすんだよ

849:789
18/03/30 21:45:40.64 QYlpMr10.net
>>805
参考ページのご紹介どうもありがとうございます。
このページは拝見したのですが、問題の解決に至る道筋を見つけることができませんでした。
(確認したページのうち主要なものはあらかじめお伝えしておくべきだったかもしれません。
 申し訳ありません。)
質問させていただいている身でこのようなことをお願いするのは大変心苦しいのですが、
もしお時間に余裕がありましたら具体的な修正方法のご説明をお願いすることはできませんでしょうか。
ご説明の中で私の疑問を理解していただければ幸いですし、
いただいたご説明で問題が解決できれば願ってもないことです。
煽るような文章で答えを引き出すような形になってしまい大変申し訳ありませんが、
私の説明能力の無さゆえの苦肉の策ということで、どうぞ失礼をお許しください。

850:デフォルトの名無しさん
18/03/30 21:46:08.85 rq+fXpbo.net
ガイジでいいだろ
本人もそう言ってる

851:デフォルトの名無しさん
18/03/30 21:49:29.47 DYwliZHB.net
>>832
とりあえず別のことに時間使ったほうがいいよ
ひまーな時に思い出して修正されたか確かめるといい
うちじゃ全然再現されないからどうしようもない

852:789
18/03/30 22:03:34.15 QYlpMr10.net
ID:+cAt7TAV 様
警告の抑制方法についてご案内いただきどうもありがとうございます。
他に解決策が見つからなければマイクロソフトに問題を報告し、
マイクロソフトに修正していただけるまで教えていただいた方法で警告を抑制したいと思います。
ただ、他の方にいただいたレスも拝見し、やはり私としてはこのメッセージが適切であるとは確信できずにいます。
もしお時間に余裕がありましたら、>>832のお願いを ID:+cAt7TAV 様にもさせていただけないでしょうか。
お願いの方法も内容も大変失礼なもので申し訳ないのですが、どうぞお許しください。

853:デフォルトの名無しさん
18/03/30 22:06:55.10 +cAt7TAV.net
まあ質問者がここのお馬鹿さんを代表してMSに質問してみたらいいと思う。
恥をかくのも勉強のうちかも
個人的にはちょっと調べてちょっと自分の頭で考えれば分かるはずのことを理解しようとせず、
「このバグどうなってんだコラー」なんて突撃するのは愚の骨頂にしか思えんけど
つーか、ちょっと考えれば、この警告は余計なお世話のように思えて
一定の合理性があることぐらいすぐ分かると思うんだけど、ガチで分からない奴もいるんだね世の中には

854:デフォルトの名無しさん
18/03/30 22:10:00.19 +cAt7TAV.net
>>835
だから、警告の意図はout変数を値を戻す以上の目的で使うのはよい作法じゃないよ、
ってことでしょう。
外側のブロックでも値を使いたいなら別の変数にコピーしてねと

855:デフォルトの名無しさん
18/03/30 22:14:49.66 roepBgfb.net
は?こんなのバグだろ

856:789
18/03/30 22:22:13.29 QYlpMr10.net
たくさんご反応をいただきどうもありがとうございます。
とても勉強させていただいています。
お返事が遅くなってしまい申し訳ありません。
予想以上のレスの多さでこの話題に触れてくださった方すべてにお返事するのが難しくなってきましたので、
大変勝手ながら、これ以降、直接私の書き込みにアンカーを付けてくださった方と
特に教えていただきたいことがある方へのメッセージのみ書き込みたいと思います。どうぞよろしくお願いします。
>>825
皆さんのお話を聞いて、コードの無作法が警告メッセージの直接または間接的な原因なのではということを
かなり感じてきました。ただ、作法に関する私の理解が不十分でどうにも宙に浮いたような感覚なのです。
もしよろしければ、>>810考えについてコメントなどをいただくことはできないでしょうか。よろしくお願いいたします。

857:デフォルトの名無しさん
18/03/30 22:29:53.50 MnRWcQoL.net
>>836
どう書けばいいのかを書いてからほざけば? w

858:デフォルトの名無しさん
18/03/30 22:30:40.89 CA+6T7VZ.net
トンチンチン

859:789
18/03/30 22:32:45.82 QYlpMr10.net
>>824
レスどうもありがとうございます。
やはりバグと考えるのが妥当なのかなという気持ちが強くなってきました。
これだけたくさんのレスをいただき、バグであろうというご意見もいただいているので
もうマイクロソフトに報告を出してしまってもいいかなという気もしているのですが、
一応>>803に書いたとおり一日置いてから報告しようかと思います。
ただバクだとしても、このバグが今まで大した問題にならなかったということは
再現するためのコードに多かれ少なかれ作法の問題があるのではという気持ちもあり、
色々と勉強させていただきたいと考えています。

860:デフォルトの名無しさん
18/03/30 22:37:24.89 MUNCeVRK.net
>>842
現象再現するソリューション一式をアップローダにあげたら何か進展あるかもよ

861:デフォルトの名無しさん
18/03/30 23:04:09.64 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
18/03/30 23:06:10.14 QYlpMr10.net
>>834
アドバイスとご検証どうもありがとうございます。
再現性の問題については、警告のカスタム規則セットなどは使っていないつもりなのですが、
そのあたりの理解が不十分でお伝えすべきことが不足してしまっているのかも知れません。
念のため、解説ページなどを読むなどしてもう一度確認したいと思います。
また、とりあえず別のことに時間をということについて、お心遣いをとても嬉しく思います。
ただ、せっかくこれだけの反応をいただけたのだからできる限りのことを吸収して…という
殊勝(?)な考え以上に、私が感じた問題に多くの方が興味を持ってくださったことが嬉しく、
娯楽という意味でもう少しこの場にお邪魔させていただきたいと思っています。

863:789
18/03/30 23:33:26.14 QYlpMr10.net
>>837
大変勉強になるコメントどうもありがとうございます。この観点はまったく気づいていませんでした。
確かにout変数の使い道をそこまで限定することで警告は表示されなくなりますし、
この制限はプログラムの保守性を高める効果もありそうです。
これで私個人の、警告が表示されて気持ちが悪いという問題は解決したように思います。
どうもありがとうございます。
ただそれはそれとして、今回の警告はやはり意図されたものではないと思うのですが、
もしよければこの点についてもご意見をお聞かせいただけないでしょうか。
私がこのように思うのは、以下のコードで警告が表示されないというところにあります。

864:789
18/03/30 23:33:45.21 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
18/03/30 23:34:33.28 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
18/03/30 23:56:19.78 QYlpMr10.net
>>843
アドバイスどうもありがとうございます。
今更ですが、警告が表示されるコードを含むソリューションをアップロードしてみました。
URLリンク(dotup.org)

867:789
18/03/31 00:03:56.30 a/TgDl8y.net
>>844
レスどうもありがとうございます。
お書きいただいたコードでは、ビルドは通りますが>>789と同じ警告文が表示されました。
これは message = null と書き換えても同じようです。
戻り値で文字を返すべきだというのはおっしゃるとおりだと思います。
ただ>>796のような理由もあり、out変数でも警告が表示されずにすまないか思って質問させていただきました。

868:デフォルトの名無しさん
18/03/31 00:04:10.00 r1Fcmmf3.net
>>849
えー、このスレで解決しないといけないの?
初心者スレの領域越えてない?

869:デフォルトの名無しさん
18/03/31 00:04:41.30 r1Fcmmf3.net
しかも無駄に長文だしちょっと控えてよ

870:789
18/03/31 00:25:14.41 a/TgDl8y.net
>>851 >>852
申し訳ありません。
もともと不具合なのかどうかの判断もできずこのスレで質問させていただきましたが、
IDEの不具合であるとすれば、おっしゃるとおりここで解決を目指すことではないと思います。
ただ、もしこの問題に興味を持ってくださる方がいて、問題が再現されないようであれば、
>>849のソリューションファイルでもお試しいただければ嬉しく思います。
これ以降は、「IDEのバグ修正」という方向の話について私の方から書き込むことは控えたいと思います。
しかし、すでに私が書き込んでしまった内容にお返事をいただいた際のレスについてはお許しください。
以上、長々と失礼いいたしました。

871:デフォルトの名無しさん
18/03/31 00:25:16.57 p9TP0


872:5UX.net



873:デフォルトの名無しさん
18/03/31 02:11:28.67 r7WFMRHn.net
>> 853
Visual Studio 15.5.7 だけど IDE0018 は出なかった
リファクタリングしたらどうなるの?
URLリンク(codezine.jp)

874:789
18/03/31 08:06:10.45 Mw1mdL1r.net
レスどうもありがとうございます。お返事が遅くなってしまい申し訳ありません。
日中はVisual Studioを使えそうになく、申し訳ないのですがきちんとしたお返事は夜になってしまうと思います。
中途半端な内容になってしまいますが、ひとまずいただいたレスにお返事したいと思います。
後ほど改めて書き込みますので、失礼をお許しください。
>>854
Visual Studio 2017のバージョンについてご報告できておらず申し訳ありません。
恥ずかしいことに最新版を使うという意識も持てていなかったので、古いバージョンを使っているかも知れません。
(ただ、古いバージョンで検証して下さった>>855様もIDE0018は出なかったとのことなので、
 なにか他のところに問題があるのかなとも思っています。)
>>855
ご検証どうもありがとうございます。
>>854様の結果と合わせて2つのバージョンで再現しなかったとのことなので、
私は何かとても基本的なところで間違いを犯してしまっているのかも知れません。
リファクタリング機能については、ご指摘をいただいた上で試したわけではないので後でまた確認しようと思いますが、
問題の箇所では動作しなかったように記憶しています。

875:デフォルトの名無しさん
18/03/31 08:08:51.24 r1Fcmmf3.net
>>855
不具合報告スレでも立ててそっちでやれよ

876:デフォルトの名無しさん
18/03/31 08:43:46.87 +WsDcfNX.net
別にいいよ
片っ端から透明あぼーんするだけだし

877:デフォルトの名無しさん
18/03/31 08:51:48.82 OaeapR1O.net
>>836
> 「このバグどうなってんだコラー」なんて突撃するのは愚の骨頂にしか思えんけど
1年も前にバグと判明して解決してる
URLリンク(developercommunity.visualstudio.com)
> 恥をかくのも勉強のうちかも
実践乙 w

878:デフォルトの名無しさん
18/03/31 09:03:24.19 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:デフォルトの名無しさん
18/03/31 09:07:37.87 r1Fcmmf3.net
>>860
これが恥の上塗りか

880:デフォルトの名無しさん
18/03/31 12:42:07.43 x9Yyswdb.net
(結局調べれば分かることで、ググれというレスを罵倒してた奴らは今どんな心境なんだろう)

881:デフォルトの名無しさん
18/03/31 12:44:49.99 LMRl+wCl.net
>>860
これは主旨が違うじゃん

882:デフォルトの名無しさん
18/03/31 12:45:43.39 O8yBke8L.net
ワッチョイないからNGがタルい

883:デフォルトの名無しさん
18/03/31 13:03:27.79 9aphfiP0.net
>>863
もともと修正方法教えろって言ってるんだからこれが正解だよ

884:デフォルトの名無しさん
18/03/31 13:09:24.39 LMRl+wCl.net
ワッチョイ必要だな

885:デフォルトの名無しさん
18/03/31 13:32:48.06 OaeapR1O.net
>>862
> (結局調べれば分かることで、ググれというレスを罵倒してた奴らは今どんな心境なんだろう)
罵倒されてもしょうがないよね
って感じですけど?
しかも恥の上塗りしてる奴までいるし w

886:デフォルトの名無しさん
18/03/31 13:32:50.70 IoBwmw2C.net
>>865
>>789と出力結果が違うのに正解とか何ほざいてんのw

887:デフォルトの名無しさん
18/03/31 15:17:13.71 G6tH+bWp.net
FirstOrDefaultについて教えて下さい。
List<T>をFirstOrDefaultで条件のものを返してきた場合、
それは参照先のアドレスが返ってくるのでしょうか?
それとも写像としてコピーされたものが返ってくるのでしょうか
取り出したものの値を更新したときに、元のListは更新されますか?

888:デフォルトの名無しさん
18/03/31 15:28:08.82 IoBwmw2C.net
数分で試せることをなぜやらない

889:デフォルトの名無しさん
18/03/31 15:34:02.83 r1Fcmmf3.net
List<int>とかとList<MyClass>とかで違うよね的な?

890:デフォルトの名無しさん
18/03/31 15:39:45.66 UG1yVXDX.net
やってることは同じ(値をコピーしてくる)だけど結果が違ってくると言うこと

891:デフォルトの名無しさん
18/03/31 15:48:48.09 feZwED6X.net
教習所の教官「生徒が減ったので褒めちぎったら運転技術は向上!合格率も事故率も改善!俺はなんで今まで怒ってたんやろう?」 [274141358]
スレリンク(poverty板)
5 名前:番組の途中ですがアフィサイトへの転載は禁止です (ワッチョイWW d3e8-gBuS)[] 投稿日:2018/03/30(金) 13:30:33.99 ID:F53Z/ySd0
よく考えたら本当にジャップ案件だよな
初心者に対して怒鳴り散らしてどこが悪いかは一切教えない
部活と一緒だわ

892:デフォルトの名無しさん
18/03/31 16:04:38.32 fwgHW5nR.net
>>869
List<T>とかHashSet<T>とか初めから使えるやつはTが値型か参照型かだけ考えればいいよ
あと「Listが更新されるか」という言い方はTが参照型だと意味が曖昧になるから改めたほうがいいかと
ふと↓こんなのが頭をよぎったけど意味が分からなければスルーしておくれ
class MyList<T> : IList<T> where T : ICloneable { ... }

893:デフォルトの名無しさん
18/03/31 16:14:25.21 UG1yVXDX.net
IListは実装したことないな
実装例は見かけるけどOSSで実装してるのは見かけない

894:デフォルトの名無しさん
18/03/31 16:27:15.53 fwgHW5nR.net
>>875
>>874でIEnumerableでもICollectionでもなくIListを選んだのには深い理由があるのよ
文字数という理由がね
まあIsReadOnlyプロパティとかどうかとは思うよ

895:デフォルトの名無しさん
18/03/31 16:49:04.27 G6tH+bWp.net
ご指導ありがとうございます
Tが値型か参照型かというところが意識から抜けておりました
適当に組んで試してみて、その違いも確認できました

896:デフォルトの名無しさん
18/03/31 16:55:49.06 tzO3VEeA.net
モニタの解像度によらず実寸A4サイズのウィンドウを開いて2㎝の×を座標ランダムに20表示
それをクリックするというアプリを開発しようと思ってます。
最初モニタの解像度取得してモニタの実寸をユーザーが入力して、
そこからA4サイズは何ドットになるか計算してというのをフォームで作り始めたんだけど、
これだと×や他のボタンも全て計算して調整しなければいけないのかと気づきました。
WPFで開発するとこういうモニタサイズにかかわらず実寸で表示って簡単に処理できるの?

897:デフォルトの名無しさん
18/03/31 17:16:01.57 l8CCe9Lg.net
実寸はモニタ変更するたび変えないと駄目じゃん
フルHDのスマホとモニタじゃちげーし

898:デフォルトの名無しさん
18/03/31 17:27:51.62 47Bv8u8/.net
ユーザーが勝手にWindowsのDPI設定を変更してない限りはできるけど、
今更オワコンWPFに手を出すくらいならHTMLで作ることを強くお勧めする
CSSならmm単位で実寸指定できるからWPFよりも簡単だよ

899:デフォルトの名無しさん
18/03/31 17:34:37.92 FNt76Udy.net
>>868
お前は返しまでくだらないな

900:デフォルトの名無しさん
18/03/31 17:37:43.10 GqrQqkMZ.net
イベント処理でキー読み込むのと、ただ単にキー読み込むのではどう違うの?
実行すると速度が全然違うんだけど...

901:デフォルトの名無しさん
18/03/31 17:38:31.40 io+mDfEy.net
例の教育心理系君か
AWS S3にHTML/CSS/JavaScript置いてURL教えるのが一番手っ取り早いだろうな
結果もJavaScriptからS3 APIで保存するようにすれば完全サーバーレスだ
その程度なら料金は月10円もしない

902:デフォルトの名無しさん
18/03/31 17:58:49.73 tzO3VEeA.net
ご無沙汰しておりました。
教育心理系のものです。
ようやっとC#の本読み終えて作り始めましたけど、
実世界での用紙とか×とかの大きさを統一しないと実験結果に影響が出るので実㎜単位で画面表示が必要なことに気づきました。
a. ディスプレイ解像度はC#で取得できたので、後は実モニタサイズをユーザーに入力してもらえば、小学生の算数レベルでA4用紙のウィドウは作れる
でいいかと思ったんだけど、
そうすると×の大きさや当たり判定の範囲まですべて計算しなければいけず、
なんかあほらしいことをやってるのか??
と疑問に思ってきました。
ブラウザ上に表示するとユーザー側でctrl+スクロールで表示の大きさ変えられちゃうんですよね。
実世界での㎜単位での大きさを固定したいってあまりなさそうな要求だし、aでやってくしかないのかなぁ。

903:デフォルトの名無しさん
18/03/31 18:02:33.45 UG1yVXDX.net
そこまでやるなら被験者とモニターの距離も計測して一定にしないと…

904:デフォルトの名無しさん
18/03/31 18:12:00.40 NJrC8qba.net
なぁに網膜に直接書き込んでしまえばw

905:デフォルトの名無しさん
18/03/31 18:20:56.75 /DPGnFFi.net
いいね!

906:デフォルトの名無しさん
18/03/31 18:35:00.07 tzO3VEeA.net
>>885
その通りですね。
同じような実験で被験者の姿勢によりスコアが変わるらしいので。

907:デフォルトの名無しさん
18/03/31 18:42:00.60 AhiWvdUc.net
>>878
WpfにはViewBoxと言う拡大縮小自在なモジュール在るから上手くやりゃなんとかなるよ

908:デフォルトの名無しさん
18/03/31 18:59:42.15 tzO3VEeA.net
>>889
ViewBox調べてみます。
少しフォームベースで初めてみたんですけど、
これから勉強するならWpfとフォームどちらで作るのがおすすめですか?
フォームでもゴリゴリやっていけば狙ったものはつくれそうな感じはするんですけど、
wpfのほうがいいというのも聞いたりして悩み中です。

909:デフォルトの名無しさん
18/03/31 19:11:47.57 AhiWvdUc.net
>>890
件の用途だとformsは厳しいと思われるのでwpfを奨めるが、情報少ないから習得は簡単じゃないと思うよ
もし、不特定多数への配布を考えているならwpfの進化形であるUWPを使うのを奨める

910:デフォルトの名無しさん
18/03/31 19:59:43.42 kEu+XyQj.net
>>882
ただ単に読み込むのはどのタイミングでどうやってるの?

911:デフォルトの名無しさん
18/03/31 20:17:53.84 tzO3VEeA.net
>>891
wpf情報少ないんですか・・・。
UWPも書籍はまだ少ないみたいですね。
ど素人なので学習のための情報は欲しいなぁ。
フォームでも×を線で描いてしまえばなんとかなりそうなんですけど、
拙速コードでも早期論文化を目指してフォームでやるか
将来のためにUWPを勉強するか悩みますね。

912:デフォルトの名無しさん
18/03/31 20:26:11.30 Tt7WJg3O.net
>>893
WPFでもFormでもスケーリングはページ変換使うだけだから難しくないと思う。
■ Formを使う場合の問題点
- 自動でスケーリングされるのはグラフィックだけ。コントロールやそのフォントは
コードでスケーリングや座標変換する必要がある

■ WPFを使う場合の問題点
- GDI+ほど簡単じゃない
- 多数の図形を描画する場合はパフォーマンスが問題になる

913:デフォルトの名無しさん
18/03/31 22:01:55.63 l8CCe9Lg.net
何処の座標を実寸通りにしたいか?
だけでformでいいだろ
なんでボタンまでやる必要があるんだ?

914:デフォルトの名無しさん
18/03/31 22:04:08


915:.01 ID:tzO3VEeA.net



916:デフォルトの名無しさん
18/03/31 22:09:29.60 g9lQ5N9X.net
厳密な同環境を求めてるみたいだが、
マウスの移動速度で無理が出ると思う

917:デフォルトの名無しさん
18/03/31 22:25:11.42 l8CCe9Lg.net
>>896
だからできねぇって
スマホもフルhdだろ?
モニタもフルhdだろ?

918:デフォルトの名無しさん
18/03/31 22:26:20.15 Tt7WJg3O.net
>>896
一応モニター自身が持つEDIDとかいう情報に表示領域の物理サイズが含まれているらしい
WPFはどうだったか知らんけど、FormはOSのDPI設定を無視して指定ピクセルサイズでFormを
表示させられると思った。
だからDPIさえ分かれば目的の物理サイズのウィンドウを表示することは難しくないはず

919:デフォルトの名無しさん
18/03/31 22:40:05.11 IoBwmw2C.net
>>898
さっきからスマホスマホうるさい
WPFの時点でデスクトップWindows固定だって理解できないの?

920:デフォルトの名無しさん
18/03/31 22:48:21.76 r1Fcmmf3.net
>>900
えー、だから解像度に対するモニタのサイズが決定しねーと駄目でしょって話何だけど?
スマホを例に挙げたのはあんな小さいなりして解像度はフルhdだから

921:デフォルトの名無しさん
18/03/31 22:55:14.06 IoBwmw2C.net
ユーザーがモニタサイズを入力って何回も書いてあるじゃん
それじゃ不満なの?

922:デフォルトの名無しさん
18/03/31 22:55:29.08 vbALr7Yq.net
デスクトプPCとタブレットPCにでもしときゃ良いだろうに

923:デフォルトの名無しさん
18/03/31 23:28:19.33 r1Fcmmf3.net
>>902
逆にそこまで決定してると疑問が出るのが謎

924:デフォルトの名無しさん
18/03/31 23:45:29.31 U08lgUq5.net
やっぱりC#もバカばかりなんだなあ
現代の三大バカ
ペチパー、ジャバパー、シーシャーパー
で決定やねw

925:デフォルトの名無しさん
18/04/01 00:58:58.57 AmnK79El.net
教えてください。
以下のような事をしたいと思います。
再現のために最低限必要なところだけを抜き出しているので、これだけだと意味が不明ですが、
同じような処理があちこちにあるので処理をまとめるため、このような事をしています。
public void Execute( string sql )
{
using (var command = new System.Data.SqlClient.SqlCommand(sql.ToString() ))
{
}
}
これをビルドしても警告等は出ませんが、コード分析の実行を行うと SqlCommand のところで
CA2100 の警告が出ます。意味は以下のページの通りです。
URLリンク(msdn.microsoft.com)
要するに関数パラメータで受け取った文字列にはなにが含まれているのか分からないので危ないよ、と言われているのだと思いますが
出来れば上の関数を利用する形式で進めたいと思います。
この形式のまま CA2100 を回避する手段のアドバイスをいただけると助かります。

926:デフォルトの名無しさん
18/04/01 01:09:42.05 v0T9GXCI.net
>>906
生のテキストを送るなバカ
PrepareなりSqlParameterなり使ってSQL文とデータを分離しろバカ
詳しくは「C# インジェクション対策」でググれバカ

927:デフォルトの名無しさん
18/04/01 01:10:28.60 RE1ojOXr.net
MDT_RAW_DPIで物理的なppiに近い値が返ってくるからそれ使えで済む話、で終われば良いんだが
あれちゃんとした値が返ってくる保証が無さそうなのがねー

928:デフォルトの名無しさん
18/04/01 01:21:16.42 GUPc3ba+.net
C#は、C++を難しく感じる人が使う言語だから。

929:デフォルトの名無しさん
18/04/01 01:26:38.59 Cu8+FDkh.net
文法だけならC言語が一番好き
クラス以降いらねー

930:デフォルトの名無しさん
18/04/01 01:39:12.76 AmnK79El.net
>>907
それはやってる。
再現する最低限までコードを削った結果としてその部分が見えなくなってるだけ。

931:デフォルトの名無しさん
18/04/01 01:43:15.77 UKmXoisc.net
>>906
なんでToStringしてんの?

932:デフォルトの名無しさん
18/04/01 01:45:10.58 AmnK79El.net
>>912
あ。ごめん。
いろいろ試してたときのコードが残ってました。
.ToString() がなくても再現します。実際にもそんな事してません。

933:デフォルトの名無しさん
18/04/01 02:06:42.96 1BdiydkK.net
急にタメ語になるのほんと草

934:デフォルトの名無しさん
18/04/01 02:10:36.19 Cu8+FDkh.net
>>911
えー?
でも出てる警告ってSQLインジェクションの警告ちゃうのん?

935:デフォルトの名無しさん
18/04/01 04:52:35.48 fKZaPfKf.net
>>911
ほんとにやってる?
このコードだけ出されても警告でるに決まってるし、リンク先のような対策しろとしか言えない

936:デフォルトの名無しさん
18/04/01 05:05:19.22 fKZaPfKf.net
>>906
一応コード分析で警告表示させないようにするだけでいいなら、SuppressMessage属性を付ければでなくなる
チームでやってるならメンバー全員の許可は必須

937:デフォルトの名無しさん
18/04/01 09:03:31.17 gIH0xNQX.net
>>906
ちゃんとリンク先読んでる?
メソッドに渡された文字列引数から構築された文字列を使用して IDbCommand.CommandText プロパティが設定されています。
って書いてあるんだからSqlCommamd.CommandTextに外部からもらった文字列を設定した時点でその警告になるよ
パラメーター云々はその後の話
その形式のまま使いたいなら>>917が書いてる通り抑止するしかない
ちゃんとやるならやりたいこと毎に関数作ってSqlCommamd.CommandTextに固定の文字列を設定するようにしないとダメ

938:デフォルトの名無しさん
18/04/01 10:20:28.44 JxTU817j.net
ストアド使いなさいよ

939:906
18/04/01 13:39:58.60 AmnK79El.net
レスをくださった皆さん、ありがとうございます。
>>917
現状では、 教えていただいた属性をつける方法を相談して、NG ならこのまま警告を残す。って方向かなと思います。
一応、先のリンク先の以下に当てはまるのでセキュリティ的には問題ないと考えます。
>警告を抑制する状況
>コマンド テキストにユーザー入力が含まれない場合は、この規則による警告を抑制しても安全です。
>>918
>ちゃんとやるならやりたいこと毎に関数作って
同じような処理があちこちにあるのを嫌って、906 のように出来ないかなと考えました。
ただ、一般的なやり方ではなかったかも知れません。
>>919
ストアドとは、たとえばこのリンク先の事で正しいですか。
URLリンク(code.msdn.microsoft.com)
自分が試した限りでは CA2100 が出ました。
いままではストアドでも execute 付けて普通に SQL 文として実行してましたが、こういう方法もあったのだと勉強になりました。
またストアドはローカルDB では問題ないのですが、基幹DB では使わせてもらえないようです。軽く聞いてみた範囲での事ですが。

940:デフォルトの名無しさん
18/04/01 18:26:06.48 +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:デフォルトの名無しさん
18/04/01 18:40:32.32 ut+4lapb.net
>>921
もしtryブロックの中で例外が発生した場合、
> Console.WriteLine("Your number : " + num);
この行に到達した時点でnumの値はどうなってるでしょうか?

942:デフォルトの名無しさん
18/04/01 18:48:12.04 GWiU0YBt.net
未定義

943:デフォルトの名無しさん
18/04/01 18:50:28.41 JxTU817j.net
>>921
null許容型にするか、素直に0で初期化しておく

944:デフォルトの名無しさん
18/04/01 18:50:55.68 JxTU817j.net
>>920
ストアドはそのとおりです

945:デフォルトの名無しさん
18/04/01 18:51:15.76 /o+55+4t.net
>>921
スコープの問題ではなく、try節のnum代入に到達しない可能性があるから
文脈からすれば仰る様にnum出力をtry節に含める、あるいはint num = 0;等…
C#はそういうの然り、C/C++よりガチガチに厳しい

946:デフォルトの名無しさん
18/04/01 19:28:44.37 fxgoPYx5.net
そのうちc#にもdeferが導入されるみたいだけどそういうのでボコボココンパイルエラーが出るようになるのか

947:デフォルトの名無しさん
18/04/01 19:39:39.66 xe0krAxA.net
>>926
C/C++でだって未初期化の値を使うコードを書くべきじゃ無いけどな

948:906
18/04/01 21:34:56.28 AmnK79El.net
>>925
thx

949:デフォルトの名無しさん
18/04/01 23:12:20.14 ECJY99tL.net
未初期化の(可能性がある)変数は、参照できない。バグ

950:デフォルトの名無しさん
18/04/02 12:27:49.40 7SJzoey2.net
必ず初期化されるやんC#

951:921
18/04/02 12:31:36.23 sF1TxYYm.net
皆様ありがとうございます
変数numが定義されていないというエラーだとばかり思っていたのですが、初期化されていないという意味だったのですね
理解できました

952:921
18/04/02 12:37:01.02 sF1TxYYm.net
>>931
私もそう思っていたのですが、違うのでしょうか
手元に書籍がないので、参考にしている本にはなんと書いてあるか不明ですが、
c#では整数型の変数は自動的に0で初期化される、と書いているサイトも
あるようです

953:921
18/04/02 12:39:19.98 sF1TxYYm.net
>>933
訂正
クラスのフィールド変数は初期化されるけれど、メソッド内のローカル変数は初期化されないのですね
誤解していました

954:デフォルトの名無しさん
18/04/02 18:07:44.63 6bvpmFc5.net
C#技術者は他の言語に比べて年収はいいんですか?

955:デフォルトの名無しさん
18/04/02 18:13:31.05 XIES5nIM.net
>>935
ここが技術板なのでプログラマ板で聞いてください

956:デフォルトの名無しさん
18/04/02 20:42:37.26 6Vp1brVM.net
winformsのTableLayoutPanelで2つの列を作成したとき、プログラムの実行中に左右の幅をマウスで調整することはできますか?

957:デフォルトの名無しさん
18/04/02 20:44:29.22 MPXX1X60.net
>>937
どのコントロールでもMouseDown/Move/UpイベントとSize指定ができればいくらでもできる

958:デフォルトの名無しさん
18/04/02 22:39:46.16 zzbs2RRz.net
解釈の原因は解釈者が持つ自分ルール。解釈の自由は責任を伴う
言葉風紀世相の乱れはそう感じる人の心の乱れの自己投影。人は鏡
憤怒は一時の狂気、無知無能の自己証明。中途半端な知識主ほど激昂
「真実は一つ」は錯誤。執着する者ほど矛盾を体験(争い煩悩)
他人に不自由(制約)を与えれば己も不自由(不快)を得る
問題解決力の乏しい者ほど自己防衛の為に礼儀作法マナーを要求
情報分析力の低い者ほどデマ宗教フェイク疑似科学に感化洗脳
自己肯定感の欠けた者ほど「己の知見こそ全で真」に自己陶酔
人生経験の少ない者ほど嫌いキモイ怖いウザイ憎い想定外を体験
キリスト教は世界最大のカルト。聖書は史上最も売れているト本
全ては必然。偶然 奇跡 理不尽 不条理は思考停止 視野狭窄の産物
人生存在現象に元々意味価値理由目的義務使命はない
宗教民族領土貧困は争いの原因ではなく口実動機言訳(原因帰属錯覚)
虐め差別犯罪テロ紛争は根絶可能。必要なのは適切十分な高度教育
体罰は指導力問題解決力の乏しい教育素人の独善甘え怠慢責任転嫁
死刑は民度の低い排他的集団リンチ殺人。「死ねば償える」は偽善
核武装論は人間不信と劣等感に苛まれた臆病な外交素人の精神安定剤
投票率低下は社会成熟の徴候。奇人変人の当選は議員数過多の証左
感情自己責任論 ~学校では教えない合理主義哲学~ m9`・ω・)

959:デフォルトの名無しさん
18/04/02 23:16:17.88 VPR2x1c1.net
2chビューワのスレ欄のように、listViewでマウスオーバーするとその行の文字にアンダーラインが入るようにしたいです。
やってみると、以下のサイトにそれに近い方法がけいさいされていたのですが、サイトに指摘があるように画面がちらつきます。
ListViewのアイテムがポイントで選択、シングルクリックでアクティブにできるようにする - .NET Tips (VB.NET,C#...)
URLリンク(dobon.net)
そのため、ちらつきを抑制する方法を探したところ、いろいろ出てきましたが、どこにどのコードを記述すればいいのかさっぱりわかりませんでした。
下記サイトが一番丁寧な気がしましたが、これを参考にしてもフォーム上にlistviewが出てきません。
ListViewを更新したときのちらつきを抑制する(C#メモ): amongの雑記

どうすれば、ちらつきを抑えたlistviewを作成することができるのでしょうか?教えてください。

960:デフォルトの名無しさん
18/04/02 23:17:15.94 VPR2x1c1.net
すいません、
>ListViewを更新したときのちらつきを抑制する(C#メモ): amongの雑記
についてはNGワードとなってしまいました
下記のURLのスペースを抜いたものです。
URLリンク(amonution.sb) lo.jp/article/45398035.html

961:デフォルトの名無しさん
18/04/02 23:31:51.83 MPXX1X60.net
>>940
これもどのコントロールでも同じなんだがコントロールにダブルバッファのプロパティを付け加えた新しいコントロールを作ってそれを使う
おなじdobonのサイトに「リフレクションを使って、DoubleBufferedプロパティにアクセスする」もある
URLリンク(dobon.net)

962:デフォルトの名無しさん
18/04/02 23:50:34.23 VPR2x1c1.net
>>942



963:信ありがとうございます。 初心者なもので >ダブルバッファのプロパティを付け加えた新しいコントロールを作ってそれを使う これの方法がよくわからないのです。 そのページも見たのですが、 >public class DoubleBufferingListView : ListView 以下の部分を全体のコードのどこに記述ればいいのか、記述したあとそれをどうやって使うのか、というのがそもそもわからないのです。



964:デフォルトの名無しさん
18/04/02 23:53:34.69 6Vp1brVM.net
>>938
すみません、もう少し詳しくおしえていただけないでしょうか?
もとの文では分かりづらかったかもしれませんが、コントロール中の左右の幅(比率)を変更したいです。
(デザイナ上でやるように、つまみを掴んで左右に動かすイメージです)

965:デフォルトの名無しさん
18/04/02 23:54:11.10 VPR2x1c1.net
とりあえず、namespaceの直下に貼り付けてみてビルド→うーん、エラーか
public partial class Form1 : Formの下に貼り付けてみる→動いたが、じゃあ次に何をすればいいのかわからん。
こんなレベルです。

966:デフォルトの名無しさん
18/04/03 00:03:03.60 BdcH2dSM.net
>>943
クラスとして記述してデザイナに表示されなければ新しく作ったコントロールを含めたアセンブリを一度ビルドする
dobonのどこかにもやり方あるんじゃないの
>>944
MouseDown:
マウスが押されたe.Location(をスクリーン座標に変える)を変数に記録する
決められた位置で押された場合にフラグをセットする
MouseMove:
フラグがセットされていれば現在の座標と記録していた座標の差分を計算してSizeを変更する
MouseUp:
フラグを破棄する

967:デフォルトの名無しさん
18/04/03 00:16:48.21 Bkifwxhh.net
>>946
public partial class Form1 : Formの直下に記述して、F7を押してビルドして、form1.cs[デザイン]タブを開いてみましたが、
特に何か増えたような様子はありませんでした。
ご指摘事項を正しく実行できてますでしょうか?

968:デフォルトの名無しさん
18/04/03 00:25:08.53 h9dQUiAD.net
>>946
>>937です。
分かりやすく説明ありがとうございました。明日すぐ実装してみます。

969:デフォルトの名無しさん
18/04/03 10:13:42.24 Bkifwxhh.net
すいません、これで解決しました。
System.Windows.Forms.Control のダブルバッファリングをさくっと有効にする - kawanon
URLリンク(d.hatena.ne.jp)

970:デフォルトの名無しさん
18/04/03 21:10:02.31 tN12x087.net
リッチテキストボックスのスクロールバーだけ、ドラッグしてもバーがついてこないのですが、
私だけでしょうか?

971:デフォルトの名無しさん
18/04/03 21:29:32.68 vN2mpw+F.net
業務用アプリをオサレな画面にしたいんだけどWPF使ってそこらのテーマ拾ってくるのが手っ取り早いかね

972:デフォルトの名無しさん
18/04/03 23:35:42.00 VCT3rU1H.net
>>951
WPFのテーマなんてクッソ古臭いデザインの10年近く前からメンテされてないのしかないぞ
WebかUWPで今風のフラットデザインにしましょう

973:デフォルトの名無しさん
18/04/03 23:39:30.70 LPfCppd2.net
デザインパターンって大事ですか?

974:デフォルトの名無しさん
18/04/03 23:42:17.43 TkuXyycY.net
普通は大事じゃない
メジャーな一部の奴だけなぞっておけばいい

975:デフォルトの名無しさん
18/04/04 00:15:51.60 Lt0+eORa.net
>>951
Material Design In XAML Toolkitが今風で良い感じだよ。
タブが必要なら同じ作者のDragablz Tab Controlも併せてどうぞ。

976:デフォルトの名無しさん
18/04/04 00:29:06.64 scqJAZTy.net
>>953
全身シングルトンで武装して備えろ

977:デフォルトの名無しさん
18/04/04 01:35:51.04 gGAYD4mI.net
ざっと知っておくに越した事は無い
使うかどうかは別としてね
むしろ、「これはやるな」っていうアンチパターンを覚えた方が良いかもだ

978:デフォルトの名無しさん
18/04/04 02:58:58.46 3/OGlZbi.net
バグってハニー

979:デフォルトの名無しさん
18/04/04 07:59:24.78 ClxMGJax.net
material designとかタッチメインならいいけど、マウスメインのデスクトップアプリならmaterial designはスペースが無駄すぎる

980:デフォルトの名無しさん
18/04/04 20:33:02.49 n4eM316R.net
excelファイルを操作する必要があり、いろいろ調べたらclosedXMLを使うのが良さそうという
結論に達したのですが、詳しい解説のあるサイトや書籍はないでしょうか。
ファイルの開き方、セルの参照方法などは普通に見つかるのですが、提供されている
メソッドの一覧とか、発生する例外とか、実用上知っておくべきことを知りたいのです
(主にエラートラップをするためです)
公式ドキュメントがどこにあるかすら発見できなかった程度の英語力ですが、ドキュメントの
ありかを教えていただければ、辞書を引きながらでも調べてみます

981:デフォルトの名無しさん
18/04/04 20:50:20.08 K+0BZuJc.net
Excel操作はCOM Automation以外には手を出すな
地獄を見ることになる

982:デフォルトの名無しさん
18/04/04 20:53:47.86 Uk0C/m1f.net
ClosedXMLはマジ大変

983:デフォルトの名無しさん
18/04/04 21:05:58.11 Ft6CGKk+.net
村の禁忌に触れたような言い様だなw

984:デフォルトの名無しさん
18/04/04 21:27:26.09 mQqkiub7.net
泣く子はいねかー

985:デフォルトの名無しさん
18/04/04 21:30:08.25 PCVfDfH6.net
ExcelのCOMオートメーションはサーバーでの動作保証が無い時点でゴミなんすよ

986:デフォルトの名無しさん
18/04/04 21:32:26.97 BmbE00Mi.net
>>960
URLリンク(github.com)
使ったことないけどExcelDataReaderも速さの面ではいいってどっかの記事で見た
URLリンク(github.com)

987:デフォルトの名無しさん
18/04/04 22:21:19.70 noE6VTyE.net
エクセルファイルなんてグレープシティのスプレッド買えば一瞬で終わるだろ

988:デフォルトの名無しさん
18/04/04 22:50:52.54 OrTn2AQm.net
WPFってどういう用途なら使うべき?
文献やネット検索が少なくて使えん

989:デフォルトの名無しさん
18/04/04 23:00:46.54 T8BktjHU.net
EPPlus

990:デフォルトの名無しさん
18/04/04 23:21:00.13 Lsgd0/8M.net
>>968
いかなる用途でも使うべきではない
MSの推奨はElectronとASP.NET

991:デフォルトの名無しさん
18/04/04 23:34:42.99 Lt0+eORa.net
やたらElectron推す人いるけど、言うほどMSが勧めてるかなぁ

992:デフォルトの名無しさん
18/04/04 23:42:42.72 9CBA0Lmr.net
Electronは縦書きエディタすら作れない駄目なやつ
表示はどうにでも出来るが入力が機能的に絶対無理とか俺が費やした半日を返せよ

993:960
18/04/04 23:46:48.80 n4eM316R.net
>>961-966
触れてはいけないものに触れてしまったかのような反応ですが、なんとかドキュメントを
読んで頑張ってみますわ・・・
>>967
趣味で書いてたVBAマクロをスタンドアロンに書き直したい(データだけexcelファイルから
流用したい)という用途なので、万円単位の買い物は無理です、残念

994:デフォルトの名無しさん
18/04/04 23:48:56.91 v0eOpRGB.net
>>969
EPPlusは早いし使いやすいよね

995:デフォルトの名無しさん
18/04/05 02:05:31.70 G4evJUNh.net
>>972
縦書きはWPFも非対応だろ

996:デフォルトの名無しさん
18/04/05 08:55:29.27 3wDwo2/L.net
MSがPWAに手を出したから、類似技術のElectronは始まる前にMSでは終わった

997:デフォルトの名無しさん
18/04/05 10:13:54.51 c77DGTlb.net
コンソールとフォームしか作ったことないけどまだまだ�


998:「けますか?



999:デフォルトの名無しさん
18/04/05 11:09:05.32 796HNo8s.net
趣味ならどうでもいい
職業ならWebできないと仕事ない

1000:デフォルトの名無しさん
18/04/05 12:00:33.19 D2y+fK6k.net
てっきり今後はWPFが主流になると思って使ってみたけど、
情報がネットに少なすぎてまいったわ

1001:デフォルトの名無しさん
18/04/05 14:16:56.73 +3oTwv9E.net
趣味で作ってるから問題ないわ

1002:デフォルトの名無しさん
18/04/05 21:48:57.38 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:デフォルトの名無しさん
18/04/05 21:57:03.35 dUUr3xK4.net
>>981
いや、例だと
回答してもこれは違う実は書いてないけど
こういう問題があって駄目だの
小出しでどんどん出るから
ピンポイントでこの問題を解決したいってのを書いて

1004:デフォルトの名無しさん
18/04/05 21:58:19.97 M7HPB+1x.net
do while
int.TryParse

1005:デフォルトの名無しさん
18/04/05 21:59:25.26 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:デフォルトの名無しさん
18/04/05 22:04:19.96 IVUDpQN0.net
iを0で初期化するのもやめたほうが良かったな

1007:デフォルトの名無しさん
18/04/05 22:11:00.58 2ZtD67QF.net
>>982
すいません、ピンポイントで課題に直面しているのではなくて、勉強中で疑問に思ったので
質問しました
例えばファイルオープンで存在しないファイル名を掴まされたとか、テキストファイルを想定
しているところにバイナリを噛まされたとか、そういうケースのリトライをどうやって実装するのかと
疑問に感じたのです

1008:981
18/04/05 22:19:06.91 2ZtD67QF.net
>>984
このソースは理解できましたが、>>985はどういう意味でしょう?
私は921でもあるのですが、この時指摘いただいたとおり、iを初期化しておかないと
未割り当てとしてコンパイル通りませんが

1009:デフォルトの名無しさん
18/04/05 22:24:09.13 dUUr3xK4.net
>>986
ファイル読み込みに失敗しました。
Windowsを終了します。

1010:デフォルトの名無しさん
18/04/05 22:36:19.31 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:デフォルトの名無しさん
18/04/05 22:36:33.86 796HNo8s.net
>>986
そんなもん具体的に何をどうリトライしたいのかによる
それが明確になってるならそれをそのまま実装するだけだ
ネットワークエラーのようにそのまま自動的にリトライ可能なエラーならある程度決まったパターンがあるけど、
>>986のように条件を変えない限りリトライしても必ず失敗するケースでは個別に考えるしかない

1012:デフォルトの名無しさん
18/04/05 23:38:35.52 IVUDpQN0.net
>>987
この場合は while を抜けたときは必ず i に値が代入されているとコンパイラが判断できるので通る
URLリンク(ideone.com)

1013:981
18/04/06 06:10:19.26 e2Dy7HRM.net
>>989
私の学習では、まだ
Func<bool> tryAskNumber = () =>
この書き方が理解できていないのですが、これでやっているのは例外の処理ではなくて
boolでメソッドの戻り値を評価して処理を繰り返しているのですね?
抽象的な質問だと言われればそのとおりなのですが、エラーが発生したときに例外を
返してくるメソッドを使っているときに、正常処理ができるようになるまで同じ処理を繰り返す、
というケースの質問でした
条件を変えるとかは本質的な話ではなくて、「例外が発生しなくなるまで繰り返す」という
処理フローそのものの質問です
>>984で、break文でtryの中からwhileブロックを抜ければよい、と理解できたので十分です
(tryブロックから、その外側のwhileを抜けられると思ってなかったので躓いてました)
数字入力を取り上げたのは、例として単純で、言わんとすることがすぐに伝わるかと思った
だけです
>>991
>>984
の var i=0; を var i; にしただけだとエラーになりましたが、int i; なら通るんですね

1014:デフォルトの名無しさん
18/04/06 11:09:07.04 iz5pUoek.net
>>981
例外が出たらアプリケーションを止める
ファイルオープンだとしてもそれは変わらず、存在しなくてリトライしたいなら以下のような事前チェックをするべき
if(存在していない)continue;
ってのが理想だけどファイル系のエラーってたくさんあるし、確認しずらいのもあるからtry-catchを使わないのが現実的じゃないことも
メソッドが例外を出すのは使ってはいけない使い方をしているということなので、使っていい状態か確認してから呼び出すよう心がけるべきかな

1015:デフォルトの名無しさん
18/04/06 11:31:23.65 KffLTaJD.net
foreach(var a in XXX)
{

みたいなことを可能にするためには
XXX はどんなクラスを継承してないといけませんか?
(何が必要か)
たとえば、XXX がDataRowCollection 型だったら
foreach(DataRow a in XXX) とやらないと怒られてしまいます。
DataRow[] だったら、var が使えます。
この違いは一体なんだろう(なにが必要なのかと)、と

1016:デフォルトの名無しさん
18/04/06 11:39:53.65 QmpxvPzQ.net
ジェネリックインターフェイスを実装してるから

1017:デフォルトの名無しさん
18/04/06 11:44:13.58 19AXhYIg.net
IEnum~だっけ

1018:デフォルトの名無しさん
18/04/06 11:54:13.71 KffLTaJD.net
つまり、DataRowCollection は
IEnumerable を継承しているから、foreach の in に使えるけど
IEnumerable<T> は継承してないから foreach(var は許されない
ということですか

1019:デフォルトの名無しさん
18/04/06 12:11:24.19 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:デフォルトの名無しさん
18/04/06 12:42:38.82 bxzO13cU.net
>>994
継承は関係ない
GetEnumeratorってメソッドがあればok

1021:デフォルトの名無しさん
18/04/06 15:01:40.67 Mgh91ASd.net
へー

1022:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 33日 23時間 52分 35秒

1023:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch