1 名前:名無C mailto:sage [2019/03/07(木) 06:35:41.12 ID:6L3KEJfe0.net] !extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part93 mevius.5ch.net/test/read.cgi/tech/1492818720/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part141 mevius.5ch.net/test/read.cgi/tech/1544839627/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://docs.microsoft.com/en-us/dotnet/standard/class-libraries referencesource.microsoft.com/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
400 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 21:12:48.03 ID:QwWDImoN0.net] >>391 ピクセルを書くなら Paint だろ。 https://www.youtube.com/watch?v=IYLm8uclr0I
401 名前:デフォルトの名無しさん [2019/04/17(水) 21:28:00.17 ID:WkJZEAk70.net] pictureboxかpaintですね ありがとうございます
402 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 00:15:51.35 ID:xpC+XoNH0.net] textboxで描く
403 名前:デフォルトの名無しさん [2019/04/18(木) 06:13:29.99 ID:VndYiJ+Y0.net] コントロールとクリックイベントはどのような関係になっているんでしょうか。 コントロールは関数で、そのローカル関数がクリックイベントでしょうか?
404 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 08:27:46.76 ID:KcatLawH0.net] インテリセンス表示してみろ vscodeとかならリファレンス表示しろ Control "クラス" って書いてあるだろうが
405 名前:デフォルトの名無しさん [2019/04/18(木) 10:05:51.26 ID:VndYiJ+Y0.net] クラスですか ごめんなさい
406 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 17:04:33.74 ID:/n+AA5ti0.net] >>399 クリックイベントなどのイベントはそのクラスのデリゲートな
407 名前:デフォルトの名無しさん [2019/04/18(木) 18:55:27.19 ID:VndYiJ+Y0.net] デリゲートって語をはじめてしりました
408 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 19:28:26.95 ID:fqeeOSlB0.net] デリケートな話題だからね
409 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 19:38:07.87 ID:cTBQXOBu0.net] デリケートゾーンの話ですか?
410 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 19:57:39.62 ID:YCaR8eKbM.net] 最初は、関数ポインタ+アルファぐらいに思っておけば 後で騙された〜になるけど
411 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 23:09:25.88 ID:4whWZ0bM0.net] >>400 イベントとデリゲートは全く同じじゃないけどな
412 名前:デフォルトの名無しさん mailto:sage [2019/04/18(木) 23:33:46.05 ID:xpC+XoNH0.net] ポインタなんて今時通じるのか?
413 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 09:21:10.96 ID:okUcwqho0.net] Javaでnull参照した時にNullPointerException投げてくるうちは現役だろ(適当
414 名前:245 mailto:sage [2019/04/19(金) 12:51:17.11 ID:5BNgMycMM.net] ぬるぽ
415 名前:デフォルトの名無しさん [2019/04/19(金) 16:10:17.23 ID:OM7ktdHt0.net] ぬるぽ
416 名前:デフォルトの名無しさん [2019/04/19(金) 21:56:33.56 ID:5QVRwjzm0.net] List<T>から要素を1つずつ要素を取り出して処理し、例外が起きたらその要素だけリストから消したいんだけどさあ なんかいい手段ってないのかな? 雰囲気としてはこんな感じのが書きたいんだけど・・・・おらの頭じゃうまく書けんだ・・・・ foreach(var o in listOfObject){ try{ 例外処理以外では対処が難しい怪しい処理(o); } catch{ 例外が起きた項目だけlistOfObjectから消したいが、ちゃんとforeachも回って欲しい(); } }
417 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 22:02:58.03 ID:MllfoE8V0.net] 新しいList<T>作ってcatchしたときにAddして foreach終わった後でRemoveしていく
418 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 22:04:41.49 ID:4Fr35pSP0.net] >>410 foreachじゃなくfor (i = listOfObject.Count; i > -1; i--)とかじゃだめなのか 頑張ってforeachにしてもめんどくさくなるだけの気がする
419 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 22:04:44.06 ID:MllfoE8V0.net] var erroredItems = new List<Hoge>(); foreach (var item in originalList) { try { ... } catch { erroredItems.Add(item); } } foreach (var item in erroredItems) { originalList.Remove(item); }
420 名前:デフォルトの名無しさん [2019/04/19(金) 22:09:40.78 ID:5QVRwjzm0.net] ありがとう こうやってやるもんなのか
421 名前:デフォルトの名無しさん mailto:sage [2019/04/19(金) 22:27:07.32 ID:i0tIRf8t0.net] listOfObject.RemoveAll(obj => { try { ・・・・・・なんか処理 return false; } catch { return true; } });
422 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 00:02:36.27 ID:/zNBD6gY0.net] リストに追加前にtry処理したらダメなん? それができないなら俺も415のやり方が良い
423 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 00:10:17.26 ID:4fcRoJkza.net] public class MyUtil { public static bool Try(Action a) { try { a?.Invoke(); return true; } catch { return false; } }} var b = a.Where(x => MyUtil.Try(() => ThrowableMethod(x))) .ToList();
424 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 06:45:01.92 ID:eu9xvtsyM.net] >>408 ガッ
425 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 06:45:18.46 ID:eu9xvtsyM.net] >>409 ガッ
426 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 08:09:20.70 ID:u/QGNgma0.net] このスレ的にはぬるぽではなくぬるりなのか。エロいな。
427 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 08:43:35.43 ID:ShWYWHRt0.net] 配列のソートのアルゴリズムが難しくて覚えられないんですが 簡単な書き方はりますか?
428 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 08:52:13.85 ID:tgvbScEyM.net] >>421 プログラミングには適性があります。 貴方には向いていません。
429 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:08:29.42 ID:Q85hwvCt0.net] >>410 foreach(var o in listOfObject){を foreach(var o in listOfObject.ToArray()){ と配列にコピーしてから実行するのが定石です そのループの中では既に列挙は終わっているから listOfObjectにAddしてもRemoveしても例外は発生しないし列挙の順番にも影響を与えません
430 名前:デフォルトの名無しさん [2019/04/20(土) 09:12:26.10 ID:Q8Lkjfvy0.net] >>421 一度リストで書いて、配列だとどう書くだろう?と考える。 アルゴリズムって基本リスト前提だからね。
431 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 09:15:16.95 ID:dmSDGLr5a.net] >>424 いやソートアルゴリズムの殆どは特定のインデックスに対するランダムアクセスにO(N)を仮定するから配列前提だぞ
432 名前:425 mailto:sage [2019/04/20(土) 09:15:47.20 ID:dmSDGLr5a.net] 間違えたO(1)
433 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:09:52.47 ID:IppyQHdna.net] >>421 今時そんなの覚える必要あんまりない気もするけど、 試験勉強ならがんばって覚えるしかないね >>423 そもそも列挙と同時に削除をするって発想が筋悪。 別に列挙後ゆっくり削除すりゃあよい訳で、>>413 がやってるように2つを分離する方が 考え方として自然で分かりやすいと思うけどね
434 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 12:52:51.24 ID:XrXcMVKPd.net] >>415 が一番シンプルだな
435 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:49:32.83 ID:ajzSwZvNd.net] 処理と例外が出たものを除去は別の仕事だから処理も分離してるほうが好き
436 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:51:03.66 ID:4fcRoJkza.net] そもそもフィルタかけて何に使うんだ?
437 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 13:53:51.78 ID:LQSO4VHxd.net] >>415 が質問者のしたいことにドンピシャなのに初心者スレだからラムダ式にアレルギーある奴が多いのかな
438 名前:デフォルトの名無しさん [2019/04/20(土) 14:01:01.21 ID:bN8wmmjE0.net] 一番まともな解答にはレス付けないのが2ちゃん式
439 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 14:06:22.07 ID:axr9T2Wu0.net] >>431 >>410 の処理の目的が条件に合わない要素の削除なら>>415 がシンプルで良いけど、 全ての要素に処理をするのが目的で削除はおまけって場合は、>>415 だと本来の目的が分かり辛い。
440 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 14:19:22.63 ID:rcvSJkam0.net] まず、2分探索を、2分ヒープで作れば? O(log N) 2^10 = 1,024 だから、千のデータを、10回で探索できる。 2^20 = 百万 のデータは、20回! リストは、次の要素しかわからないから、ランダムアクセスは、O(N) になる。 例えば、1から5を見つけるのに、1,2,3,4,5 と、リンクをたどらないといけない O(1)にするには、アドレスは計算式で求められるものだけ。 各要素が4バイト使うなら、1が100番地として、5は116番地みたいに
441 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 16:56:48.87 ID:ShWYWHRt0.net] >>427 覚える必要ないんですか…List型のソートメソッドを使っていても後々問題にならないですかね
442 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 17:40:05.04 ID:tqoqa3JD0.net] >>435 基本的なデータ構造とアルゴリズムは一通り理解して自分で書けるようになっておくといいぞ。 標準的な物はライブラリ等で用意されているから実際に業務等でコードを書くときはそれを使うが、独自の問題の解法を自分で考える際に、適切な速度や使用リソース量と工数の兼ね合いで良い方法を選択するには、基本は一通り押さえておく必要があるよ。
443 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 20:18:25.55 ID:zIfu5btc0.net] 必要な時に必要なものを覚えるだけでOK 最初から全部覚えようとしなくてもいいよ
444 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 20:23:09.94 ID:qqngOIWj0.net] ソートに関しては基本情報処理技術者試験の教科書でも読めばいいんじゃないの
445 名前:デフォルトの名無しさん mailto:sage [2019/04/20(土) 21:14:17.27 ID:f5BR4Kwsa.net] ソートは自分なりに考えてlコードを書いてみてその後にいろいろ学ぶと勉強しやすい
446 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 08:02:20.34 ID:qTT7Abroa.net] 自前で書くソート処理と、.NET Frameworkに実装されてる(Microsoftのプロフェッショナルが実装した)ソート処理、 どっちがより高速でバグが少ないと思う? https://referencesource.microsoft.com/#mscorlib/system/array.cs,d076876f5fbf4eec ↑ここから先に書かれている処理よりも優れたソート処理を自分で書けるならともかく、 そうでなければおとなしく出来合いのソート処理を利用するほうが無難だと思うけど
447 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 09:21:47.18 ID:enjRZRrv0.net] >>440 出来合いのソート処理を利用するなとか誰か言ってんの?
448 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 09:22:37.85 ID:F9kXeXwV0.net] 独習3版読んでないとーしろはqueueも実装できないし、回帰とかも理解しないんだろ。
449 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 09:39:42.10 ID:+WROkW6ha.net] >>440 初心者がソートを勉強しないと自分の書いたコードがなぜ遅いかわからない ソートが魔法か何かで何でも一瞬で並び替えられると思ってしまうと終わり そこから進展はない ソートの回数を減らすように考えたりソート自体を行わないでうまく処理することを学ばないといけない
450 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 09:43:13.42 ID:cNLTxFDL0.net] ソートがボトルネックになった時に最適化を迫られたら弄るしかないじゃんね
451 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 09:50:14.96 ID:+WROkW6ha.net] ソートがボトルネックになったらじゃなくて普通にソートを使うときには必ず気に掛けるべき ループの中にソート入れてるコードがあったりする ループ出た後に一度やればいいだけなのにと思うがそういう所に思いが至らないんだろう
452 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 10:02:50.79 ID:9BhkjmpP0.net] 今なんねーよ流石に
453 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 10:09:09.80 ID:+WROkW6ha.net] メソッドの中でソートして戻り値返してるのにもらった側でもソートしたりとか 無駄なことをする可能性はどこにでもある 他人に見られたときにこいつ馬鹿だなと思われないようなコードを書く練習をしよう
454 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 10:17:01.49 ID:HfCJ1F6L0.net] listのsortメソッドって安定ソートだっけ?
455 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 10:19:40.66 ID:8e51ow7Fa.net] >>444 それは細かい最適化よりも設計を見直すべきだと思うよ 物事を大域的に見ることができず小手先のハックだけでなんとかしようとするのはプログラマが陥りがちな非常に悪い癖だから注意
456 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 10:24:24.53 ID:+WROkW6ha.net] 小手先のハックじゃなくて基本だろ どこでソートするかなんて基本中の基本
457 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 10:25:31.30 ID:+0R+dzN2M.net] 無意味な仕事を無くすように働きかけるのではなく、無意味な仕事を無駄に最適化しようとするのは低学歴な意識高い系プログラマあるある
458 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 11:39:31.85 ID:cgZSyzeqa.net] >>448 https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.sort > This implementation performs an unstable sort ついでにいうとArray.Sortも不安定ソートで、Enumerable.OrderByと.ThenByは安定ソート
459 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 12:31:18.60 ID:3jwnQLuZ0.net] ソートはプログラムを覚えるために勉強するもので 実用上はライブラリ使えばいい ただ、勉強するネタとしては割と上質なもの
460 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 12:34:57.35 ID:y1/myRC20.net] (回答する方も)初心者スレらしくていい流れだね
461 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 12:46:19.25 ID:WZ0UQqME0.net] こういうの、listにロックをかけたのに何で同listを使う後続処理がすぐ実行されちゃうの? https://paiza.io/projects/e/EbjQiWv8ebNkW4bbkAY_YQ using System.Collections.Generic; using System.Threading.Tasks; using System; public class Hello{ public static void Main(){ var list = new List<int>(); for(int i=1; i<=1000; i++) { list.Add(i); } Task.Run(()=>{ lock(list){ Task.Delay(10000); } }); Console.WriteLine(list[123]); } }
462 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 12:51:36.48 ID:9BhkjmpP0.net] まだ、そんな産廃機能いじってんのか
463 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 13:00:01.62 ID:cgZSyzeqa.net] >>455 https://ufcpp.net/study/csharp/sp_thread.html#lock lock文はMonitor.EnterやMonitor.Exitを使った糖衣構文であって Monitor.Enterでロックを取得する(=既にロックされているなら、それが解放されるまで待つ) 例示コードではTask中ではlockしているもののConsole.WriteLine箇所はlockがないので、すぐに実行される
464 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 13:12:13.25 ID:6I4G/mIH0.net] >>455 lockの使い方が間違ってる(>>457 )のと、Task.Delay()の使い方が間違ってる。 Task.Delay()は通常awaitして使うがlockステートメント中では使えないので、Task.Delay().Wait()するか代わりにThread.Sleep()にする。 後、Task.Run()で作ったタスクが実行開始されたか考慮していないから、大抵はConsole.WriteLine()が先に実行される。
465 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 14:40:03.19 ID:T6P0EJpRd.net] >>441 俺だよ俺
466 名前:デフォルトの名無しさん [2019/04/21(日) 15:32:01.70 ID:WZ0UQqME0.net] ありがとう、このコードだと欠陥だらけなのか・・・・ 使用箇所ごとにLockが必要なのか、それとタスクより先に次の行が実行されてる可能性が高いのは全く気づいてなかった ただ、 >Task.Delay()は通常awaitして使うがlockステートメント中では使えないので、Task.Delay().Wait()するか代わりにThread.Sleep()にする。 っていうのはどういうことなの?Lock外にスレッドを返されちゃうのかしら?
467 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 16:07:55.74 ID:i587kr5jd.net] >>459 よおキチガイ
468 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 16:32:29.56 ID:RWXhngOc0.net] >>460 Task.Delay()だけだと完了を待ってないから、実質無いのと同じ
469 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 17:35:25.00 ID:F9kXeXwV0.net] >>460 ピーコックアンダーソンの非同期動画みてみればすぐに理解できるぞ
470 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 22:18:43.95 ID:rykfOnh80.net] 速度がどうとか言うんだったらc#なんか使うなよと少し思いました
471 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 22:35:33.45 ID:CLsKfNj20.net] >>464 少しってなんだよ!
472 名前:デフォルトの名無しさん mailto:sage [2019/04/21(日) 23:52:50.47 ID:SWXjVSz30.net] >>465 a little
473 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 04:23:42.26 ID:29e/0Uiq0.net] じゃあ残りの大半は何を思ってたの
474 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 19:50:45.64 ID:DglGSvcP0.net] ソートってポインタやmalloc, memcpyとか使ってこねくり回すのが楽しいのにC#だとイマイチだよね
475 名前:デフォルトの名無しさん [2019/04/22(月) 20:39:27.38 ID:Xu5D3g840.net] 独自に作成したユーザコントロールをdataGridViewのカラムに追加する処理を作成しているんですが 追加したものをそのまま削除するとうまく削除出来ず、一方のユーザコントロールが必ず画面上に残ってしまうんですが なぜでしょうか?原因がわからず悩んでいます どなたか教えてください //@ひとまず空のデータを作成してdataGridViewに格納 DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] {new DataColumn(), new DataColumn(), }); dt.Rows.Add(new object[] { "", "" }); this.dataGridView1.DataSource = dt; //Aユーザコントロール1をdataGridViewに追加 UserControl1 userControl1 = new UserControl1(); this.dataGridView1.Controls.Add(userControl1); userControl1.Location = this.dataGridView1.GetCellDisplayRectangle(0, 0, true).Location; //Bユーザコントロール2をdataGridViewに追加 UserControl1 userControl2 = new UserControl1(); this.dataGridView1.Controls.Add(userControl2); userControl2.Location = this.dataGridView1.GetCellDisplayRectangle(1, 0, true).Location; //C追加したユーザコントロールを削除→何故かユーザコントロール2だけが残る dataGridView1.Controls.Clear();
476 名前:469 [2019/04/22(月) 20:40:58.08 ID:Xu5D3g840.net] ちなみに私が試したのはvisualStudioの2017です
477 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 20:42:29.96 ID:5zGuWDFU0.net] c#だと遅くて無理みたいな高尚なプログラム触ってないからよくわからん cppとc#でどれくれい違うん?
478 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 20:52:55.67 ID:doLks5OSd.net] >>471 何するかによるし言語仕様理解せずにコーディングすればC++だろうがC#だろうが遅くはなる 早くしたけりゃどの言語だってコンパイラが吐くコード見ろになるし極論アセンブラしてろになる シビアな演算速度求められるようなソフトじゃなきゃ気にするような速度は無い 個人的にいろいろ開発してて速度面で困ったことはない
479 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 21:35:41.32 ID:puVU3XKCM.net] 特定のアプリを監視して表示された文字(画像)をテキストにするアプリ作ったけど c#だとチェックに1秒、c++とGDIのDLLだと0.01秒とかそんな感じだった c#で作って必要ならc++にコンバートするのでいいと思う
480 名前:デフォルトの名無しさん mailto:sage [2019/04/22(月) 21:59:37.22 ID:a2wjQuhnM.net] >>468 unsafe使えば
481 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:01:21.36 ID:5LmBAPnu0.net] 画像処理とかその部分はunsafeとかcだろ。それぐらいは当たり前
482 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:14:05.59 ID:Bc6Ot9Tr0.net] 別にC#でいくらでも早くできるけどそれしないでC++より遅いってそりゃそうだよねとしか GCの恩恵受けてunsafe使わずセーフティな状態でしょ 突き詰めたC++と突き詰めたC#なら.NETで動く分C#が不利なのは仕方ない 突き詰める必要がない部分で恩恵を受けられるんだから、処理速度以外にメリット感じないなら速い言語やればいい 言語なんて所詮道具なんだから適材適所
483 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:15:59.36 ID:lAbUfbw70.net] sleepが1ms単位指定なのに平気で30msくらいかかったりする
484 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:21:34.72 ID:Qu51xl5v0.net] >>477 Windowsの仕様なのでC#と関係なく発生するよ
485 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 00:22:35.63 ID:1xhRm/Xtd.net] OSの内部クロックのせい
486 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 02:07:58.81 ID:TPVsn91QM.net] >>473 そりゃあおまえさんのコードが糞なだけや
487 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 02:09:14.72 ID:V6IaHlzqa.net] OSにクロックはないでしょうw いやスケジューリングとかタイムスライスとかそんなことが言いたいんだとは思うけど
488 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 02:35:38.55 ID:1xhRm/Xtd.net] >>481 え…
489 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 07:53:20.75 ID:5v63vvPIa.net] TickCountの事だと思う。
490 名前:デフォルトの名無しさん [2019/04/23(火) 11:11:38.25 ID:D0U8cwP90.net] awaitのついた文の次の文を実行する際に、await前と同じスレッドに帰ってきてもらうことってできないの?
491 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 11:25:52.45 ID:NBcK336D0.net] 元のスレッドがそういうことできる機能を持ってればできるよ WinFormやWPFのGUIスレッドはメッセージループで実現してて それらの場合はGUIスレッドでawaitすればGUIスレッドに戻ってくるのが既定だし
492 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 12:18:02.90 ID:m6tbNaeWM.net] Pythonでカラー画像をRGBごとに分割して出力するスクリプトを書いたんだけど、 opencv使わずにC#でも出来るのかな? C#でもnumpyみたいなの無いの?
493 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 12:20:58.93 ID:4ETsFZLA0.net] どんだけ馬鹿なんだよ
494 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 13:00:40.13 ID:N4fQ2uHcd.net] >>486 numpyってrubyですか?
495 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 15:41:23.24 ID:elaW7zc+0.net] >>486 まんまは無いけど部分的にだったら何らかのライブラリで補完できるんじゃないかな? これとか https://numerics.mathdotnet.com
496 名前:デフォルトの名無しさん [2019/04/23(火) 16:29:44.88 ID:D0U8cwP90.net] >>485 コンソールアプリ等だとなかなか難しいんかな
497 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 16:33:48.41 ID:EaCRsjQU0.net] >>490 Task.WaitAnyとかでできんもんか?
498 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 17:58:47.89 ID:xFm0RmkHa.net] >>484 いやいや最初から同じスレッドですからww そもそも同一メソッド内で別のスレッドを起動することはあっても 実行中に途中のスレッドに切り替わるとかそんなのありえへんwww
499 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:05:14.26 ID:hvzt5+/sd.net] >>492 しょうもない嘘をつくな
500 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:28:13.89 ID:2vLu2U8QM.net] 誤解が誤解を生む 仕様について理解が足りない
501 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:35:04.22 ID:xFm0RmkHa.net] ネタじゃなくて本気で変な誤解してるのか... メソッドの途中で行が変わると別のスレッドで実行されるとかそんな言語怖くて使えないよwww
502 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:36:05.31 ID:2vLu2U8QM.net] お前は勘違いしてる GUIとCUIで仕様が違ってる
503 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 19:50:14.81 ID:2vLu2U8QM.net] await/asyncは単なるTask非同期処理を簡易的に書ける糖衣構文 次にawaitの次をどのスレッドになるかはその時の状態次第 GUIではそれでは困るのでデフォルトで同じスレッドが処理をするようにしてあるだけ
504 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:19:35.25 ID:xFm0RmkHa.net] 訳のわからん勘違いをしてるのはどっちだよ 自信満々で馬鹿じゃないマジで
505 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:30:14.95 ID:aIitEIPQ0.net] https://ufcpp.wordpress.com/2012/11/12/asyncawait%E3%81%A8%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E5%88%B6%E5%BE%A1/
506 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:30:27.32 ID:PlCSQgU2M.net] deligate
507 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:36:54.48 ID:iDnak3xha.net] >>495 https://ideone.com/7wVOXT
508 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 20:41:16.72 ID:xFm0RmkHa.net] 勘違いをしているのは俺の方だった... 申し訳ないですw
509 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:04:08.70 ID:2vLu2U8QM.net] すなおでいいんでない?
510 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 21:19:00.48 ID:7omDh/oid.net] 煽る時点で目糞鼻糞
511 名前:デフォルトの名無しさん [2019/04/23(火) 21:57:22.24 ID:D0U8cwP90.net] 同じスレッドに戻ってきてもらうのに、簡単な方法ってないのかな・・・・
512 名前:デフォルトの名無しさん mailto:sage [2019/04/23(火) 22:10:23.58 ID:iDnak3xha.net] >>505 >>490 を見るに、コンソールアプリで特定スレッドで処理したいみたいだけど、どういった理由? GUIなら、時間がかかる処理は別スレッドで、画面更新は絶対にUIスレッドで、といった使い分けがあるけど CUIで特定スレッドを意識する理由がちょっと思いつかないんだ
513 名前:デフォルトの名無しさん [2019/04/23(火) 22:42:29.23 ID:D0U8cwP90.net] >>506 WebAPIサーバを作りたく、その中で扱うデータについてトランザクション処理みたいなことをしたかったんです 通信関連でAwaitが多用されている中でも、データのロックをできるだけ減らしたい、またうっかりミスしてロック外に出ないでほしいと思ったんです
514 名前:デフォルトの名無しさん mailto:sage [2019/04/24(水) 00:21:10.86 ID:9Dlmymg8a.net] >>507 それを聞いても、「特定スレッドで絶対に処理したい」が主目標にはならない気がする 「ロックにReaderWriterLockSlimを使っていて、ロック取得と解放は同じスレッドで行う必要がある」のような状況ならまだ分かるんだけど もしもこの状況であるなら、SemaphoreSlimでロックするようにすれば、WaitOneAsyncで待つスレッドと、Releaseするスレッドを別にできる(=間でawaitできる) 万一本当に何か理由があって特定スレッドで処理を続けたいのなら、Taskをawaitするのでなく.Wait()で待つようにすれば、スレッドは切り替わらなくなる > うっかりミスしてロック外に出ないでほしい これが「ロックを取得したけど、解放を忘れる」ことを指すのであれば try {} finally {} や、ラップクラスを作ってIDisposable実装してusing() {} するのが対策になるかもしれない 取得と解放がメソッドを跨いだりするなら面倒くさくなるけど……
515 名前:デフォルトの名無しさん mailto:sage [2019/04/25(木) 23:50:01.61 ID:1l/c830P0.net] https://ideone.com/TM1zJh if (ob.volume == volume)この部分なのですが 左辺は引数で取ったobのメンバ変数であることは分かるのですが右辺はどのメンバ変数なんでしょうか? 入門書のコードなのですが…
516 名前:デフォルトの名無しさん [2019/04/25(木) 23:52:47.61 ID:LJHMbymK0.net] >>509 6行目
517 名前:デフォルトの名無しさん mailto:sage [2019/04/25(木) 23:54:19.01 ID:LJHMbymK0.net] いや、thisって答えた方が良いのか
518 名前:デフォルトの名無しさん mailto:sage [2019/04/25(木) 23:59:26.79 ID:8Sf9N2Ww0.net] 19行目にも同じ構造があるけどそっちはすんなり入ったんだろうか
519 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 00:01:25.44 ID:6Aa9jI4a0.net] >>510 メソッドを呼び出したob1のメンバってことですかね? 理解できました。ありがとうございます
520 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 23:30:08.64 ID:9lAtl2Yi0.net] コンストラクタ内で例外をthrowするのはご法度ですか?
521 名前:デフォルトの名無しさん mailto:sage [2019/04/26(金) 23:43:18.42 ID:p/I2x8fjd.net] >>514 定石ですよ [] [ここ壊れてます]
523 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:06:35.36 ID:Ern7/KCha.net] >>514 ご法度ではないし、むしろインスタンスを正しく構築できないなら積極的にthrowしてほしい 例えばStreamReader(String)の場合、ArgumentException系列から FileNotFoundExceptionやDirectoryNotFoundExceptionのIOException系列までthrowする
524 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:38:42.27 ID:yEc5G7yUM.net] 悪いとは言わないけど、最近はあまりコンストラクタで例外投げるような処理やらなくなったなあ 何故かと考えたら、async/awaitのせいだと気付いた コンストラクタではawaitできないから、昔みたいにコンストラクタでファイル読んだりするのはほぼ無くなった
525 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 00:45:53.35 ID:k66IsG4/a.net] あとDIと相性が悪い DI使ってると、コンストラクタで例外投げたらそもそもアプリが起動しない
526 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 02:44:50.91 ID:ni4YCIMc0.net] ドキュメントもコンストラクタで投げる可能性のある例外一覧が必要になるけど 実際あげきれなくて手薄になりがち そうなると設計できない 例外の種類でその後の動作をハンドリングしたいときに動かしてみて キャッチの種類を分けるしかない 仕様書に書いてあるこのエラー出せないんすけど? このときの例外増やしてもらえます? →入れた引数から判断できるでしょ?とかキチガイかよって
527 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 02:55:41.53 ID:TtZ/uEZc0.net] >>519 例外の種類を完全に把握できないのはコンストラクタに限ったことではないだろ
528 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 03:07:26.16 ID:ni4YCIMc0.net] >>520 そもそも例外嫌いなんよ俺 ビジネスロジックだとほぼ全部把握しないといけないのに 丸っと渡されると困るだけじゃん
529 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 03:45:53.67 ID:TtZ/uEZc0.net] その例外を全部把握しなきゃいけないというのがアホな考えなんだよ 予期できないのはExeceptionとしてまとめてキャッチして処理しとけばなんの問題もないね
530 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 06:32:15.89 ID:QhVWSAZD0.net] どっちも乱暴だな
531 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 07:35:46.92 ID:3SWE0tmA0.net] 例外は握りつぶすのが定石
532 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 08:12:46.03 ID:PiMoxWjk0.net] >>522 設計書になんて書くん? 俺んとこ例外使うなら設計書に書いてない例外出しちゃうと大変なんだよ MSのドキュメントも全部はねーし マジ厄介 でもお客の言い分もわかる気がするんだよね 流石に何が来るかわかりませんってのはどうなの? って思う
533 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 08:15:07.62 ID:PiMoxWjk0.net] >>522 ああ、だから例外返さないよねそれ
534 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 08:34:22.02 ID:9yG2LI1yd.net] 例外の発生要因なんてあらゆるものがあるんだから全部明示しろというお客の主張が不条理 設計書に例外全部明示しろとか要求されたことないね
535 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 08:51:37.56 ID:yNGf8etVa.net] 規約が足かせになってる場合は無視したほうがいい スキル低い人が大昔に作った規約かもしれないし 例外は復旧可能かつ復旧したいものだけキャッチして対処 それ以外はアスペクトでまとめて処理すればいいよ
536 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 09:11:45.63 ID:ibduGkrL0.net] コンストラクタで例外がってC+出身者みたいだな
537 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 09:25:13.44 ID:YyIkYDM+0.net] >>529 .NET Frameworkクラスもコンストラクタで例外投げるのに?
538 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 09:26:49.68 ID:k66IsG4/a.net] >>529 C++のその説は迷信だけど、C#では事実としてawaitができないという重大な制約があるからなあ コンストラクタで例外を投げてはいけないわけではないが、そもそも例外を投げる可能性のあるような処理をコンストラクタでやらせることができるケースが少ないのは間違いない
539 名前:531 mailto:sage [2019/04/27(土) 09:33:56.80 ID:k66IsG4/a.net] もちろん、ArgumentNullExceptionのようにバグを検出してアプリを落とすことを目的とする例外は別だよ そういうのを除けば、例外を投げうる処理ってのはだいたいIOを含んでいてawaitが必要になるケースが多い
540 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 09:36:37.55 ID:yyWoHVeQa.net] いまだにオブジェクト倶楽部のをベースにしたC#コーディング規約なのかな 10年くらい前の時点でも悪評ぷんぷんだったのにどれだけ時代遅れなことしてるんだ コーディング規約作ってる奴のスキルが低い/古すぎ/多言語の知識しか持ち合わせてなくて クソな規約になってることはよくある コンストラクタで例外吐くのが望ましくないのはC++の話であってC#ではそんなこと全然ない 例外すべて列挙しなきゃいけないのはJavaの話であってC#にもそれを持ち込むのはナンセンス でも大抵規約のクソさ加減と規約作成者・組織の老害度は比例するんだよな 指摘しても直ることはないだろうから「これはクソなコードだ」と自覚を持ったうえで 規約通りのコードを書くしかない
541 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 11:46:22.17 ID:V1c8eqNrM.net] >>527 それって制御できないって言ってるんだよね? その時はtry catchで握り潰せばいいんだけど 君はどうなればいいと思ってるの? ある日例外が起きてアプリが止まっちゃってもそれは時代の流れでしょうがないと思ってるってこと?
542 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 12:00:49.48 ID:ASguEO4td.net] >>534 予期せぬ例外が起きたら発生箇所のスタックトレースを表示させてバグ修正に役立てるよ 客もその画面キャプチャを送ってくれる Execeptionにはそういうデバッグに役立つ情報入ってるからマジ便利だわ
543 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 12:01:52.85 ID:reMuF7mTd.net] >>535 客にスタックトレース見せちゃだめw
544 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 12:22:00.72 ID:yNGf8etVa.net] コンストラクタで例外を出すのが妥当なら出すべきだ しかし、例外を出すような責務は得てしてファクトリやリポジトリなど外部のクラスが担うことが多い傾向にある なので正確に言うと、オブジェクトの生成という責務を分離してない汚いプログラムはダメだ、なんだけど それが誤って拡散した結果、コンストラクタで例外を出すプログラムはダメだ、に拡大解釈されてしまったのだろう // コレは生成責務が分離されてないからダメだ class Hoge { public Hoge(int id) { var dto = DB.FindHoge(id); // 例外なげる m_id = id; m_name = dto.name; } // コレは責務が分離されてるからOK class HogeRepository { public Hoge Find(int id) { var dto = m_db.FindHoge(id); // 例外なげる return new Hoge(id, dto.name); // 実装次第で投げたり投げなかったり } // コレもOK 例外投げるが責務としては妥当 class Hoge { public Hoge(int id, string name) { if (id < 0) throw new BadHogeFormat("id"); if (UTIL.NotMatch(@"^H\d{8}$", name)) throw new BadHogeFormat("name"); m_id = id; m_name = name; }
545 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 13:20:27.71 ID:rUmkpmPg0.net] >>533 > コンストラクタで例外吐くのが望ましくないのはC++の話であって そんな話は聞いたことないが?
546 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 13:38:48.88 ID:ibduGkrL0.net] C+の話は C+のコンストラクタとデストラクタの言語仕様をよく理解してない奴の誤解だから もともと正しくない
547 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 13:43:38.03 ID:bs+zTlgP0.net] >>539 お前はさっきから何の言語の話をしているんだ?
548 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 13:45:42.92 ID:ibduGkrL0.net] 話しかけるなゴミが
549 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 13:46:18.87 ID:vrUpwJdGa.net] ダメも糞も引数が不適切なら例外投げるしかないねそもそもw もちろん(注意喚起とか)何らかの意図を持ってあえてコンストラクタではなく ファクトリーメソッドやTryCreateXxxxにする方法もあるけど、 少なくとも誰が考えても引数が不適切なら例外発生が予見できるなら コンストラクタで例外投げて何も問題ない
550 名前:デフォルトの名無しさん [2019/04/27(土) 16:53:30.48 ID:hssASZhyF.net] デストラクタで例外吐くのはあり?
551 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 16:57:52.36 ID:krlg75LI0.net] どこならokとかngとかじゃなくて例外が発生したなら吐かなきゃ駄目 例外の前提を変えちゃ駄目
552 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 19:59:50.65 ID:UyCSNWt+M.net] >>543 基本的になし デストラクタの意味がなくなるから
553 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:00:47.02 ID:rUmkpmPg0.net] >>543 なし
554 名前:デフォルトの名無しさん [2019/04/27(土) 20:39:48.83 ID:ucBEJWSU0.net] デストラクタって解放し忘れたアンマネージドリソースの解放をするためにある奴でしょ? ただそれだけの処理に例外とか要る?
555 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 20:43:57.48 ID:xE/0VH9u0.net] >>547 どんな想定かわからないし入れたい人は入れればいいんじゃないの
556 名前:デフォルトの名無しさん [2019/04/27(土) 21:09:36.81 ID:ucBEJWSU0.net] C#のデストラクタは実行タイミングが不明な上に 他でキャッチできないからそのままクラッシュする事になるが それが目的なら
557 名前:デフォルトの名無しさん mailto:sage [2019/04/27(土) 22:32:08.58 ID:krlg75LI0.net] デストラクタであろうと例外が発生したなら吐くべき デストラクタで例外なら大体最終的にアプリ落とす結果になるだろうけど 普通に設計すりゃまずデストラクタで例外が必要にはならんとは思うが
558 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 07:43:44.94 ID:Rwl5KJzI0.net] そりゃどこでも例外が出りゃ吐くべきだろ。デストラクタで出た例外は握りつぶせとでもいうのかよ
559 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 08:59:56.68 ID:vQlivpSSa.net] デストラクタの例外は運用に入ったらログ吐いて握り潰すしかない 開発中にどれだけ発見しきれるかが勝負
560 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 09:42:23.56 ID:3t4t6vYZM.net] 馬鹿しかいないのかな デストラクタで例外をキャッチすべきかじゃなくて デストラクタで例外を投げるべきかだろ
561 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 09:48:33.86 ID:3t4t6vYZM.net] どうみても例外をデストラクタで握りつぶすなんて話はしてない デストラクタで挙動がおかしな場合そこから自前で例外を投げるかどうかだろ どうしてこんな前提すらわからないのか?
562 名前:デフォルトの名無しさん [2019/04/28(日) 10:20:38.37 ID:ddGaHMPJ0.net] デストラクタで例外投げるのは出来るけど デストラクタの呼び出し元はファイナライザースレッドになる故 デストラクタ以外の場所でキャッチして ログ記録したりは出来ないが、よろしいか?
563 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 10:52:59.00 ID:F7dfQde00.net] ところで、C#ってコンストラクタで例外吐いたとき、インスタンスは生成されて戻されるの? そのインスタンスのデストラクタは(実装してればどこかで)実行されるの?
564 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:01:09.54 ID:Cfig35XD0.net] >>554 お前黙ってろよ… > デストラクタで挙動がおかしな場合そこから自前で例外を投げるかどうかだろ そんな話は>>545-546 で既に終わってる 今の話は例えばデストラクタでファイルクローズした時そのメソッドで例外送出されたらどうするかって話な > どうしてこんな前提すらわからないのか? わかってないのはお前だけ
565 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:02:16.88 ID:Cfig35XD0.net] >>556 > ところで、C#ってコンストラクタで例外吐いたとき、インスタンスは生成されて戻されるの? されない > そのインスタンスのデストラクタは(実装してればどこかで)実行されるの? されない
566 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 14:33:26.09 ID:18CJ+0uF0.net] ファイルクローズなんてデストラクタの仕事じゃないからクラス設計が間違ってる もしそうせざるを得ない理由があるならアプリ終了するだけ アプリ終了されて困るなら正しくクラス設計すればいい
567 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 15:52:04.90 ID:QPV4rne2d.net] >>559 例えばの話してんだからそこに文句付けるのはお門違い
568 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:06:19.94 ID:lUhOqb6w
] [ここ壊れてます]
569 名前:d.net mailto: >>560 例えだろうがなんだろうが結論は同じ [] [ここ壊れてます]
570 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:07:43.10 ID:3i1J1gafM.net] 年甲斐もなく疲れた お前らこんな所で何をやってんだ青瓢箪か?
571 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:32:00.19 ID:+oA/oQuO0.net] ここでは例外の話でドンパチ よくのぞいてるVBAスレでもOn Errorの話でドンパチ どちらを見てるのかわからなくなってくる
572 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 17:38:04.38 ID:Cfig35XD0.net] >>559 > アプリ終了されて困るなら正しくクラス設計すればいい 具体的に書けないなら黙ってろってw
573 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:13:29.08 ID:KKCCRPTWa.net] デストラクタの中でファイル操作やクローズするのは間違ってるな そこで例外でたらどうしようもない ログ取るのも同じ
574 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:25:38.64 ID:kK/njqra0.net] メンバ変数を仕様上どうしてもDBから引っ張ってくるデータで初期化するしかなく、 コンストラクタ内でDB処理異常時に例外を吐く処理があります。 この場合コンストラクタ内では何もせず、インスタンス生成後にInit()のようなメソッドを 呼び出してもらうほうが使う側は楽でしょうか?
575 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:31:50.14 ID:uWFo9H7Wa.net] そもそもC#でデストラクタに処理を書くこと自体が基本ありえないと思うんだけど・・・ リソースの解放なら(まともな構造のソースであれば)Dispose時に済ませるだろうし デストラクタにわざわざ処理を書いて、しかもその処理が例外を引き起こすパターンって 具体的にどんなのがありうるんだ?
576 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:32:37.29 ID:lUhOqb6wd.net] >>566 コンストラクタで例外を吐いてください。
577 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:34:32.85 ID:lUhOqb6wd.net] >>564 ぜひ具体的に例示していただきたい。
578 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:39:48.98 ID:e0sCdFMHa.net] >>566 Init()を呼び忘れて使うリスクが出てくるので、インスタンス生成時に済ませたい派 ただDB関連では >>531-532 が言うように非同期処理をしたいだろうから 「コンストラクタはprivateにして、public staticなasyncファクトリを提供」が良いと思う インスタンス生成時に例外出る場合だと変数の宣言と初期化が分離するけど、C#だと初期化し忘れはエラーになるから許容範囲じゃないかな Foo foo; try { foo = CreateFoo(); } catch(BarException) { 何か復帰処理 } // 以下fooを使った処理
579 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:45:37.21 ID:3i1J1gafM.net] 器が小さい奴はすぐ引っ込みが着かなくなるから困ったものだ
580 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:46:32.36 ID:Cfig35XD0.net] >>569 MSがデストラクタからDispose呼んでるんだがw // Free any unmanaged objects here. で例外が発生するケースをどう扱うのか具体的に添削してやってくれ https://docs.microsoft.com/ja-jp/dotnet/standard/garbage-collection/implementing-dispose
581 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:47:40.42 ID:vQlivpSSa.net] >>566 >>537 の考え方が正解 そういう時はファクトリーを使うという考え方が世界標準
582 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 18:56:32.95 ID:lUhOqb6wd.net] >>572 どう扱うも何もアプリ終了させろってだけだが? ハンドリングすべきではないものをどうこうしよとしないで
583 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:02:39.46 ID:kMBz0MBMa.net] >>566 上にも書いたけど、あえてコンストラクタではなくstaticなTryCreateHogeみたいなのだけ提供して 注意喚起する方法もあると思うよ >>567 デストラクタの存在理由はClose/Disposeを忘れた場合のフェイルセーフなんで アンマネージドな共有リソースを占有するオブジェクトの場合はほぼ必須だし、 例外を投げるかどうかはともかく、デストラクタの中で例外的な事態が 発生することも普通にありえるとは思う。(例えばデバイスのクローズに失敗)
584 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:02:50.34 ID:lUhOqb6wd.net] どんなに丁寧に処理したって完全に例外を対応するなんてことは不可能 599の最後でちゃんとやれば良いokみたいに書いちゃったのが良くなかった ちゃんとやったって無理なことはある
585 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:06:45.39 ID:KKCCRPTWa.net] >>575 その使い方はダメだと思うけど…
586 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:09:47.55 ID:lUhOqb6wd.net] >>576 599じゃなくて559でした
587 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:10:36.56 ID:kMBz0MBMa.net] >>577 何がダメ? フェイルセーフって意味分かりますか?
588 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:17:31.79 ID:KKCCRPTWa.net] 無関係だけど一応答えるよ フェイルセーフって言うのは失敗しても安全な状態に落ち着くこと 例えば信号が壊れても青信号になるんじゃなくて赤信号になるような設計 ファイルクローズは別にフェイルセーフの概念と関係ない tryのfinallyはフェイルセーフじゃないよ
589 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:20:35.61 ID:Cfig35XD0.net] >>574 ああ、お前じゃ無理だったな、すまんw > アプリ終了されて困るなら正しくクラス設計すればいい とほざいてた>>559 、出てこいやー
590 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:22:21.81 ID:fIrxxOza0.net] >>572 よく読め
591 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:22:22.23 ID:JJw12cyBa.net] リソースのライフタイムの管理とリソースを使用して何かする責務を別の責務として分離したほうがいい リソースの取得だけを分離する場合はファクトリーパターンが使われる ただしこの場合はリソースを閉じる責務とリソースを使用する責務が同じクラスに混在してしまう 結果としてデストラクタでの例外といった問題が連鎖して発生する これに対応するためにはファクトリーアイソレーションパターンを使う このパターンならリソースのライフタイム管理とリソースの使用を完全に分離できる コンストラクタでもデストラクタでもリソースの開閉に由来する例外は発生しなくなる
592 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:23:12.72 ID:KKCCRPTWa.net] デストラクタでたとえば解放忘れの大きなメモリを開放するとしても その前に他で大きなメモリを確保しようとすると死ぬ デストラクタでファイルのクローズ忘れをクローズしようとしても その前に他でファイルを開こうとするとエラーになる デストラクタでいろいろ開放しても何も助けてない 役に立ったとしても偶然であって実質はバグを握りつぶしてるだけ
593 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:25:35.89 ID:KKCCRPTWa.net] 今までアンカー売ってないけど>>579 向け デストラクタで何か開放してもバグの温床になるだけ
594 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:26:43.51 ID:kMBz0MBMa.net] >>580 関係あるからw 同じことをくどくど書くのは嫌いだが、デストラクタの存在理由は コードの利用者がClose/Disposeを呼び忘れる、というヒューマンエラーに対するフェイルセーフ。 これは議論の余地はないよ
595 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:26:58.59 ID:KKCCRPTWa.net] みんなフェイルセーフって言葉を使うけど大体意味間違ってる
596 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:28:16.75 ID:uWFo9H7Wa.net] ああ、Dispose呼び出し忘れ対策のデストラクタか それなら、自分の場合は ・デストラクタには「Dispose(false)」以外書かない(trycatchもしない) ・Dispose()側が例外を投げるかどうかは解放するリソース次第 ・デストラクタの中に延々とリソース解放処理なりtry-catchが必要な処理なりを書いてるのだとすれば そのソースコードは根本的におかしい
597 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:30:31.27 ID:kMBz0MBMa.net] >>585 だから、デストラクタ「で」積極的にClose処理をするんじゃないの。 Close処理は普通にDispose/Closeに書くに決まっているわけだが、 使用者がそれを呼び忘れても最悪GCのお片付けのタイミングで Close処理が行われるようにするための仕組みがデストラクタ
598 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:32:19.82 ID:uWFo9H7Wa.net] ごめんもいっこ ・IDisposableなオブジェクトをDisposeせず使用している時点で実装不備とみなしてよい (フィールド変数だったらポカミスで解放し忘れはあるかもしれないけど、 少なくともローカル変数ならusingを意図的に使ってない時点でコーダーが悪意を持ってると判断する)
599 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:32:33.80 ID:KKCCRPTWa.net] >>586 いつまで勘違いしてるのか? フールプルーフとフェイルセーフは別物だからwww
600 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:35:22.92 ID:JJw12cyBa.net] >>590 DIに管理させるからusingもDisposeもしないという構成は非常に多い
601 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:35:29.40 ID:KKCCRPTWa.net] 自分の使ってるコードで完結してるのにデストラクタでアンマネージなどのリソースを 開放するのは間違った使い方 いくら自信たっぷりに書いてるのか知らないけど間違ってる
602 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:44:53.23 ID:JJw12cyBa.net] >>593 知らない他人が何年後かに使うかもしれない だとしたら誤った使われ方でも最低限の安全性を確保できるように作るべき デストラクタでリソースを解放するのはアリ
603 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:47:01.57 ID:Cfig35XD0.net] >>582 そんなレスしかできないなら黙ってろよw
604 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:50:07.37 ID:KKCCRPTWa.net] >>594 IDisposable無視して放置する人を野放しにしないためにもデストラクタは不要だと思うわ デストラクタが呼ばれたか呼ばれないかで意図しないタイミングで不具合が出たりでなかったりするだけだろ そんなの余計に邪魔だろ
605 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:50:40.18 ID:uWFo9H7Wa.net] さすがに自前で生成してない(解放しなくていい)オブジェクトはわざわざ解放しないよ んーと、デストラクタを書かないといけないような処理があるならDispose(false)だけ書く、んだけど なにか間違ったこと言ったかな
606 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:53:00.38 ID:Cfig35XD0.net] >>590 > コーダーが悪意を持ってると判断する) お前の判断なんてどうでもいい MSはそんな判断してないからデストラクタからDispose呼んでるんだろうし
607 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 19:54:05.58 ID:uWFo9H7Wa.net] 書く必要がないデストラクタなら書かずに済ませるというのは同意 というか普段アンマネージドリソースなんて滅多にさわらないし まともにデストラクタを書いたのはいったい何年前だろう
608 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:00:46.55 ID:KKCCRPTWa.net] どうしてもデストラクタ使うなら解放忘れを解放するんじゃなくて デバッグ中に解放忘れてるぞコラということを伝える仕組みを作るほうがまともじゃないかな? 自分の考えは>>584 がほぼすべて
609 名前:デフォルトの名無しさん [2019/04/28(日) 20:04:36.28 ID:PHvM++pOM.net] >>566 ファクトリーメソッドを作って その中でInitすれば良かろう
610 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:21:04.08 ID:JJw12cyBa.net] 解放忘れを本気で潰そうと思ったらさっき書いたようにファクトリーアイソレーションパターンを使う Task ExecuteAsync(Func<ISomeResource, Task> job) { using (var resource = new SomeResource()) { await resource.OpenAsync(); await job?.Invoke(resource); await resource.CloseAsync(); } } サービス利用者には生成も解放もインターフェースを提供しない ExecuteAsyncを通さないとリソースにアクセスできないようにすれば解放忘れを完全に予防できる
611 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:28:37.93 ID:kMBz0MBMa.net] >>591 フールプルーフ(ばかちょん)は何をやっても致命的にならない、 というニュアンスの方が強い。 この場合はどっちでもいいと思うけどね
612 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:33:15.98 ID:3t4t6vYZM.net] >>603 ばかちょんじゃなくてバカヨケだぞ 適当なこと書くなよ
613 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:37:42.11 ID:kMBz0MBMa.net] >>604 それは直訳で、日本語では昔からばかちょんと言うんだよ 昔からというか昔はかもしれん。 俺もおじいさん先生からしか聞いたことない言葉だし まあポリコレの時代だしね
614 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:39:59.68 ID:3t4t6vYZM.net] バカチョンは意味が違う
615 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 20:42:39.60 ID:3t4t6vYZM.net] バカヨケ 失敗しないような仕組み バカチョン 誰でも使える
616 名前:デフォルトの名無しさん mailto:sage [2019/04/28(日) 21:44:36.92 ID:nV7r0mI50.net] >>592 コンテナdisposeしたら、ついでに中身も自動でやってほしいよな・・・
617 名前:デフォルトの名無しさん [2019/04/29(月) 12:55:34.62 ID:pjV/Nimc0.net] 横からすまんがさあ DIにMicrosoft.Extensions.DependencyInjection使ってるんだけど、これってコンテナから生成されたオブジェクトって永遠と生き続けるの? どうやって開放するん?
618 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 13:05:11.30 ID:ehYnqzb50.net] >>609 Scopeでググれ
619 名前:デフォルトの名無しさん mailto:sage [2019/04/29(月) 13:39:51.85 ID:NUp+Ex1Ma.net] 基本的に生成元になったスコープをDisposeするとスコープ管理下のオブジェクトがまとめて消える スコープはCreateScopeで再帰的に生成できる BuildServiceProviderで作ったプロバイダーはルートのスコープに生えてるプロバイダーと考えればいい アッドシングルトンで登録したやつは親子関係にある全てのスコープで1つしか作れずルートスコープと寿命が同期 アッドスコープドで登録したやつは各スコープ内で1つしか作れず作ったスコープと寿命が同期 アッドトランジエントで登録したやつはスコープ内で何個でも作れて作ったスコープと寿命が同期 ASP.NET Coreでは暗黙的に1つのリクエストに1つのスコープを割り当てる 訂正あったらヨロ
620 名前:デフォルトの名無しさん [2019/04/29(月) 13:43:03.33 ID:pjV/Nimc0.net] Scope = Asp.net用みたいな気になっていて全然知らなかったよ、ありがとう ただDIなしの場合にusing句で書けるようなのはDIありでも簡単にかけそうだけど、オブジェクトを扱う箇所が数箇所に分かれてるときは難しそう・・・・ ScopeをDIコンテナに突っ込んだら突っ込んだでまた問題が増えるのかな・・・・
621 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:23:22.69 ID:IHLGrYrL0.net] System.Globalization.JapaneseCalendarでeraを取得しているんだけど Rが入ってこない・・・ Windows10でWindowsUpdateも最新なんだけど、何で入ってこないんでしょう
622 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:28:08.43 ID:w+F7NKD3a.net] >>613 https://docs.microsoft.com/en-us/windows/uwp/design/globalizing/japanese-era-change > To test that your application works with the new era, you must advance your computer's clock to May 1, 2019 or later. PCの時刻設定を2019/05/01以降にする必要があるらしい
623 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:38:50.44 ID:LbZ9KfXX0.net] まずまだアップデートはオプション段階だが、KB4493443入れてる? 正式なWindowsアップデートは5月以降だよ
624 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 20:45:03.73 ID:YvhWBPAF0.net] KB4493443って、Windows8.1用だったような。 ちなみに、Windows10, version1809用は「近日公開予定」だそうで。 https://support.microsoft.com/ja-jp/help/4469068/summary-of-new-japanese-era-updates-kb4469068
625 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:35:51.80 ID:u6t/T7mma.net] もう元号とかやめて欲しいよねほんとw いい加減役所も西暦に一本化しろよ
626 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 21:36:53.61 ID:TyGEr2d8a.net] 統一したら雑務が減っちゃうだろ
627 名前:デフォルトの名無しさん mailto:sage [2019/04/30(火) 22:02:27.50 ID:LbZ9KfXX0.net] >>616 訂正ありがと 手元にあるのが8.1で全部おんなじかと
628 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 06:30:43.85 ID:+0nnIASf0.net] 皆さんレスどうもです まだ対応待ちってことですね・・・ とりあえずいまはテスト用にレジストリいじれるしかなさそうですね
629 名前:デフォルトの名無しさん [2019/05/01(水) 14:39:10.04 ID:NTU1YIA40.net] インデクサーってpublic T this[int I]{}みたいに定義するらしいけどさあ ここに出てくるthisの部分って、this以外も入りうる余地ってあるの?
630 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 14:49:13.86 ID:lxO04VNX0.net] >>621 無いよ this以外にするとインデックス付きプロパティって意味になると思うけど、c#には無い
631 名前:デフォルトの名無しさん mailto:sage [2019/05/01(水) 14:51:52.86 ID:U25K78xGa.net] >>621 https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/classes#indexers > indexer_declarator > : type 'this' '[' formal_parameter_list ']' > | type interface_type '.' 'this' '[' formal_parameter_list ']' > ; 入るのはthisだけで、this以外が入る余地はない
632 名前:デフォルトの名無しさん [2019/05/01(水) 15:04:58.50 ID:NTU1YIA40.net] ありがとう 無いものについてパッとわかるとか驚くぜ
633 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 05:11:25.37 ID:fWQ7EMkU0.net] メモ https://www.enterprisedb.com/download-postgresql-binaries https://www.devart.com/odbc/postgresql/ https://visualstudio.microsoft.com/ja/thank-you-downloading-visual-studio/?sku=Community&rel=16 https://www.nuget.org/packages/MySql.Data/ https://www.nuget.org/packages/Npgsql/ https://www.nuget.org/packages/dotConnect.Express.for.PostgreSQL/ https://www.nuget.org/packages/Microsoft.Office.Interop.Excel/ https://www.pgadmin.org/download/pgadmin-4-windows/ https://dev.mysql.com/downloads/
634 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 06:26:48.77 ID:qeQLZJi00.net] そういうのはQiitaでやれ(Qiita警察激怒)
635 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 12:04:50.67 ID:ir+Ne9RR0.net] メモ系ツールなんて山ほどあるのにわざわざこんなところに書くのか 俺こんなの調べてんだぜすごいだろ?みたいな承認欲求なのかね?
636 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 19:31:55.56 ID:Plm8DXbx0.net] 初心者ですが、乱数系列の初期化(Randomクラスのオブジェクトの生成)は どこに書くのが正解なんでしょうか? 関数の中に書くと、関数が呼び出されるたびに初期化されるんじゃ?と思えるのでちょっと拙い 関数の外側にプログラムの初めの辺に書いておけばいいのかなあ?とも思うのですが、それもカッコ悪い
637 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 19:36:11.39 ID:rtZHUO2Da.net] >>628 依存性として注入するのが定石
638 名前:デフォルトの名無しさん mailto:sage [2019/05/02(木) 20:19:04.27 ID:Plm8DXbx0.net] 依存性 注入で検索したらいろいろ出てきたので調べてみます
639 名前:デフォルトの名無しさん [2019/05/03(金) 03:27:08.36 ID:eVcW5sZJ0.net] >>628 最近のは年月日時分秒を整数にして種にしてるっぽいから、 毎回初期化の方がランダム性が高まるんじゃないかと思ってる。
640 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 03:31:56.40 ID:t597qxt20.net] >>628 仕様次第 乱数の仕様を設計書に明記する必要がある
641 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 12:41:41.06 ID:Xwdpydd1a.net] >>628 訳分からん解答が続いてるけど、素直に インスタンス固有である必要があるならコンストラクタに staticでよいなら静的コンストラクタに 書けばいいだけ。かっこ悪いとか、くだらないことに悩むのは時間の無駄。 この場合は不要だと思うけど、静的コンストラクタが実行されるのはそのクラスの 静的メンバーに初めてアクセスされたタイミングだと思ったので、その点は場合によっては注意
642 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 12:51:40.57 ID:JARezKaea.net] >>633 嘘を教えるな そんな馬鹿な使い方をしたらテストできなくなるだろ
643 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 13:16:48.56 ID:JqDPcuspM.net] private staticなら単体テストには支障ないだろ 厳密な再現性を求めるなら本来はシードを固定するべきだが
644 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 13:23:25.74 ID:Xwdpydd1a.net] どっからテストとか出てくるんだw 意味が分からん
645 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 13:28:31.30 ID:5Dkgrzu1M.net] >>633 そもそも因果関係が逆だよな キモメンが書いたコードがダサい
646 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 13:39:56.17 ID:ffSbfxo8M.net] >>636 staticだとコンストラクタで実装を差し替えられないから単体テストの邪魔になりやすいというのは一般論としてはある Randomを差し替える必要があるケースは極めて稀だが、上で述べたように厳密な再現性が求められるケースならありえなくもない
647 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 13:45:36.92 ID:JARezKaea.net] >>635 直近のN回が特定の数列の場合のテストとかしにくいだろちったあかんがえろ >>636 テストしねーのかてめー?終わっとるな
648 名前:デフォルトの名無しさん [2019/05/03(金) 13:57:48.60 ID:Zy40eisO0.net] >>639 横からすまんが、そのテストしにくい例ってのをコードで見せてくれんかな 学習のためにどうか頼むわ
649 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:05:21.52 ID:N/aYDMHoM.net] >>640 例えばガチャを作ってるとして、0-999の乱数で0-9が出たらSSRを排出する仕様なら、 0と9と10くらいを決め打ちでテストしたくなるだろ? まあそのために乱数生成器をモックしなきゃいけないような設計には再考の余地があると思うが、状況としては普通にありえるだろう
650 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:07:16.80 ID:roEz64M2M.net] あなるあなる肛門肛門
651 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:07:36.88 ID:roEz64M2M.net] すまん誤爆でした!!!
652 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:09:46.15 ID:Xwdpydd1a.net] だから質問者はそんなこと聞いてないって... どんだけ独りよがりの妄想展開するんだよ
653 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:11:43.11 ID:roEz64M2M.net] >>644 うるせーばか子ね
654 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:16:40.44 ID:JARezKaea.net] 現在時刻とか乱数みたいな制御しにくい値はインジェクションする これ常識な 勉強になったねきみたち
655 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 14:47:40.00 ID:3MJf1YjB0.net] >>644 カッコイイか悪いかだから って問題があってカコワルイ ってつければ質問者の望む回答
656 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 15:12:05.72 ID:uS7vqCXY0.net] >>639 本末転倒だろう。 作るべき物の要件に合わせて乱数生成の挙動を定義して設計するのが優先すべき事項で、その実装をテストするためのコードは必要に応じて用意すればいいだろう。
657 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 15:31:58.12 ID:JARezKaea.net] >>648 それはアマチュアの考え方
658 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 15:33:51.16 ID:wCLW0/2P0.net] >>649 スレタイ読め
659 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 15:38:42.54 ID:q0Uiy+aiA.net] どーでもええわ
660 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 15:58:52.41 ID:Ue5NRrHW0.net] 教えてください。 以下のコードで、x の定義は問題ないのに y の定義だけコンパイルエラーになってしまいます。 == const Exception e = null; const bool x = e == null; // エラーなし、true が設定される。 const Type t = null; const bool y = t == null; // CS0133 y' に割り当てられた式は定数でなければなりません。 == 何が原因でこのような違いがでるのでしょうか。 また、y を定数のままエラーが出ないように修正することは可能でしょうか。 よろしくお願いいたします。
661 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 16:01:49.32 ID:3MJf1YjB0.net] >>652 結果によってtrueやfalseになるようなんは定数と呼ばん
662 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 17:46:27.38 ID:Xwdpydd1a.net] >>652 例外はTypeで==演算子が再定義されてるからみたいなので、 const bool y = t == (object)null; 一応これで文句言われないみたい
663 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 17:53:37.68 ID:Xwdpydd1a.net] あ、なんか例外とか意味不明なこと書いてるけど突っ込まないでねw
664 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 18:53:11.77 ID:78NC+NUs0.net] >>654 え? それ通るの? 怖い
665 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 19:21:25.35 ID:Xwdpydd1a.net] 言語仕様の「定数式」の項を見れば別に不思議はないんだけど、 他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」 と思っちゃうね。
666 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:24:56.25 ID:Ue5NRrHW0.net] >>653 レスありがとうございます。 定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、 表現が不適切だったかもしれません。失礼いたしました。 >>654 ありがとうございます!うまくいきました。 ちなみにいろいろ試してみると、 string は == が定義されているもののエラーが出ないようです。 さすがに string は特別ということのようですね。 (ただ、typeof(string).IsPrimitive は false にだったりして いまいちしっくりきませんが。。。) == const string s = null; const bool z = s == null; // エラーなし、true が設定される。 == 何にせよ、問題はすっきり解消いたしました。 適切なアドバイスどうもありがとうございました。
667 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:25:45.58 ID:Ue5NRrHW0.net] >>657 実際に const を使いたかったわけではなく、 問題の切り分けを行った結果として >>652 のように質問させていただいたのですが、 言われてみれば確かに何がしたいのかわからない・・・。 もう少し元の問題に近いコードを提示するなら、以下のような感じです。 == const Type t = null; if (t == null) Console.WriteLine("t is null."); else Console.WriteLine("t is not null."); // 警告なし const Exception e = null; if (e == null) Console.WriteLine("e is null."); else Console.WriteLine("e is not null."); // CS0162 到達できないコードが検出されました ==
668 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:54:20.72 ID:mscz+0vpa.net] >>659 いやいやいや、俺はおたくにケチつけたわけじゃないよw const bool y = t == (object)null; こういうのはぱっと見て意図が分からないと言っただけ。 むしろ「マジックナンバー」を避けるのは良い習慣ですよ
669 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 20:57:46.12 ID:mscz+0vpa.net] >>658 >string は == が定義されているもののエラーが出ないようです。 上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。 VSのインストールフォルダに入ってる
670 名前:デフォルトの名無しさん mailto:sage [2
] [ここ壊れてます]
671 名前:019/05/03(金) 21:13:39.41 ID:rGk2iQn5a.net mailto: ひょっとして、ES6あたりの感覚で代入onlyの変数を宣言したくてconstキーワードを使おうとしてるのかなと思ってみたり readonlyなローカル変数みたいな構文ってC#にはまだないんだよね [] [ここ壊れてます]
672 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 22:02:39.62 ID:Ue5NRrHW0.net] >>660 > const bool y = t == (object)null; > こういうのはぱっと見て意図が分からない そうですねw 式の意味を考えるなら t == (object)null は ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど const うんぬんの話の中でこれはダメですし。 ちなみに今ふと思いついて試してみたんですが、 t is null も == の定義には依存しないものの定数扱いにはならないようです。 >>661 ありがとうございます。 言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような 気がしてきたので、これを機会に勉強してみようと思います。
673 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 22:03:15.73 ID:Ue5NRrHW0.net] >>662 質問させていただいたのは、 >>659 のコードみたいに CS0162 の警告が出てほしいのに 出てくれない場面があったからです。 でもたしかに readonly なローカル変数はあってもいいですよね。 あと、引数のみに依存して副作用もないメソッドについて ↓みたいな書き方が許されたらいいのに〜とか妄想しましたw == static class MathEx { public const double Square(double x) => x * x; } static class MyConstants { public const double SquarePI = MathEx.(Math.PI); } ==
674 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 22:05:09.07 ID:Ue5NRrHW0.net] 何度もすみません。。。上の妄想コードは間違いです。 正しくはこちら。 == static class MathEx { public const double Square(double x) => x * x; } static class MyConstants { public const double SquarePI = MathEx.Square(Math.PI); } ==
675 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 22:55:31.79 ID:1vSUmwo4M.net] 実質的に定数ならJITコンパイル時に定数に置き換わるからそんなものは要らん
676 名前:デフォルトの名無しさん mailto:sage [2019/05/03(金) 23:53:26.41 ID:BZD1sthA0.net] decimalの定数は内部的にアレだけどな
677 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 07:03:09.32 ID:Y3LpLEUoM.net] >>667 詳しく
678 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 13:03:57.01 ID:3sktWiiHa.net] >>668 横からだけど https://ufcpp.net/blog/2016/12/tipsprimitives/ のことだと思う
679 名前:デフォルトの名無しさん [2019/05/04(土) 14:32:15.09 ID:IHSUUilV0.net] List.Addって、複数のスレッドから同時に呼び出したらデータが壊れる可能性ってあるの?
680 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 15:00:48.03 ID:NSx1pb1m0.net] >>670 スレッドセーフじゃないからlock制御を自前で持つか、System.Collections.Concurrentのコレクション使うべき
681 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 15:23:49.46 ID:H40F3Pfj0.net] Queueの出し入れもlock必要だし、マルチスレッドはめんどいよな。 なんでConcurrentDictionaryはあるのにListは無いのか
682 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 15:37:29.51 ID:uz0VN5nda.net] >>672 使い道がない
683 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 15:38:02.55 ID:vy21Hr2ZM.net] 個人的にはスレッド自体に特定のスレッドからのデータを受け取る処理がある方が好き
684 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 15:57:05.65 ID:qIB0qWQDM.net] 別々のスレッドから生成された値を集めたいなら、 各スレッドで別のバッファ(List)に値を書き込んでから最後に単一スレッドでマージするのが定番
685 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 17:20:59.03 ID:pMssk1qR0.net] スレッドセーフって実はどういう動作するのかよく知らないぜ
686 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 17:27:01.27 ID:0zm1CIpf0.net] >>676 わかる エラーがでなかったらそれがスレッドセーフ!!
687 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 20:18:11.93 ID:pMssk1qR0.net] APIのマニュアルにおいて「スレッドセーフ」という言葉が用いられる場合、たいていは「複数のスレッドからアクセスされても例外を出さない、プログラムがクラッシュしない」というような意味です。 しかしプログラムの目的によっては、例外が出ないだけでは不適切です。 例えば対象が、100個のデータを管理する変数だとします。 その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。 この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。 ってググって出たサイトで拾った
688 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 20:25:20.65 ID:pMssk1qR0.net] つまり for(int i=0;i<lst.count;i++) { unk un=lst[i]; 略 } みたいなプログラムを組んだとき どっかでいきなり要素をゼロにされて死ぬってことは スレッドセーフだろうがどうだろうが可能性はあるってことだよね ってことを考えるとスレッドセーフである意味ってあんまりなくて 排他処理は絶対実装しないと駄目だよね?ってこと? 誰か違うと言ってくれ
689 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 20:59:32.71 ID:Ui9BQ5TxM.net] スレッドセーフはメソッド内などで一貫性を保てる作り 排他制御が必要な場面でやってないなど作り手のロジックミスには対応出来るわけがない
690 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 21:06:21.08 ID:Ui9BQ5TxM.net] スレッドセーフである意味 あるオブジェクトがプロパティAを持っててメソッド内で b=aaa(A)+bbb(A); を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ 最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ
691 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 21:07:23.59 ID:3sktWiiHa.net] >>679 その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る System.Collections.Concurrent系のコレクションは、 例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ) どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽
692 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 21:27:48.58 ID:qIB0qWQDM.net] >>679 厳密に他のスレッドとの同期を取らなきゃいけないなら>>682 の言うようにBlockingCollection使うか毎回ロックだろうし、 ループ中は他のスレッドによるlstの変更を反映しなくていいならループに入る直前だけロックしてコピーしておけば済む ケースバイケースだよ 一つ一般的なアドバイスをしておくと、並列処理のコツはデリケートな前提をなるべく設けずに極力ロバストな設計をすることだ 要件が許す限りにおいて、少々処理の順番が入れ替わったり処理間の同期が取れてなかったりしても問題にならないつくりにするのが理想
693 名前:デフォルトの名無しさん [2019/05/04(土) 22:09:10.98 ID:56LrGuhB0.net] 非同期処理は複数のスレッドが同じデータを弄ろうとすることによる不整合は起きないけど コールスタックは複数になるから 同じデータに触ると訳ワカメになる事があった
694 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 23:16:04.81 ID:pMssk1qR0.net] (||゚Д゚)ヒィィィ!(゚Д゚||) じゃあ>>679 みてーな処理を書いたら スレッドセーフなんて関係なく バグるんだね こぇえええええ じゃなくて終わったわ 今まで組んだもんでテキトーにやった箇所全部終わってる気がする
695 名前:デフォルトの名無しさん mailto:sage [2019/05/04(土) 23:28:33.99 ID:J15hVQV0a.net] まあ複数スレッドで同時並行処理するときにはそのへん慎重を期さないと 再現困難なバグを埋め込んじゃうからねえ 同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ
696 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 05:07:07.08 ID:tvdtPjB+0.net] マルチスレッドの恐ろしさは、たまにしかバグらない事。 ほとんどは正常に動くから、質が悪い。 必ず、バグらないだろ それで喧嘩になる事も多い。 マルチスレッドは、ベテランでもバグるからやめろと言っても、 ほら、バグらないでしょ? と、突っかかってくる その時には、バグらないと言うと、 千回実行しても、バグらないでしょ? と、突っかかってくる。 でも、その時にはバグらない バグる立証をするのが難しい だから、Ruby をやった人は、関数型言語のElixir をやる。 他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い 1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。 何回バグらないで実行すれば、正しいと認めるのか、と問われても困る
697 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 06:10:17.07 ID:BzgWdCy40.net] アクマノショウメイ
698 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 08:46:40.02 ID:TKrOuc6uM.net] >>687 喧嘩になるのはマルチスレッドのバグのせいではなくお前の頭がバグってるから
699 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 08:57:36.80 ID:Vqy33e5r0.net] エビデンスとれてりゃ突きつけるだけなのに
700 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:34:54.98 ID:RPhfdkos0.net] >>687 マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。 あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。
701 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:45:50.32 ID:bYgaGqRgM.net] >>687 なんでバグが起こってるのか原因特定出来てなくてワロタ
702 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 10:48:34.16 ID:uudMW5nw0.net] スレッドセーフは単発のメソッドが競合しないだけで 一連の処理についての動作保証をするものではないと マルチスレッドはやらなくていいならそれに越したことはないけど 絶対に駄目というわけではなく 排他処理を組まないことが害悪
703 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:21:06.67 ID:IBoHsNppa.net] 排他制御をしなくても安全に並列処理できるように設計することが大事 まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい 大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき
704 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 11:29:03.77 ID:Q2loWuJOM.net] シネ
705 名前:デフォルトの名無しさん [2019/05/05(日) 12:22:10.03 ID:6g/cxz/+M.net] ぱられるふぉーってのを使えば良いんじゃね? 知らんけど
706 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 12:32:51.31 ID:uudMW5nw0.net] >>694 うーん、でも>>679 みたいなこと やった時点で終わりってまともじゃねぇよ コードで一瞬でもすきを見せたら終了みたいになっちゃうじゃん お前の理想はなんかあるんだろうけど 他人が叫ぶスレッドセーフに頼っちゃ駄目だよ アプリの仕様として排他処理を盛り込むべき
707 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 13:01:26.26 ID:EeTrV1LT0.net] >>697 だからさ、>>679 みたいなforループ自体をスレッドセーフにする一番簡易な表記方法がlockなんだよ これ以上簡単に書くことはライブラリをどんだけ上手く作っても無理
708 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 13:15:03.75 ID:l159r3xkM.net] >>698 それって記述が簡単ってだけでしょ? ロック中にアクセスしたらどういう動作するの? 次回に回すの? 待機して待つの? そういうのってスレッド毎にステータスを持たせて マトリックスで管理しないと制御できてると俺は認めない ジジイだから
709 名前:デフォルトの名無しさん [2019/05/05(日) 13:34:55.82 ID:1Pm7tIcB0.net] VisualBasic大先生を怒らせてしまったようだな
710 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 13:41:27.68 ID:IBoHsNppa.net] >>698 だからさ そんな不安定なロジックを書かなくても良いようにちゃんと設計するのが並列処理の王道なんだよ lockブロックは最初の一回を書くときは楽かもしれんがだんだん難しくなるぞ そのコレクションを使う全てのプログラマが並列性を意識して正確に排他制御をコーディングしなければならない これは実用的なシステムの規模になるとかなり大きな負担になる
711 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 14:02:39.93 ID:IBoHsNppa.net] そもそもロックって論外なんだわ 世の中の並列処理の目的ってのはほぼ2種類に分類されるんだよ @インフラストラクチャ処理中にCPUを待たせたくない A消費コア数を増やして暇なCPUを働かせたい よーするにCPUを無駄にしたくないわけ でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう ロックすると並列処理をする目的そのものに反してしまう なのでロックは基本使わず最後の手段ってわけ この辺りは(やや古い本だが)Microsoft Pressのプログラミング.NET Franework第4版やEffectiveシリーズでも解説されてることだね どちらも良書なので脱初心者を目指しているだろう君達は是非とも読むべきだ
712 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 14:08:00.64 ID:kZz1htUnM.net] その通り 極端な話、並列処理なんてそれぞれ別のサーバーで実行させりゃいいんだよ それがレイテンシやコストなどの問題で無理なら代わりにプロセスを分ければいい そもダメならリクエストやワーカー単位でスレッドを分け、といった具合に、共有するリソースを最小限にすることを優先する
713 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 17:40:50.25 ID:Q2loWuJOM.net] ジジイだから能力低いだけだろ
714 名前:デフォルトの名無しさん [2019/05/05(日) 18:00:00.04 ID:1Pm7tIcB0.net] 非同期処理全盛の時代にこれじゃ、世の中やばいコード(or非同期処理のつもりが同期処理されてるコード)だらけだろうな Qiitaとか見ててもやばい奴だらけだ
715 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:04:40.39 ID:IBoHsNppa.net] >>705 今時lockだもんな、笑えない深刻さ お前のコード、めちゃくちゃブロックされてんだけど、って同僚の誰かが教えてやればいいのに見て見ぬ振りは可哀想だ
716 名前:デフォルトの名無しさん [2019/05/05(日) 18:09:44.07 ID:1Pm7tIcB0.net] そもそも、世のサンプルプログラムの多くが欠陥品なのが諸悪の根幹なのかもな 劣化コピーしちゃうQiita屋とかコピペプログラマが全部危険なコードを書いてしまう
717 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:19:48.84 ID:Q2loWuJOM.net] 一番パフォーマンスの良いMutexを使ってる人がどれだけいるやら
718 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:23:53.97 ID:IBoHsNppa.net] >>708 よくねえよw OSリソース消費する処理に速度を期待するな
719 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:27:02.59 ID:Q2loWuJOM.net] 他人に迷惑をかける基地外はシネ
720 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:33:04.85 ID:Q2loWuJOM.net] webサーバでスレッド一個で処理を完結するようにはなっていないだろ
721 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:33:17.95 ID:IBoHsNppa.net] Mutexは相変わらずスレッドをブロックするうえにMonitorよりも消費リソースが大きい その代わりプロセスを超えて待機処理を実装できるというものだ よーするにlockよりもっと遅いんだよ
722 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:34:49.31 ID:Q2loWuJOM.net] >>712 実務で使ったことないんだろ 黙っとけや 自分だけの小さなアプリしか作ったことないんだろ
723 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:37:30.50 ID:IBoHsNppa.net] >>713 もう無理だよ笑わせないでw もっともパフォーマンスの良いミューテックスwwwwwww 実務で使ったことないだろwww 学生さんですかwwww
724 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:38:33.24 ID:Q2loWuJOM.net] 5分で確認できることをできない老害
725 名前:デフォルトの名無しさん [2019/05/05(日) 18:41:05.51 ID:1Pm7tIcB0.net] Mutexはロックがいらないスレッド同士でもロックしちゃうのが使いづらいな 回避できるのかはしらんが
726 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:41:10.65 ID:Q2loWuJOM.net] そもそもスレッドがとまると言ってるけどCPUのスレッドと.netのスレッド混同してそう
727 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:41:50.97 ID:Q2loWuJOM.net] > でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう これ笑う所?
728 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:45:15.15 ID:Q2loWuJOM.net] ロックしちゃうと問答無用でCPUが何もせずに止まっちゃうわけないだろw
729 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:47:01.12 ID:uudMW5nw0.net] え?lock中にアクセスしようとしたらどうなるの?
730 名前:デフォルトの名無しさん [2019/05/05(日) 18:48:17.37 ID:1Pm7tIcB0.net] ロックが取得できないだけ
731 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:48:31.54 ID:Q2loWuJOM.net] お前のPCは8スレッドぐらい動かしたら止まるの?
732 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:51:01.09 ID:IBoHsNppa.net] >>719 うるせーなスマホで長文書くとミスるんだよ スレッドが
733 名前:ブロックされるってことだ [] [ここ壊れてます]
734 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:51:41.98 ID:Q2loWuJOM.net] >>723 ググってきたのかよ低能さん
735 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:52:07.51 ID:uudMW5nw0.net] >>721 そんときのコードってどう書くの?
736 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:53:42.23 ID:IBoHsNppa.net] >>724 調子のんなよ重箱の隅つつきマン
737 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 18:55:47.24 ID:Q2loWuJOM.net] >>726 lockとMutexのパフォーマンスのベンチ比較して 結果を出せよ それまで書き込みするな
738 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 19:00:35.89 ID:IBoHsNppa.net] >>727 はぁ? 言い出しっぺのてめーがパフォーマンス一番良いミューテックスのベンチ出せや 一番ってんならロックと比較なんてケチくせえこと言わんで他の排他制御機構とも比較しろよ?
739 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 19:00:46.75 ID:Q2loWuJOM.net] どう見ても間違っている内容で煽られると人はどう思うのか どう考えても仕組み上Mutexのほうが遅い
740 名前:デフォルトの名無しさん [2019/05/05(日) 19:07:06.98 ID:1Pm7tIcB0.net] >>725 普通に取得できるのを待ってるな まあ、ロックが取得できるまで制御を戻したりはしておらんわ
741 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 19:12:25.48 ID:uudMW5nw0.net] >>730 だよね ちょっと調べてるけど 普通の排他処理組んでおきたくて lock ReaderWriterLockSlim UpgradeableReadLock なんか普通の排他処理したいだけなのに たくさん出てきちゃったぞ これ全部使っても ん?排他処理できてんのか? って疑問が晴れない この言語非同期処理の対応手薄なんだよねまだ 時期尚早として触らんことにしたw
742 名前:デフォルトの名無しさん [2019/05/05(日) 19:21:47.99 ID:1Pm7tIcB0.net] LockやMutexは初心者本の範囲内だからしらんのはまずいよ
743 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 19:45:53.31 ID:VmrJwxHQM.net] 非同期のチートシートないの?
744 名前:デフォルトの名無しさん mailto:sage [2019/05/05(日) 19:57:32.38 ID:LYwUBfu90.net] https://qiita.com/tadokoro/items/28b3623a5ec58517d431 測った人によると nterlocked > lock > SemaphoreSlim > Semaphore > Mutexだってさ
745 名前:デフォルトの名無しさん [2019/05/06(月) 02:20:35.00 ID:wkmj+bF20.net] 並列処理なら.netなんだからF#でSTM使え。 何で関数型言語が注目されたんだよ。 並列処理に有利だからだろ。
746 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 04:59:30.75 ID:wr9bFPpT0.net] マルチスレッドなんか無理! だから、Ruby の人は、Elixir を使う 作るのに何百年も掛かる、人類の成果、Erlang VM + Ruby = Elixir。 ErlangVMを、Rubyでラップしたもの Elixirの小プロセスなら、10万プロセスも余裕! パイプラインと同じ 関数型だから状態を持たない。 ただ、データを変換していく関数をつなげていくだけ!
747 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 07:40:48.06 ID:WDjCowqB0.net] >>736 Rubyにマルチスレッドは、無理! RubyはいわゆるGILといって、同時に複数のスレッドが走らないような排他制御がVMレベルでかかっている これはVM自体がスレッドセーフでないクソ実装であることに起因する制約である もちろんC#にはそんなものはないし、ベンチマークだとErlangより速い
748 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:19:36.88 ID:zGa1jTsu0.net] Windows8.1/10の令和対応アップデートでWinFormsの画面レイアウトが崩れるらしいね
749 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:48:42.80 ID:w2Z6VwVJ0.net] お前んとこのWinformsいつもレイアウト崩れてんな
750 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 12:59:34.99 ID:rtkPFZMSd.net] >>738 俺のとこも昨日発生した AutoScaleModeをNoneにして対応できたから令和のせいではないと思う
751 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 13:02:49.51 ID:4h7Vjk7HM.net] >>739 は?崩れてねーし OKボタンが画面外にいって押せないだ
752 名前:けだ [] [ここ壊れてます]
753 名前:デフォルトの名無しさん [2019/05/06(月) 21:06:24.34 ID:Gi+4ls7q0.net] 画面レイアウトがクソみたいに崩れたぞ死ねや
754 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:19:39.33 ID:Gi+4ls7q0.net] >>740 どうやってやるのそれ? visual studio開いた時点ですでに崩れてて手動で戻すしかなさそうなんだが。 【警鐘】[改元][Windows][.NET] 「令和」対応パッチで画面が横に伸びる、文字が見切れる ― Windows Update 手動更新はちょっと待った方がいい https://qiita.com/CodeOne/items/22004635d3c7cc533e5e
755 名前:デフォルトの名無しさん mailto:sage [2019/05/06(月) 21:32:21.57 ID:lj/6a9HB0.net] >>743 デザイナ表示壊れてんのなら.Designer.csの中身書き換えるしかないんじゃね AutoScaleMode.FontをAutoScaleMode.Noneに全部置換したらいい
756 名前:デフォルトの名無しさん [2019/05/06(月) 21:39:51.78 ID:Gi+4ls7q0.net] >>744 ありがとう form1.csのデザインのAutoScaleModeをNoneにしたけど何も起こらなかったからあきらめてたけど、そっちを修正したら解決したわ。
757 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 00:11:46.09 ID:HkLoI6gC0.net] >>740 令和を1文字で表すやつのために、フォントをいじったんだが、そのときに既存の文字の幅が変わったらしい なのでまあ、令和対応のせいだと言えばそうなんじゃね つか明日からどれだけ影響出てるか考えると鬱だわ
758 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 01:24:56.82 ID:A2KlUElc0.net] 納期直前でGW返上してる最中にこの不具合対応しなきゃいけなくなってかなりイラッとした
759 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 08:16:44.51 ID:h85TWq9Qa.net] https://devblogs.microsoft.com/dotnet/introducing-net-5/ .NET Framework 終了のお知らせ Coreへ移行できないドカタは永遠に4.xに取り残されることが決定したようだ
760 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 08:55:31.55 ID:H2EGG+st0.net] >>748 すげーな。20年以降毎年バージョン上がる予定か 2020 .net5 2021 .net6 2022 .net7 2023 .net8 .net4で停滞した10年とは一体
761 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 08:58:10.52 ID:Q8AOfbVkd.net] Java interoperabilityって何なんだよ…
762 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 09:30:59.37 ID:n4vre8LhM.net] >>748 出来損ないは過去に葬った方が世の中のためだぁ
763 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 10:21:58.95 ID:vw5zJnlq0.net] バージョンを頻繁に上げるのは、 成熟していないってことでは?
764 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 11:33:46.06 ID:4Mlb2ms50.net] FrameworkからCoreに移行できないのはどういう場合ですか?
765 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 11:59:10.66 ID:25JpTCOf0.net] え、winformはどうなるの??
766 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 12:06:04.60 ID:b+Ix+FO0a.net] 最近のmicrosoftかなり攻めてるな
767 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 13:10:26.59 ID:eYh/lhy30.net] .net frameworkからcoreなんてどこかちょろっといじったらいいだけじゃないの? VB6からVB.netほどの変化はないんだろ?
768 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 13:37:50.62 ID:9iRY6hHtM.net] >>753 そんなワケのわからんもん使こて何かあったらどないすんねん!責任取れるんかい! わりとこれ
769 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 13:46:35.16 ID:9CwYXDcE0.net] 別に移行しなくてもいいですけど保守には特別料金いただきまっせ
770 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 13:47:55.21 ID:Q8AOfbVkd.net] >>756 Web FormsはほぼUI作り直し
771 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 13:50:03.67 ID:9iRY6hHtM.net] あと技術的な最大の障害はWebFormsだろう WebFormsは.NET Coreではサポートされてないし、される気配もない 既存資産の移行もさることながら、.NETドカタはWebForms頼りで標準的なWeb開発のスキルを持たない奴も多い 彼らはWebアプリケーションの開発が不可能になり、路頭に迷うことになる
772 名前:デフォルトの名無しさん [2019/05/07(火) 17:00:19.52 ID:1tK/VkfG0.net] すまんが、Stream型って前の方だけメモリを解放するとか器用なことは出来ないの?
773 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 19:17:09.01 ID:9iRY6hHtM.net] >>761 意味不明 お前の考えはどうでもいいから具体的に何が問題になっているのか、もしくは何が気になっているのか書け
774 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 19:23:08.04 ID:VnMa5nf90.net] Stream型ってなんか確保してんの?
775 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 19:29:05.20 ID:n4vre8LhM.net] Streamの実装によるだろ
776 名前:デフォルトの名無しさん mailto:sage [2019/05/07(火) 21:03:30.48 ID:FJj2rymy0.net] >>761 Streamクラスは抽象クラスだけど、MemoryStreamクラスを想定してるのかな。 何となくMemoryMappedFileクラスが要望に合ってるような気がする。
777 名前:デフォルトの名無しさん [2019/05/08(水) 21:27:25.44 ID:4kxgmlsqa.net] C#でwindowsPCのマイク音量設定を設けたアプリを作りたいんですが情報がいまいち出てきません 今現在どのような方法が推奨として使われているのでしょうか
778 名前:デフォルトの名無しさん mailto:sage [2019/05/08(水) 21:33:29.28 ID:UPhx/0uCM.net] おとなしくNAudioと言うのを使いなさい
779 名前:デフォルトの名無しさん [2019/05/09(木) 20:00:37.76 ID:25KQckNoa.net] >>767 ありがとうございます 調べてみます!
780 名前:デフォルトの名無しさん [2019/05/10(金) 07:09:33.41 ID:8h0VP8xa0.net] RPgエディタみたいなタイルマップを配置する機能を作る場合、画像を配置するフォームは何が適切でしょうか? 前にも聞いた気がするんですが、レスを忘れてしまって、、、
781 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 07:45:25.60 ID:guXEw79XM.net] モデリングソフトに決まってんじゃん 2Dでもプラグインあるからプロならモデリングソフト 個人製作ならエクセルで代用しとけ ってスレ違うやん
782 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 07:46:35.31 ID:guXEw79XM.net] いや、すまん、質問内容取り違えてたw ピクチャーボックスで
783 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 08:14:45.00 ID:uov0WiW1d.net] >>769 Panelを継承したカスタムコントロールのOnPaint内で描画する事だな
784 名前:デフォルトの名無しさん [2019/05/10(金) 12:26:08.70 ID:8h0VP8xa0.net] >>771 ピクチャボックスですね 毎回忘れちゃうです
785 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 17:41:55.34 ID:ZtjlRqB/0.net] 質問するだけで自分でやらないから忘れるんだよ >>772 継承させる意味が分からないしOnPaintならPanelでなくてもいい
786 名前:デフォルトの名無しさん [2019/05/10(金) 18:53:28.94 ID:8h0VP8xa0.net] visual studioのhddへのアクセスは制限できますか? 激重です SSDにしろって話ですけどね
787 名前:デフォルトの名無しさん [2019/05/10(金) 19:04:05.18 ID:8h0VP8xa0.net] >>774 picturebox自体を何個も並べるんですか? picturebox1つの中に複数の画像を並べるですか?
788 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:28:03.03 ID:tfYAY6pzM.net] >>776 どっちでもいいよ どのみち今の君のレベルで作ってもまともに使い物になるようなものにはならないから、うだうだ考えるより手の届く範囲で経験値を積んだ方がいい 行き詰まる頃にはだいぶレベルが上がってるはずだから、また作り直す 三周目くらいになればまともに作れるようになってるよ
789 名前:デフォルトの名無しさん mailto:sage [2019/05/10(金) 19:30:30.41 ID:uRQk/IXU0.net] 3週でいけるのだろうか?
790 名前:デフォルトの名無しさん [2019/05/11(土) 12:14:17.95 ID:kDrnBD/r0.net] 低レベルな質問で申し訳ないのですが、循環バッファって凄い便利だから 全ての配列は循環バッファで実装すればいいと思うのですが、デメリットはあるんでしょうか? Delete Insert Add が全てO(1)で出来るって凄くないですか?
791 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:25:39.14 ID:E3skkYkSM.net] >>779 俺は必要になったことないよ どんなときにいいの?
792 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:30:42.30 ID:qR2J3ArJM.net] 下手の考えなんとかつってなー 高レベルになってから言ってくれ
793 名前:デフォルトの名無しさん [2019/05/11(土) 12:39:31.51 ID:td9YBJ3L0.net] >>779 >***全ての配列は***循環バッファで実装 配列のままの方が良い場合もあるが そうしたいならそうすればいい ただし配列以外の構造が必要になるケースでは使えないぞ
794 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:56:33.31 ID:4CcYolMU0.net] >>779 トークンリングとイーサネットの 違いを理解してから再度質問を
795 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 12:59:31.48 ID:aDjFJI/sa.net] >>779 Addは、reallocationを考慮しても償却定数時間で出来そうだが Delete, InsertがO(1)だというソースをくれ、「末尾」という指定がない以上任意位置だよな? 途中要素をDelete,Insertしたら要素の詰め直しが必要でO(N)になると思うんだが O(N)になるならList<T>で十分という話になる
796 名前:デフォルトの名無しさん [2019/05/11(土) 13:05:46.01 ID:DR+jkhoz0.net] 続きはこちらでどうぞ 【O(n)】計算量の評価方法について【O(log n)】 https://mevius.5ch.net/test/read.cgi/tech/1363854937/
797 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 13:06:24.02 ID:aDjFJI/sa.net] 考え直したらQueueやStackのことを言っている気がしてきた それらのデータ構造がもうあるんだからそれ使えば良いんじゃね
798 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 15:39:49.17 ID:8cYUuN//0.net] すべての配列は〜というのが考え方が そもそも乱暴で 目的に合わせてデータ構造を選ぶものじゃ
799 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 16:14:40.10 ID:MBpEq5nf0.net] Visual C#で電卓を作ってます。 ある数字ボタンをクリックしたとき、(Button)sender).TextでTextran欄の文字を取得できますが クリックではなく、キーボード入力で同様にしたいのですが、どうすればできますか?
800 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 16:26:29.83 ID:VR7g318H0.net] >>788 KeyPressやKeyDownなどのイベント ただし該当するコントロールにFocusされてないと反応しないのでフォームで全部受けるようにするとはかどる https://dobon.net/vb/dotnet/form/keypreview.html
801 名前:デフォルトの名無しさん [2019/05/11(土) 17:24:06.36 ID:qy13k0f30.net] System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\Users\◎◎\Desktop\volly.gif"); this.pictureBox1.Image = bmp; パスについてなのですが、相対パスは使えないということがあるんでしょうか。相対パスだとパラメータが違うというエラーが出ます。 フォームアプリケーションなので、form1.csにコードを書いています form1.cs img(フォルダ) └volly.gif という構造になっています しかし、img\volly.gif だとエラーになります 何が悪いでしょうか。
802 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 17:26:35.03 ID:Q2bK8ZXg0.net] >>790 .\img\volly.gifじゃね?
803 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 17:31:33.00 ID:vfaLavs00.net] 実行時のカレントフォルダーが合ってないと思う
804 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 17:56:52.10 ID:lpN0Lm9o0.net] デバッガでブレイクしてイミディエイトウィンドウとかで Environment.CurrentDirectory確認すると良いよ
805 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 18:25:33.06 ID:dxU2Wm5sa.net] >>790 相対パスとかの以前の問題 実際の環境にimgフォルダが作られているか? *.exeと言った実行ファイルのある場所を見てみたらいい 多分作られてないしその
806 名前:にgifファイルも作られてない [] [ここ壊れてます]
807 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 18:56:38.28 ID:VR7g318H0.net] >>790 >>794 を参考にするべきだけどパスの位置を確認したいのなら読み込む前のところで MessageBox.Show(System.IO.Path.GetFullPath(@"img\volly.gif"));//指定しようとしているパスを入れる とでも入れとけばその相対パスがどこを指しているのか絶対パスが表示される 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる
808 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 19:09:02.07 ID:vfaLavs00.net] >>795 > 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる これは正しくないよ。その時のカレントフォルダが基準。 何もしていなければ多くの場合は実行ファイルの場所と一致するから、結果としてそうなることが多いけど。
809 名前:デフォルトの名無しさん mailto:sage [2019/05/11(土) 19:52:49.57 ID:VR7g318H0.net] >>796 それならexeと同じディレクトリのところから使うには System.IO.Path.GetDirectoryName(Application.ExecutablePath)とか使って必ず絶対パスに直さないと危ないってことか
810 名前:デフォルトの名無しさん [2019/05/12(日) 10:29:51.59 ID:zQc98Y8H0.net] Console.WriteLine(System.Environment.CurrentDirectory); としても出力には何も出てこないのですか? 出てこないです 作業フォルダっていうのはform1.csとは別のファイルのことなんですね
811 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 10:48:00.86 ID:NzWVi3Qm0.net] console覗くか traceあたりに出力しないとでは
812 名前:デフォルトの名無しさん [2019/05/12(日) 10:52:27.58 ID:zQc98Y8H0.net] おっ いけました '2d_engine.exe' (CLR v4.0.30319: 2d_engine.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 これで正しいのかわからないですが、なんで実行ファイルがこんな場所にあるんでしょうか。プロジェクト内にあるのかと思ってましたが
813 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 10:53:02.25 ID:M17KJIhd0.net] >>798 WinFormsアプリはそのままではConsoleを使用できない Consoleを自分で準備すれば使えるが、通常は使わないかな フォルダ(≒ディレクトリ)とファイルは違うぞ
814 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:02:52.23 ID:NzWVi3Qm0.net] 謎は解けた
815 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:03:02.94 ID:PIRDu/CH0.net] >>800 その絶対パスは実行ファイルじゃない その表示されているところにConsole.WriteLineで書き込んだ内容出てくるはず
816 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:04:19.53 ID:JwWGS0EoM.net] 空のコンソールアプリ作ってそこで実行して
817 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:06:21.31 ID:JwWGS0EoM.net] そのgifファイルは実行ファイルが作られた場所に自動でコピーされてないので コピーされるようにgifファイルの設定帰るしかない
818 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:08:55.17 ID:M17KJIhd0.net] >>800 勘違いしてる。Console使わず、 MessageBox.Show( System.Environment.CurrentDirectory ); ってやってみてよ。
819 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:35:01.56 ID:1UlYWsgm0.net] >>800 カレントディレクトリはexeのあるディレクトリとは別物だからです System.AppDomain.CurrentDomain.BaseDirectory を使ってください
820 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:42:27.50 ID:Zs5BDDrj0.net] AllocConsole() してみなされ
821 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:46:33.54 ID:7nn+3/Jt0.net] >>800 プログラムの実行ファイルがある場所とは別に、プログラムの実行時に「どのフォルダでプログラムを実行するか」という概念があるのは分かる?
822 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 11:49:29.62 ID:PIRDu/CH0.net] 先生多すぎて混乱してそうw
823 名前:デフォルトの名無しさん [2019/05/12(日) 13:55:38.46 ID:zQc98Y8H0.net] 混乱してるんで一度整理します
824 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 14:13:47.11 ID:PIRDu/CH0.net] そもそもカレントディレクトリを表示させる必要があるのか? 画像をPictureBoxに表示するのが目的じゃなかったのか
825 名前:デフォルトの名無しさん [2019/05/12(日) 15:18:28.27 ID:zQc98Y8H0.net] そうなんですが、そのために相対パスを設定したいんです 絶対パスでも別に不自由しないですが、ソフトを作るときは相対パスも使う
826 名前:ニ思うので [] [ここ壊れてます]
827 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:40:46.00 ID:Q+XtJRAz0.net] >>790 VisualStudioでF5実行やデバッグをすると(何も設定を変えてなければ)ビルド出力先がカレントディレクトリになる 相対パスでエラーになる原因はビルド出力先にimg\volly.gifが存在しないから なのでimg\volly.gifをビルド出力先にコピーしてやれば相対パスで読み込めるようになる プロジェクトエクスプローラーでimg\volly.gifを右クリックしてプロパティを開いて 「ビルド時のアクション」を「なし」に変更 「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更 これでビルドすると出力先フォルダにimg\volly.gifがコピーされるようになる
828 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:41:40.00 ID:CayLEbz10.net] >>813 実は業務ではカレントディレクトリをあてにした動作はさせない なぜなら制御できないから なので相対パスをプログラムで取得したら 自分が基準とするディレクトリパスと自力で連結させて絶対パスにして使う
829 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:43:12.88 ID:Q+XtJRAz0.net] 画像ファイルがたくさんあって1こ1こ設定するのがめんどくさい場合は imgフォルダを右クリックして同じようにコピーの設定をする そうすれば1つの設定でフォルダごとまるごとコピーしてくれる
830 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 15:54:06.76 ID:0iYfvooEa.net] まあ、そもそも特に理由がなければ画像ファイルはリソースに突っ込むべきだね。 どうしても生の画像ファイルを使いたいならソリューションエクスプローラーからプロジェクトに追加して プロパティウィンドウの「出力ディレクトリにコピー」の値を「常にコピーする」にすれば ビルトすると自動的に実行ファイルと同じディレクトリにコピーされるようになる。 ディレクトリの階層を作りたいならソリューションエクスプローラ上で階層を作れば それがそのまま反映されてコピーされる。 実行ファイルのディレクトリはこれで https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.startuppath
831 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 16:00:55.91 ID:xH15WcK+a.net] OpenFileDialogなどを使うだけでカレントディレクトリは変わるし EXEのショートカット経由で起動する場合は任意のカレントディレクトリ位置に出来るし 他プロセスからWorkingDirectory設定無しで起動される場合も考えたりすると プログラム中で内部的に相対パスを保持するのは構わないけど IO系APIを呼び出す時は、AppDomain.BaseDirectoryなどと結合して絶対パスにしてから渡したほうがいい
832 名前:デフォルトの名無しさん [2019/05/12(日) 16:17:07.77 ID:zQc98Y8H0.net] なるほど 自分で絶対パスを1つ決めて、そこを起点にすると
833 名前:デフォルトの名無しさん [2019/05/12(日) 17:07:03.34 ID:zQc98Y8H0.net] 関係ないんですけど、コードってどこに保存してますか? 普通にテキストエディタに保存してますけど
834 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 17:15:13.31 ID:Zs5BDDrj0.net] 大事な物は心の中に
835 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 17:22:08.37 ID:O1RPDIWFM.net] >>820 一般的にはGitを使ってGitHubで管理する だけど今の君のレベルではそんなのは必要ない 今の君のレベルで書いたコードなんて一ヶ月後にはゴミであり、大切に保存する価値などない 一ヶ月後のレベルの上がった君から見ればゴミだという意味であり、決して悪い意味じゃないから勘違いするなよ
836 名前:デフォルトの名無しさん [2019/05/12(日) 17:25:13.38 ID:zQc98Y8H0.net] 自分の環境の場合、プロジェクトフォルダ\bin\debug\hoge.exe という場所に実行ファイルが作られるようです Cフォルダの直下あたりに作られるという説明がされちえますが、何か間違ってますかね //カレントディレクトリの取得 MessageBox.Show(System.IO.Directory.GetCurrentDirectory()); 場所ってのは自動的に決まる感じですか
837 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 18:06:37.88 ID:hmzYcUWua.net] >>823 日本語で 何を言ってるのかさっぱり分からんよマジで
838 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 18:42:19.48 ID:Mxa5Iz6jd.net] >>822 gitサーバーはいろいろ使われてるのにGitHubが一般的は言いすぎだろw
839 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 18:49:55.29 ID:JwWGS0EoM.net] この人はソースをテキストエディタに保存していると言ってるから iOS使いなんだろうなと思う
840 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 19:28:54.08 ID:eC5ErjVyd.net] 壮大な計画立てて時間だけがかかって何も完成させられない典型的な例
841 名前:デフォルトの名無しさん [2019/05/12(日) 19:36:30.99 ID:zQc98Y8H0.net] すみません がんばります
842 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:05:40.63 ID:TmkC4DiT0.net] LINQ勉強しててよくわかんないんですけど範囲変数ってあれ事前に宣言しなくていいんですか? マイクロソフトのサンプルとか見ても例えばselect score in scoresとか出てきてscoreどこから出てきたってなるんですけど 全体的な印象ですけど、SQLはちょろっとかじったので列名無いのにSQLっぽく書いてるLINQってなんかしっくりこないんですよね……
843 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:31:12.34 ID:RcOwQ/d80.net] >>829 Linqはクエリ式よりメソッド構文の方がとっつきやすい。 クエリ式はSQLに似てるけど、C#の文法に照らすと異質だしな scores.Select(score => ・・・); scoreはどこから出てきたの?ってことならまずはラムダ式からじゃないかな
844 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:31:33.06 ID:5S2KiOuR0.net] まずLINQとクエリ構文は別物だぞ > select score in scores select句はクエリ構文の最後に抽出するものを指定するんだからこんなのはあり得ない select句じゃなくてfrom句だろう scoreはそのクエリ構文内で使うローカル変数的なものなんだからクエリ構文内で出てくるのが当たり前 列名が無いってのは単に数値の配列とか相手にしてるからじゃね SQLは二次元相手にしか使わないがLINQ/クエリ構文は1次元相手にも使えるからな scoresがclass Score { public string Name; public int Value; }の配列とかなら from score in scores select score.Value みたいに「列名」が出てくる あと重要なことだが、クエリ構文は使いどころがあんまり無い 基本的にLINQには拡張メソッドを使う
845 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:32:12.36 ID:tDx5/mlf0.net] >>829 メソッド式使えよ
846 名前:デフォルトの名無しさん mailto:sage [2019/05/12(日) 22:33:30.63 ID:tDx5/mlf0.net] SQLでもテーブルの別名使ったりするやろ
847 名前:入門者 mailto:sage [2019/05/13(月) 07:59:49.56 ID:W1wujo120.net] https://ideone.com/mKdtnM 独習C#のコードなんですが170行目のshapes[i].Nameは何故実行出来てるのでしょうか? Nameプロパティには何も記述がないのですが・・
848 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 08:25:11.57 ID:mnyzhKg9a.net] >>834 https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties
849 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 08:29:59.30 ID:V/EVdZRD0.net] >>834 それを学ぶのがその章の目的じゃないの? Nameプロパティの定義は71行目 163行目のshapes[0].Nameは引数で指定された"right"がセットされる。 164行目のshapes[1].Nameは省略時引数により139行目のコンストラクタを経由して"rectangle"がセットされる。 165行目のshapes[2].Nameは省略時引数により134行目のコンストラクタを経由して"rectangle"がセットされる。 166行目のshapes[3].Nameは省略時引数により106行目のコンストラクタを経由して"trizngle"がセットされる。
850 名前:入門者 mailto:sage [2019/05/13(月) 08:34:33.58 ID:W1wujo120.net] >>836 そうなのですが でもvalueで代入してないのに何故Nameプロパティが機能してるのか分からなくて… setとgetの中身を記述しなくてもプロパティは機能するのですか?
851 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 08:52:41.32 ID:VAfV6Qs50.net] public string Hoge { get; set; } は private string _Hoge; public string Hoge { get { return this._Hoge; } set { this._Hoge = value; } } の省略構文みたいな感じになる (実際にはこの_HogeはC#からアクセスできない名前にコンパイルされる)
852 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 08:57:28.04 ID:WhpQbL/L0.net] >>837 string Hoge { get; set; } は自動実装プロパティと呼ばれるもので、 内容は>>838 の通り。
853 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 10:05:53.21 ID:yzhNtOt8H.net] ありがとうございました >>831 https://docs.microsoft.com/ja-jp/dotnet/csharp/linq/query-expression-basics そうですねfromの間違いでした失礼しました 「scoreはそのクエリ構文内で使うローカル変数的なもの」ってのは割としっくり来ました 「LINQ/クエリ構文は1次元相手にも使える」SQLとは全くの別物と考えて頭からっぽにして勉強しなおしたほうがよさそうですね
854 名前:デフォルトの名無しさん [2019/05/13(月) 15:49:43.81 ID:d2gOVbtC0.net] vsを軽くするセッティングはないでしょうか? 重くなる原因はhddへのアクセスが100になってしまうからです SSDはないです
855 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:02:30.23 ID:UKQBojaO0.net] object 型の変数 x に int 型にキャストできる型(short 型や byte 型など)の値が代入されているときに その値を int 型にキャストしたいのですが、(int)x とすると InvalidCastException が投げられてしまいます。 x に代入されている値が例えば short 型だと分かっているなら (int)(short)x でうまくいくのですが、 この方法だといちいち値の型を調べる必要があるのでもっとスマートな方法があれば教えていただきたいです。 一応自分でも考えてみたところ int.Parse(x.ToString()) なら x の型によらずうまくいったのですが、 値の変換をするだけなのに文字列を経由するのはすごく無駄なことをしているような気がします。 よろしくお願いいたします。
856 名前:デフォルトの名無しさん [2019/05/13(月) 16:05:08.31 ID:d2gOVbtC0.net] private void Form1_Load(object sender, EventArgs e) { var but = new System.Windows.Forms.Button(); but.Name = "button1"; but.Text = "押せ"; but.Location = new Point(0, 0); but.Size = new System.Drawing.Size(80, 20); Controls.Add(but); } コードでコントロールを追加したいのですが、ボタンは追加されませんでした エラーでも出てくれればいいんですが、エラーは出ません エラーは出ないけど、思い通りに動かない場合、何をヒントにしたらいいでしょうか
857 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:07:12.88 ID:XGLfyuuud.net] ググりゃいくらでも記事出てくるやんけ そいつらは試したの? 自身の環境も書かない、何を試したかも書かない、知識不足なのに勝手に要因を決めつける 初めて質問するならまだしも散々してきといてそれ?
858 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:08:41.09 ID:XGLfyuuud.net] >>844 841に対して
859 名前:デフォルトの名無しさん [2019/05/13(月) 16:14:20.97 ID:d2gOVbtC0.net] 出てきました 場所が悪かったようです ごめんなさい
860 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:14:45.92 ID:UKQBojaO0.net] >>843 そのコードをコピペして試してみたら私の方では問題なく表示されました。 そちらでうまくいかない原因は ・Form1_Load が呼び出されていない ・追加したボタンの上に別のコントロールが重なってしまっている あたりではないでしょうか。 とりあえず Form1_Load が呼び出されているかどうかを確認するために Form1_Load の最後に MessageBox.Show("呼び出されてるよ"); を追加してみて、 メッセージボックスが表示されるかどうかを確認されてみてはいかがでしょうか。
861 名前:デフォルトの名無しさん [2019/05/13(月) 16:15:55.94 ID:d2gOVbtC0.net] >>844 問題はhddへのアクセスです これは公式のサイトでは、SSDへの交換を推奨しています それ以外の手段はないかなと思って質問しました
862 名前:デフォルトの名無しさん [2019/05/13(月) 16:16:41.14 ID:d2gOVbtC0.net] >>847 ありがとうございます 位置が0 0だと左側に隠れてしまうようでした
863 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:23:36.93 ID:UKQBojaO0.net] >>849 解決したようでよかったです。 私も勉強中の身なのでお互い頑張りましょう。
864 名前:デフォルトの名無しさん [2019/05/13(月) 16:31:17.78 ID:fb9Hu3lu0.net] ついでに聞きたいんだけど、このボタンの描画ってUIスレッドで実行されることは保証されてるの?
865 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:34:35.11 ID:VAfV6Qs50.net] >>842 Convert.ToInt32 >>851 それがUIスレッドの仕事なんだけど、何を心配してるの?
866 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 16:51:55.46 ID:UKQBojaO0.net] >>852 まさに探していたものです! 最悪の場合、型ごとに場合分けしてキャストするメソッドでも 作ろうかと思っていたのですが、実にスッキリ解決できました。 どうもありがとうございました。
867 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 17:46:32.42 ID:W1wujo120.net] >>838-839 詳しくありがとうございます。 前の章にも書いてありました。自分の勉強不足でした…
868 名前:デフォルトの名無しさん [2019/05/13(月) 18:45:40.09 ID:cAHvDA7yF.net] PCからのサウンド出力をイヤホンが刺さっている刺さっていないに関わらず、内部スピーカーかイヤホンか選択して出すにはどうしたらいいでしょう NAudioを使っていろいろ試してるんですがうまくいきません OS Windows10 サウンドデバイスがSpeakers/Headphones Realtek だとサウンドデバイスがスピーカーとヘッドホンに分かれていませんが、これだと無理なのでしょうか
869 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 19:00:08.34 ID:rRpVq2UzM.net] それは間違った機能だから出来たとしても実装するな イヤホンが刺さってたら絶対イヤホンで出せ
870 名前:デフォルトの名無しさん [2019/05/13(月) 20:12:51.62 ID:d2gOVbtC0.net] public Form1() { MessageBox.Show("form1"); } private void Form1_Load(object sender, EventArgs e) { MessageBox.Show("form2"); } フォームアプリについてなんですが、この2つ関数の違いはなんですか? タイミング的にはform1関数が先なんですが、どう使い分けるんでしょうか?
871 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:22:07.84 ID:zDycstDZa.net] >>857 先に言語の入門本やサイトなどを読むべき そうすればクラス名と同一名のメソッドには特別な意味があることが分かるし そのキーワードと一緒にイベント名で検索すれば関連する話題も出てくる
872 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:29:22.69 ID:XGLfyuuud.net] 何度も何度も基礎からやれって言われてもずっとやらんのだからもう無理だと思う こういうのが才能とかセンスみたいなもんなのかね
873 名前:デフォルトの名無しさん [2019/05/13(月) 20:29:39.44 ID:d2gOVbtC0.net] 調べた限りでは フォームが作られるときと、作られて読み込まれたとき という差でしょうか
874 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:38:07.48 ID:jADcqpCya.net] >>855 普通は物理的に切り替えている(ジャックにプラグを差し込むとSP出力が物理的に切断される)から無理でしょうww 恐らくソフトウェアでそれをやってるマシンはないと思うよ
875 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 20:47:37.18 ID:XlJDR9UI0.net] >>855 その機器のドライバにAPIでも無ければ少なくともC#では無理 ハードウェアの方から調べることでここで質問して答えられるようなものではないと思う >>860 bbs.wankuma.com/index.cgi?mode=al2&namber=38433&KLOG=66 コンストラクタはクラスで必ずはじめに実行されるもの イベントメソッドと分けて考えないと
876 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 21:05:00.08 ID:0/Wah16u0.net] >>857 だから入門用の本を読めと何度も言ってんだろうが
877 名前:デフォルトの名無しさん [2019/05/13(月) 21:38:52.34 ID:ZJ4TG7EAa.net] >>856 >>861>>862 ありがとうございます 無理ですか。。 Audio Switcherなるものがあるのでソフトウェアからの制御もなんとか出来るかと思ったのですが
878 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 22:32:05.56 ID:jADcqpCya.net] >>864 ハードウェア的にスプリッターを使ってライン出力かヘッドフォン出力を 二股で取り出せるようにする方が賢明でしょうね 100均で売ってるよ
879 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 22:38:16.41 ID:lwKqLD9e0.net] >>864 いや昔やったこと有るからできるんだが、昔過ぎてやり方思い出せんわ Vistaからマスターオーディオの制御ができるAPIがWindows標準になっていて 当時見たソースの跡地だけ発見したわ https://www.codeproject.com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Control
880 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 22:41:01.01 ID:lwKqLD9e0.net] >>864 ググったらそれらしきもの在ったから、あとは自分で頑張ってくれ mikeo410.minim.ne.jp/cms/~programmingcoreaudiointerface
881 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:02:15.55 ID:jADcqpCya.net] いやいやいやw https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A9%E3%83%BC%E3%83%B3%E3%83%97%E3%83%A9%E3%82%B0 ↑に説明付きの画像が出てるけど、要するにプラグが差し込まれると物理的にSP出力がオープンになる 構造に普通はなってるんで無理ですw その辺テレビとかと何も違わないよ
882 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:05:51.31 ID:0pB96hJZ0.net] プラグが刺されるとオープンになるジャック使ってるのは、プラグが刺されたらスピーカーから音が鳴らなくて良いものだけだろ。 テレビでも最近のはそんなジャック使ってないわw ジャックにプラグ刺されてるか判定してるだけ。 お前はどんなラジカセで書き込みしてるんだ?
883 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:08:05.97 ID:jADcqpCya.net] >>869 確認してから書いた方がいいよ。 特殊な業務用とかフィリップスみたいなところが作ってる超高級品は知らんけど、 大概のTVはそんなもったいぶったことしてないの。する意味がないでしょ
884 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:16:14.24 ID:lwKqLD9e0.net] >>870 WindowsだとUSB経由とかS/PDIDとか有るし、そこに必ずSPが繋がっているとも限らないから 音声の切り替えはソフトでやっているのよ イヤフォンの切り替え機能って俺の記憶だとWindows10 が最初だよ
885 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:26:37.35 ID:lwKqLD9e0.net] >>870 あと、Windowsの機能で切り替えるのは標準の出力先だけだが、当然APIで標準以外の出力先に音声流すことも可能だ
886 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:28:52.35 ID:jADcqpCya.net] >>871 それはオーディオデバイスが複数ある時にどれを有効にするかって話と違うの? あと、高級品のサウンドカードだと複数系統の出力があってそれぞれボリュームコントロールが ついていたりするかもしれないが、そういうの使ってるならこんな質問してないと思うよ。 普通に考えてオンボードのサウンドしかついてない普通のPC前提の質問じゃないの?
887 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:31:41.38 ID:jADcqpCya.net] なんかググるとM/BによってヘッドホンとSP(ライン出力)が排他になってるのと そうでないのがあるみたいだけど、質問者みたいに排他になってる場合は普通は 物理的に切り替えてるはずなんで、ソフトじゃどうにもならんと思うよ
888 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:32:56.12 ID:lwKqLD9e0.net] >>873 普通のパソコンだってUSBのデコーダー付けられるだろ それがどうやって物理的に切り替えられるのか考えてくれよ それと俺は音楽プレーヤーソフト作ったこと有るから、恐らくあんたよりは詳しい
889 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:38:00.03 ID:jADcqpCya.net] >>875 USB接続のオーディオデバイスを使ったら M/Bのヘッドホンからはそもそも音が出ないと思うんだけどね普通は 複数のオーディオデバイスを同時に有効にして同じ音を出す、 なんて芸当できるんだっけ?
890 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:40:11.66 ID:jADcqpCya.net] 光出力が付いてる場合は排他にできるわけないね確かに。 でも質問者がそういう環境ならこんな質問してないわな
891 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:41:57.51 ID:lwKqLD9e0.net] >>876 Windows10は普通にイアフォンとその他が切り替わるように仕様変更されている 勿論それがHDMI経由だろうがSP端子だろうが光出力だろうが
892 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:43:53.50 ID:lwKqLD9e0.net] >>877 つかWindows95の頃から、音声出力はソフトで切り替えるのが常識だよ ハード的に変えるほうが寧ろ珍しい
893 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:51:07.37 ID:jADcqpCya.net] >>878 いやちょっと何を言ってるのか分からないんだけど、 ハードウェアがそうなってなきゃソフトがいくら頑張っても手も足も出ないのよ 質問者の環境はSP出力とヘッドフォン出力が排他的になってる環境で、 その切り替えは普通はメカ接点で物理的に行われるものだから、ソフトじゃどうしようもないよ
894 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:55:36.69 ID:lwKqLD9e0.net] >>880 少なくとも今はHDMI経由でテレビから音声流す機能は標準搭載されているから 年代物のパソコンを除けばデジタル音声出力機能は標準搭載だよ それをどうやってイヤフォンと物理的に切り替えるのか考えたら無理だと判るでしょ Windows10から自動切り替えはできるようになっているけど、当然ソフトで制御しているし それをVista以降はAPIとしてプログラマーが簡単に触れるようになっている
895 名前:デフォルトの名無しさん [2019/05/13(月) 23:55:59.16 ID:ec7a7a6ia.net] いやちょっと何を言ってるのか分からないんだけど、 メカ接点で物理的に行われるが、 SP出力とヘッドフォン出力が排他的になってるのは今時はソフトの設定でしょ?
896 名前:デフォルトの名無しさん mailto:sage [2019/05/13(月) 23:58:20.52 ID:jADcqpCya.net] >>881 だーから、その場合は普通はM/Bのヘッドホンからは音出ませんよ。 M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってるだから >>882 今時も糞もないってだからw M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってて、メカスイッチでそれを ライン出力(スピーカー)と切り替えてるだけなので
897 名前:デフォルトの名無しさん [2019/05/14(火) 00:00:01.39 ID:/tIovtjDa.net] Mixer使えって話でしょ
898 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:04:48.16 ID:vkfPDW5o0.net] >>882 サウンドミキサーってのがWindows95には既に付いていて、それで音声の切り替えとかマスターボリュームを制御していたから XPまでのソフトでは大本の切り替えとか不可能だった しかしVISTAから全てソフトから見えるようになって、ソフトごとにどの出力から出すなどの指定ができるようになった 同じパソコンでイヤフォンとスピーカーから違う曲を流すことさえやろうと思えばできるんだよ
899 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:06:27.49 ID:vkfPDW5o0.net] >>884 Mixerを制御するAPIがVISTA以降に公開されたんだよ C#から制御したことも有るし
900 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:14:28.54 ID:94a7CpYNa.net] >>885 えーっとですねえ、だからそんな芸当はHWが対応してなきゃできないんだってw 標準的なPCのオンボードのオーディオデバイスはオーディオ出力が一つしかないので、 そんな芸当は逆立ちしても不可能ですw 物理的な出力端子の数 = オーディオ出力の数 ではないのよ。
901 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:14:35.14 ID:KlvEEe7u0.net] win32apiスレにでも行ってくれ
902 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:15:52.53 ID:vkfPDW5o0.net] UWPのMediaPlayerでもオーディオ出力先は好きなように変えることができる https://docs.microsoft.com/ja-jp/windows/uwp/audio-video-camera/play-audio-and-video-with-mediaplayer このページ内の「特定のオーディオ エンドポイントへの出力」ってのがピンポイントでは有るが、これはUWPのモジュールで最近WinFormsから使えるようになったが まだ未完成な部分もあって割と面倒 ただ、同じことはAPIつかって地道に作ることもできるよ
903 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:20:22.84 ID:vkfPDW5o0.net] >>>887 Windows10なら右下のスピーカーマーク押して「サウンド」ってのを選択すると出てくるダイアログで 「再生」ってタブを押せば、そのパソコンで使える音声出力先が出てくるが 出力が1つしか無いなんて化石のようなパソコンは見たことないわ 最低限スピーカーとイヤフォンとHDMIぐらいは付いている
904 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:22:45.62 ID:94a7CpYNa.net] >>889 まあどっちにしろそれは質問してる人が聞きたいことと違うと思うよ。 質問者はアプリごとに別々のチャンネルに音を出したいって言ってるんじゃないからね。
905 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:25:02.63 ID:94a7CpYNa.net] >>890 だから何度も同じことを言わせないで。 既定のオーディオデバイスは一つしか選択できない だからHDMIのモニターから音を出すと普通は同じ音をM/Bのヘッドホン端子から 出力することはできないの
906 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:25:05.36 ID:vkfPDW5o0.net] >>891 いや、889はイヤフォンが繋がっていてもスピーカーから音声を流す機能そのものだ 何も読んでいないだろ
907 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:26:26.04 ID:vkfPDW5o0.net] >>892 HDIMIとパソコンのイヤフォン端子をどうやって物理的に切り替えるんだよ 普通にソフトで切り替える機能が標準でついているんだよ
908 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:27:34.01 ID:94a7CpYNa.net] >>893 どこをどう読んだらそうなるのw だから、何度も言うけどHW的に排他的になってたらソフトじゃどうにもならないってw
909 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:29:20.12 ID:94a7CpYNa.net] >>894 ソフトで切り替える? 何を言ってるのか分からないよ。 単純な質問だ。 君のPCではHDMIのモニタを既定のサウンドデバイスに選択している時に、 同じ音をM/Bのヘッドフォン端子からも聞くことができるのかい? できないってw 今まで知らなかったのか
910 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:30:46.74 ID:vkfPDW5o0.net] >>895 string audioSelector = MediaDevice.GetAudioRenderSelector(); var outputDevices = await DeviceInformation.FindAllAsync(audioSelector); foreach (var device in outputDevices) { var deviceItem = new ComboBoxItem(); deviceItem.Content = device.Name; deviceItem.Tag = device; _audioDeviceComboBox.Items.Add(deviceItem); } コンボボックスで指定した出力先に音声を切り替えているだろ 頭弱いねぇ
911 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:30:55.58 ID:94a7CpYNa.net] もう寝るんで消えますおやすみ
912 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:32:36.55 ID:94a7CpYNa.net] >>897 何を言ってるんだこの人。 その出力先っていうのはオーディオ出力のことであって 物理的な出力端子じゃないんだってば どんだけメカ音痴なのマジで
913 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:33:11.08 ID:vkfPDW5o0.net] >>896 それは質問と違うこと言っているよね 音声出力を標準以外からソフト制御で切り替えられるんだよ VISTAからね
914 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:34:46.05 ID:94a7CpYNa.net] もうボケ老人の繰り言だけど、だから普通のPCのオーディオ出力端子っていうのは ヘッドホンとライン出力と2系統あるように見えるけど、実態は1つなんだよw 2つの別々のADCに繋がってるわけじゃないの。同じものをアナログ的に分配してるだけなの
915 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:35:23.50 ID:94a7CpYNa.net] >>900 だからね、質問者はそんなこと聞いてないのよ
916 名前:Hルトの名無しさん mailto:sage [2019/05/14(火) 00:35:25.68 ID:vkfPDW5o0.net] >>899 そこのdevice.Nameってのが「ヘッドフォン」だったり「HDMI」だったりするんだよ あんたが知らないだけで10年前からソフトで切り替えられる
917 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:36:25.52 ID:++GJZRWf0.net] Realtekのオーディオデバイスならイヤホン端子とスピーカー端子はH/Wで排他になってないわな 設定で排他にするか切り替えられたはず
918 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:41:10.69 ID:KlvEEe7u0.net] 話し合ってるレイヤーが違うんだよ いい加減気付いて質問者のためになるレスをしてくれ 質問内容が不明瞭なら明確になる質問を返せ 想像で質問内容を決めつけて延々と罵り合ってるだけで肝心の質問は何一つ進展してないぞ
919 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:41:44.61 ID:94a7CpYNa.net] >>903 もうダメだなこの人。 だから何度も言うけど、それはHWが対応してないとできないのよ。 何度も言うけど、普通のPCのスピーカーとヘッドホン端子は同一のオーディオ出力に繋がってるの。 別々のオーディオ出力に繋がってるんじゃないの。わかる? 次いでいうと、これも何度も書いてるが、それ質問者の質問と全然関係ないの。 質問者さんの質問はスピーカーとヘッドホンが排他的に切り替わるのが気に入らないから ソフトで何とかできないか、だから。 何度もいうけど、普通のPCではHWで物理的に切り替えてるので不可能です
920 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:47:57.18 ID:vkfPDW5o0.net] >>906 パソコンにHDMIは最低限付いているから、音声出力が1系統しか無いパソコンなど滅多にお目にかかれません しかもUSBとかBluetoothとか音声を出す場所はいくらでもあるんだから、
921 名前:最低限ソフトでオフに出来ないと問題になる つか1系統でイヤフォンとスピーカーが物理的に切り替わるだけしか出来ないパソコンって存在するのか? 例えば何ていうパソコンのことか具体的に名前出してくれ [] [ここ壊れてます]
922 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:49:56.17 ID:BJB1D/ui0.net] 落ち着け。どっちも正しい。 イヤホンジャックの接続を確認して他のサウンドデバイスを黙らせるハードウェアも有る。 時々出力先間違えるドライバが有るな。 再生デバイスの先でイヤホンジャックが物理的にスピーカー出力を切る装置も有る。 後者はソフトではどうしようも無い。
923 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:52:31.92 ID:94a7CpYNa.net] >>907 何がいいたいの? まったく意味が分からん 質問者さんが何を聞いてるか、もう一度落ち着いてよく考えてよ
924 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 00:58:48.14 ID:vkfPDW5o0.net] >>909 イヤフォンつなげたままスピーカーから音声を流すAPIは存在するってことね SPとHPが共有だったとしても、他に出力する先は色々有る 何故物理的に不可能だと言い切っちまうの?APIが存在するのにさ
925 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 01:06:05.42 ID:94a7CpYNa.net] >>910 意味が分からないよ。 だから、誰も最初からそんな話してないって 何で一人で「アプリごとに個別の出力先に音声出力が可能か?」なんて 誰も問題にしてない話をしてるのよ
926 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 01:06:49.56 ID:94a7CpYNa.net] どっからそんな話が出てくるのマジでw ほんと意味わからんよ
927 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 01:18:14.50 ID:AtdtzVQx0.net] 読解力がないってパターン?
928 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 02:01:08.24 ID:mmoBBtY10.net] ワロ
929 名前:デフォルトの名無しさん [2019/05/14(火) 05:43:28.06 ID:fttRH1Ml0.net] >>862 関数とは言わないんですね
930 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 07:21:30.35 ID:es4OQUhe0.net] >>870 たいがいのテレビもそうなってるよ。 確認してみた?自分ちのテレビ。
931 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 07:23:05.19 ID:es4OQUhe0.net] >>876 それをやるのがオーディオミキサーじゃん? 昔ならsndvol32とか。
932 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 12:22:39.22 ID:HKF8AKPGa.net] >>916 なってないよ。 そういや思い出したけど、大昔のテレビはイヤホンジャックが2つあったんだよな で一つはSPの音を消さない仕様になっていた 普通に考えてその方が単純明快で親切だ ヘッドをンを差し込んでも音を消さないためには、何とかボタン押して設定画面出して この項目のアレを.... なんてまどろっこしいしヲタしか使えないしソフトもハードもコストがかかる >>917 何か根本的に勘違いしてるんじゃないの? それは同一のオーディオデバイスの複数の音源のボリュームを調整するんだよ。 複数のオーディオデバイスの音量を調整するんじゃないの。わかる? 他の人も書いてたと思うけど、ウィンドウズは複数のオーディオデバイスを持てるが、 既定のデバイスに設定できるのは一つだけだ(当たり前だけど)
933 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 13:04:21.56 ID:sprIIWlUd.net] >>918 そんな安物使ってるのか。 普通はジャックの状態で選択してるだけで、物理的に切断はよほどローテクな機械しかやらんよ。 スマホにイヤホン刺してもスピーカーからも音鳴るっしょ。 PCでもそうなってるよ。普通は。 刺したら切り替わるだけ。排他ではない。 https://pcrepair.w-pickup.com/post-6263/ とか、 逆に、両方から鳴って困る事のQAもある。 https://www.fmworld.net/cs/azbyclub/qanavi/jsp/qacontents.jsp?PID=3908-4397 sndvol32はそのとおりだな、間違ってた、すまん。 出力デバイスを選ばにゃならんが、直接叩くなら別個に出力できたと思うけど。 具体的にはKernel Streamingで。
934 名前:デフォルトの名無しさん [2019/05/14(火) 13:29:10.73 ID:HHew+yI/0.net] >>918 それイヤホンジャックじゃなくてLINE出力のことだろ?
935 名前:デフォルトの名無しさん [2019/05/14(火) 14:01:03.60 ID:xGjK1aQt0.net] こんなところまでLINEが進出してるとは、韓国もやるな
936 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 15:22:49.71 ID:HKF8AKPGa.net] >>919 TVはどうだか知らんけど、なるほどPCではソフトでヘッドフォン接続を検出して SP出力を制御してるタイプもあるんだな。 これは素直に知らなかった。 自作用M/Bだとリアパネルの端子の接続をソフトで検出するタイプは昔から結構あったけど。 質問した人のPCがこういうタイプならドライバのユーティリティーで設定変えたら解決するね。 ノート含めメーカー製のPCの大半はこういうタイプじゃないと思うけど
937 名前:デフォルトの名無しさん [2019/05/14(火) 18:33:42.83 ID:fttRH1Ml0.net] wpfとwinformどちらがいいのですか? C#で検索するとほとんどはwinform向けのコードのような気がします 大部分は同じですけども
938 名前:デフォルトの名無しさん [2019/05/14(火) 18:50:04.03 ID:gmflVafJ0.net] >>855 です 色々と議論頂いて申し訳ないでした しかしとても参考になりました ありがとうございました まさに>>919 がやりたいことなんですが、自分がサウンドデバイスとAPIの関係性がいまいち理解不足な気がしますのでもう一度しっかり見直してみたいと思います
939 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 18:50:39.47 ID:rq13d1wo0.net] >>923 絶対winform wpfは資料なさすぎて辛いよ
940 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 18:51:24.71 ID:xTv9RSlG0.net] >>923 どっちでもいいけどまあとっつきやすいのはWinFormじゃない
941 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 18:56:25.88 ID:zLBAV05La.net] >>923 シンプルな画面ならwinformsかwpfどっちでもいい 複雑な画面ならwpf一択
942 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 19:02:22.19 ID:gEF4/DH4M.net] >>923 デスクトップアプリ自体が時代遅れだから、基本的にはどちらもお勧めはできない。 しかしちょっとしたツールなんかで便利なことはあるから、覚えておいて損はないだろう。 その意味では断然WinFormsがお勧めだ。 WPFは習得コストが高く、デスクトップアプリという死んだ技術に対しては割に合わない。
943 名前:デフォルトの名無しさん [2019/05/14(火) 19:04:08.39 ID:fttRH1Ml0.net] 確かに調べた限りではwinformのほうがサンプルが圧倒的に多いですね wpfは初学者にはきついかも、、 >>928 デスクトップアプリが時代遅れとはなんのことでしょうか 毎日使ってますが
944 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 21:07:11.88 ID:0h207dTD0.net] 横で申し訳ないのだけど、WinFormsが枯れて次に学習すべきは何がおすすめ? とりあえず簡単な業務用アプリくらいは作ってますが(データベースと連携あり) ASP.NETとかWebアプリに進むと、セキュリティの面でまた何かと面倒なのかなと躊躇しちゃう
945 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 21:23:53.52 ID:0tHpu3UbM.net] 時代はデータサイエンティストを求めてる
946 名前:デフォルトの名無しさん mailto:sage [2019/05/14(火) 22:43:21.70 ID:++GJZRWf0.net] >>924 Realtek HDオーディオマネージャーでやってるのは、 おそらくOSのAPIではなく Realtekのドライバーの独自機能を直接呼び出してると思う
947 名前:デフォルトの名無しさん [2019/05/15(水) 00:23:39.11 ID:HTdksHae0.net] C#関係ないな
948 名前:デフォルトの名無しさん [2019/05/15(水) 16:32:56.09 ID:VEpWlxZJ0.net] wpf始めたんですが、画像の表示について教えてください コントロールに紐付ける方法がわかりません private void Window_Loaded(object sender, RoutedEventArgs e) { var bt = new BitmapImage(); bt.BeginInit(); bt.UriSource = new Uri(@"C:\Users\◎◎\Desktop\programing\vs_project\0_practice_project\tilemap_wpf\tilemap_wpf\img\1.png"); bt.EndInit(); } ここまでは調べられたんですが、コントロールに紐付ける方法がわかりません コントロールの種類はimageで名前はimage_mです。 資料少なめですね
949 名前:デフォルトの名無しさん [2019/05/15(水) 17:07:43.75 ID:VEpWlxZJ0.net] できたです ごめんなさい
950 名前:デフォルトの名無しさん [2019/05/15(水) 17:14:40.06 ID:VEpWlxZJ0.net] >>934 このbegininitで初期化をコントロールの初期化をするという説明がされていますが、なぜこの作業が必要なんですか? winformにはなかった手順なので、存在する意味がわかりません
951 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 17:39:10.29 ID:tK1Lgxrc0.net] 自己解決したなら解決手法を書きましょう winformとwpfは異なるものなので手順も異なります
952 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 17:58:43.55 ID:WnxQfHPj0.net] 忠告されているのにわざと自分から沼にはまって助けを求める人
953 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 18:44:30.38 ID:SVWj/8FLM.net] 自分が描いた迷路で迷うのもまた人生さ
954 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 19:13:20.58 ID:le9v9LR70.net] >>934 URL指定するだけで良いならnew BitmapImage(URL);でいいよ ロード前に色々プロパティ設定したいならBeginInit使う 固定の画像ならXAMLで<Image Source="URL"/>だけでもいい
955 名前:デフォルトの名無しさん [2019/05/15(水) 19:58:30.74 ID:I+StC2Kj0.net] >>932 ありがとうございます 引き続き色々と調べてますが未だ出来ていません NAudioを使ってオーディオデバイスの取得をしていて、自分のイメージでは オーディオデバイスをスピーカーとヘッドホンのそれぞれで取得して、どちらかを既定のデバイスとして設定してあげれば出来るのかな?と考えてたんですが デバイスがSpeakers/Headphonesの一つしか取得できないのでPC側の出力状態になっているものしか制御できないのです この辺りがHWの制約によるものなのかドライバの設定でなんとかなるのかを現在調査中です
956 名前:デフォルトの名無しさん [2019/05/15(水) 21:08:20.12 ID:VEpWlxZJ0.net] >>940 引数 1: は 'string' から 'System.Uri' へ変換することはできません。 new BitmapImage(url) で指定するとこのエラーが出ますが、参考ページありますか?
957 名前:デフォルトの名無しさん [2019/05/15(水) 21:28:23.64 ID:4Ta36StR0.net] >>942 あなたは逆引き本を買って、コードをコピペしなはれ それがええで
958 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 21:50:05.54 ID:4NWqR2j00.net] もう誰か雇って書いてもらえよ
959 名前:デフォルトの名無しさん mailto:sage [2019/05/15(水) 22:16:07.15 ID:QUEiJBNt0.net] >>942 関係ないこと聞くけどググれない理由でもあるの? System.Uriってキーワードは出ているし自分でも>>934 でnew Uriのインスタンス作っているのに BitmapImage https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.media.imaging.bitmapimage System.Uri https://docs.microsoft.com/en-us/dotnet/api/system.uri
960 名前:デフォルトの名無しさん [2019/05/16(木) 05:04:31.88 ID:lb5/XXvB0.net] なんで一度uri変数に入れないといけないのですか?
961 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 05:07:05.20 ID:fJS0gkuhM.net] 文句はMSに言っとくれ
962 名前:デフォルトの名無しさん [2019/05/16(木) 05:37:02.96 ID:lb5/XXvB0.net] treeviewのノードなくなってますけどどうやってノード追加するんですかね
963 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:42:10.65 ID:BUJhrwgQ0.net] Ruby でも文字列から、URI オブジェクトを作る。 たぶん、他の言語でも同じだろ require 'uri' site = URI( "example.org/test.cgi?a=b&c=d" ) p [ site.scheme, site.host, site.port, site.path, site.query ] #=> ["http", "example.org", 80, "/test.cgi", "a=b&c=d"] # URL を抜き出す。 p URI.extract( "abc example.net/ xyz" ) #=> ["example.net/"]
964 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 06:53:52.06 ID:teItWolR0.net] URIとやらに便利なメソッドがいっぱいあるんだろう。知らんけど。
965 名前:デフォルトの名無しさん [2019/05/16(木) 07:06:03.55 ID:lb5/XXvB0.net] >>949 そういうものなんですね 型を適切なものにしないといけないと uriオブジェクトを作るという表現で少しわかった気がします
966 名前:デフォルトの名無しさん [2019/05/16(木) 08:42:14.73 ID:lb5/XXvB0.net] >>949 例えば、urlが文字列とご認識されないようにこういう宣言をするってことでしょうか?
967 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 09:09:54.35 ID:Ja6m86QIM.net] >>952 突然Rubyを持ち出すこいつはこの板の名物キチガイだから触っちゃだめ ちなみにRubyはゆるふわ言語だからURIを受け取る引数に文字列を渡してもだいたいなんとなく動くようになっている(そして後になって予期せぬ不具合の原因になる)場合が多い
968 名前:949 mailto:sage [2019/05/16(木) 09:11:37.63 ID:BUJhrwgQ0.net] オブジェクト指向では、何らかのクラスのオブジェクトを作って、操作するのが基本 例えば、URI オブジェクトを作っておけば、 そのクラスに定義されている、便利なメソッド・プロパティなどが使える それと、C# みたいな静的言語では、 引数・戻り値などに型が指定されていたら、その型を使わないと型エラーになる!
969 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 09:19:26.89 ID:MP5x1HVo0.net] websoket通信でデータを受信して、それを別プロセスに渡すような処理をしたいのですが、MemoryMappedFileを使って共有メモリを見に行く方法は悪手でしょうか? 推奨されるプロセス間のデータのやり取り方法を教えてください。
970 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 09:34:38.83 ID:Qeg0MHQbM.net] WCFが推奨
971 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 10:29:56.16 ID:8QhWJQ3wd.net] WCFもどうなることやらな気はするけど。 俺は微妙だと思ってるから、よくembedioでhttpサーバ立てる。
972 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 10:33:24.75 ID:MP5x1HVo0.net] WCFですか、調べてみます。
973 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 10:50:26.05 ID:Ja6m86QIM.net] WCFはやめとけ 今のところWCFサービスに.NET Coreが対応する予定はないから、このままいけば.NET 5では消滅する
974 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 10:57:28.97 ID:7z6DTwj00.net] gRPCかwebapi 条件次第で玉葱かな
975 名前:デフォルトの名無しさん [2019/05/16(木) 10:58:05.89 ID:lb5/XXvB0.net] >>954 例えばurlの場合整形したりしやすいってことですね
976 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 11:05:39.44 ID:MP5x1HVo0.net] >>959 ということは >>960 のgrpcが良さそうですか? 玉葱とはなんでしょうか
977 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 11:32:13.27 ID:z4KGy0Nb0.net] ローカルのRPCにhttpを使うの嫌なんだよな
978 名前:デフォルトの名無しさん [2019/05/16(木) 11:54:44.97 ID:lb5/XXvB0.net] ツリービューに小要素を追加したいのですが、wpfでは rootNode.Nodes.Add(childNode1) のように、nodeプロパティでの追加は出来ないようです 何を使うか教えてください あとマイクロソフトのリファレンスでwpfのリファレンスってあるんでしょうか? 調べてるんですが、情報がごっちゃな気がします
979 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 12:05:27.24 ID:8QhWJQ3wd.net] embedioならwebsocket鯖にもなる。 他の言語から叩きたくなったときに超ラク。 >>963 なんで? クライアントがイケてないから? >>962 magiconionでは?
980 名前:デフォルトの名無しさん [2019/05/16(木) 12:06:43.82 ID:lb5/XXvB0.net] >>964 解決したました 英語サイトで調べたほうが遥かにわかりやすいですねw
981 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 12:12:11.19 ID:MP5x1HVo0.net] そもそもプロセス間通信をしようと思ったのは、websoketでデータ受信が忙しいからなんですが、マルチスレッドでも問題ないでしょうか?
982 名前:デフォルトの名無しさん [2019/05/16(木) 12:31:50.76 ID:9YitK9mS0.net] >>967 掲示板だと質問に向かない側面もあるしさ、やっぱStackOverflowに行って質問しようぜ https://ja.stackoverflow.com/
983 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 12:40:43.39 ID:/ttOpUx30.net] パソコン内でのプロセス間通信ならIPCがお手軽かと思いますわ
984 名前:デフォルトの名無しさん [2019/05/16(木) 14:11:05.64 ID:Ox4fjiQE0.net] >>944 ほんそれ
985 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 14:19:12.14 ID:8QhWJQ3wd.net] >>967 それなら普通にマルチスレッド(というかTask)で良いと思うけど。
986 名前:デフォルトの名無しさん [2019/05/16(木) 17:09:13.22 ID:lb5/XXvB0.net] wpfでpcのルートフォルダを取得して、そのサブフォルダも取得したいのですが、参考ページ教えてください。 https://dobon.net/vb/dotnet/file/driveinfo.html このページを参考にやっているのですが、ルートフォルダを取得というよりCを自分で指定してませんか? どのPCだろうがルートはCだから、それを基準にして、サブフォルダを取得するってことですか?
987 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:21:42.09 ID:PZtMCMcM0.net] >>972 利用可能なドライブの一覧を取得するには? https://www.atmarkit.co.jp/fdotnet/dotnettips/272getdrives/getdrives.html
988 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:25:25.98 ID:knSiwbWya.net] >>972 PCのルートフォルダってのがちょっと何を言ってるのか... システムドライブ(OSのインストールされているパーティション)(のルートディレクトリ)って意味ならこれ? https://www.atmarkit.co.jp/fdotnet/dotnettips/190windir/windir.html
989 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:32:00.72 ID:knSiwbWya.net] あ、話題のどちて坊やだったのか... 質問スレだから質問するのは全然OKだと思うけど、 何言ってるのか他人が理解できない質問とか、少しも自分で調べた形跡が感じられない 質問とかはちょっとマナー違反だよね
990 名前:デフォルトの名無しさん [2019/05/16(木) 17:39:45.70 ID:lb5/XXvB0.net] >>974 そうですね エクスプローラのツリーのように、フォルダを表示したいので
991 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 17:45:46.63 ID:8QhWJQ3wd.net] ドライブはフォルダじゃない。それだけでは?
992 名前:デフォルトの名無しさん [2019/05/16(木) 18:14:45.95 ID:lb5/XXvB0.net] フォルダに割り当てるパスを取得するにはドライブの情報が必要ですよね?
993 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:24:44.89 ID:mlG6Koyx0.net] >>978 「フォルダに割り当てるパス」 言っている意味が分からない。何がしたいのか具体的に書いて ドライブの情報は>https://dobon.net/vb/dotnet/file/driveinfo.htmlの内容で取得できる ファイルパスもツリービューに割り当てる要素だとしてもそのドライブの情報とは関係ない
994 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:30:23.23 ID:qEdn/tfrM.net] >>975 彼はおそらく調べようと思えば調べられるし 一人で進めようと思えばおそらくできるんだろう ただ、ものづくりに必要な孤独を楽しむ能力がないんだろう これまでたどってきた人生に依存する 人によっては精神を病んでしまうのでさっさと辞めることをオススメする 俺らの何がパンピーと違うかといえばおそらくそこ
995 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:34:23.01 ID:3A9ftzQu0.net] 転載制限が明示されないfreeは著作隣接権の放棄だと思っていました コメント機能まで考えなかったのでサーバー管理者の立場になることは考えが至りませんでした ファイル倉庫ではつまらないですよね 他人の著作物を基本にサイトを作ることは悩ましいですね 解説とリンクを書くだけならば問題が無いはず、と… いろいろ参考になりました ありがとうございます
996 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:34:57.02 ID:3A9ftzQu0.net] 誤爆しました すみません
997 名前:デフォルトの名無しさん [2019/05/16(木) 18:45:39.21 ID:lb5/XXvB0.net] >>979 何がしたいかですが、「エクスプローラのようなフォルダツリーの機能を作りたい」です
998 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 18:50:20.66 ID:mlG6Koyx0.net] >>983 それならツリーに必要な情報はそれぞれのディレクトリパスやファイルパスでドライブの情報じゃないのはわかる? エクスプローラーもそうなっているはず
999 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 19:20:17.44 ID:zVFyB/Pfa.net] >>980 次スレ頼んだ
1000 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 19:29:44.17 ID:s+6oZKe00.net] >>985 ふらっと C#,C♯,C#(初心者用) Part143 https://mevius.5ch.net/test/read.cgi/tech/1558002486/
1001 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 19:35:38.53 ID:zVFyB/Pfa.net] >>986 乙
1002 名前:デフォルトの名無しさん [2019/05/16(木) 20:21:22.17 ID:lb5/XXvB0.net] >>984 どうやら見当違いなことをしていたみたいですね ディレクトリパスで調べてみます
1003 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 21:13:53.08 ID:/ttOpUx30.net] >>988 Windows API Code Packって拡張をプロジェクトにインストールすると幸せになれると思うんだ あなたのやる気次第だが
1004 名前:デフォルトの名無しさん mailto:sage [2019/05/16(木) 22:47:17.86 ID:/89StDtwd.net] >>978 >>973 にドライブの一覧を取る方法が示されてるのになんで無視するんだろう
1005 名前:デフォルトの名無しさん mailto:sage [2019/05/17(金) 12:01:15.42 ID:8VLhbVxR0.net] PowerShell のGet-PSDrive だろ
1006 名前:デフォルトの名無しさん mailto:sage [2019/05/17(金) 18:20:58.23 ID:vi5zDanMM.net] PowerShell信者()
1007 名前:デフォルトの名無しさん mailto:sage [2019/05/17(金) 19:43:49.75 ID:zp36Ii500.net] >>986 乙。そしてこっちはもう埋めよう docsはもうテンプレに入れた方がいいな。ただし英語の方w 日本語版は翻訳酷いだけじゃなく情報抜けてるの見たことある
1008 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 11:16:06.52 ID:K7DGtrEf0.net] u
1009 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 11:16:26.24 ID:K7DGtrEf0.net] u
1010 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 13:46:29.54 ID:grGIhInBa.net] u
1011 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 14:18:54.84 ID:rGWK4TSn0.net] n
1012 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 14:39:21.39 ID:BJEduilX0.net] u
1013 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 14:39:40.73 ID:BJEduilX0.net] l
1014 名前:デフォルトの名無しさん mailto:sage [2019/05/19(日) 14:39:54.01 ID:BJEduilX0.net] l
1015 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 73日 8時間 4分 13秒
1016 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています