[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/03 17:51 / Filesize : 300 KB / Number-of Response : 1017
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part142



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

221 名前:デフォルトの名無しさん mailto:sage [2019/04/03(水) 20:27:20.36 ID:xnkmZns10.net]
>>216
GUIって表現がおかしいことを認めようとしないクズ

222 名前:デフォルトの名無しさん mailto:sage [2019/04/03(水) 21:08:42.50 ID:559k4PZzM.net]
ガイジかよw

223 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 00:57:03.82 ID:ZN2gQ81o0.net]
pythonで実装できるからと思ってtkinterに浮気してみたけどやっぱ.netってすげぇ便利だったんだなと思えたよ
GUI開発は開発環境含めて評価すべきだわ

224 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 01:51:05.61 ID:IOgreNy50.net]
>>221
GUIで配置できるって点だけじゃね?

225 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 02:37:37.19 ID:iJ70eOZ40.net]
iPhoneでAppstoreが成功して、カッコ良ければ売れるんだと思い、
ググルプレイが成功して収益管理まで提供したら売れると思ってたら
窓電話は不発、デスクトップでストアアプリ探さないから売り物さえ並ばない。
成功者は金の回りを用意して市場を作った。
MSは市場を作ろうとして壁を作った。

226 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 23:45:04.92 ID:CMDWj0ay0.net]
C#は、関数の引数は基本的に値渡しということですが、これ本当ですか?
unityで、引数にrefをつけて参照渡ししてるサンプルって見たことがないです。
すごくメモリ効率が悪い気がするのですが・・・

227 名前:デフォルトの名無しさん mailto:sage [2019/04/04(木) 23:53:18.48 ID:8Z7mdjDJ0.net]
>>224
なんで悪いと思うの?

228 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:02:47.99 ID:W1wYJ7EV0.net]
どうでもいい事でよくそんなに議論できるよな

229 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:05:27.61 ID:8GSOh3MvM.net]
どうせいつもみたいに値渡しだからオブジェクトが全部コピーされちゃうよ〜
みたいな奴だからうんざりする



230 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:08:41.76 ID:8GSOh3MvM.net]
巨大な構造体の場合は値渡しがボトルネックになる場合もなくはない
クラスの場合はどんなにデカかろうが参照しかコピーされないから関係ない
値渡しなのに参照なんですか?とか聞くな
うるせえなそういう仕組みだと思ってろ

231 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:20:17.79 ID:kZ8w9alb0.net]
>>224
クラスは参照型で、引数にした時は参照の値渡しになるから、心配するようなことにはならない。
構造体は値型だけど、あまり使わない。

232 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:25:11.16 ID:Zwa/Lf0S0.net]
c#の構造体って書き方がほぼクラスみたいなもんだからcの構造体と比較するとすごく違和感ある
ここまで書くならクラスでええやん

233 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:56:02.91 ID:UeOvQxG40.net]
インスタンスを設定したがわが保持って置かないと死ぬときもあるしそうでないときもある
ループで生成しまくる処理のときはこちらでインスタンスを管理しないと
表示するたびに生成しまくって
前のは消されてない
ライブラリの中でほじってるらしくて
消そうと思っても消えない
って状態になることも多い

234 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 00:57:09.43 ID:N3n7oHyA0.net]
>>231
これあるあるだわ
管理ダルいからスコープ決めてインスタンス作ってるわ

235 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 08:44:21.30 ID:x8OJz+Ud0.net]
>>230
既定のアクセシビリティの差しかないC++の悪口かな?

236 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 09:44:01.09 ID:0L4pmkxC0.net]
構造体て値の全コピーが楽なぐらいで無理に使う必要ない

237 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 10:43:00.62 ID:zi2/La8Bp.net]
GCの起動サイクルがクリティカルに影響したりネイティブとの相互運用等
無理してというより必要な時のみ使うものだからね

238 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 12:09:16.02 ID:85UtCV7c0.net]
サブフォームFORM2を作って右上の×で消した時どうすれば(どこを調べれば)よいですか?

FORM2 form2 = new Form2();

239 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 12:25:16.27 ID:R01axtSvM.net]
>>232
そうやってもライブラリの中の人まで死ぬ保証はないかもしれないしあるかもしれない



240 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 13:21:34.57 ID:x8OJz+Ud0.net]
>>236
質問の意味がよく分からん
閉じたときに何かしたいならFormClosedイベントだけど

241 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 19:45:13.46 ID:N3n7oHyA0.net]
>>237
さすがに広く使う変数は
パラメータークラス作って使いまわしますよ []
[ここ壊れてます]

243 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 22:56:55.47 ID:85UtCV7c0.net]
>>238 意味不明な文章ですみません。聞きたい質問は以下のことです。

サブフォームFORM2を作って右上の×で消した時とサブフォームを消してない時は
どのようなコードを書けば判別できますか?

244 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 23:05:30.38 ID:UeOvQxG40.net]
>>240
ちっともわからん

245 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 23:13:56.69 ID:UeOvQxG40.net]
>>240
Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?

246 名前:デフォルトの名無しさん mailto:sage [2019/04/05(金) 23:14:11.83 ID:cVRKM8Bg0.net]
>>240
「右上の×で消した時」はわからないが
フォームがDispose(Close)されているか form2.IsDisposed
フォームが表示されているか form2.Visible
具体的に何が目的かを書いてもらった方が答えやすいと思う

247 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 02:06:32.31 ID:m4qLgJ3pa.net]
>>240
真面目に何言ってるのかさっぱり分からんから、投稿する前に読み手の立場に立って
文章推敲することを覚えた方がいいよ。

これ、プログラミングのスキルより何倍も重要
いやほんと煽りとか抜きに。

Formが閉じられた原因を知りたいなら↓だけど、
それなら普通ググって自己解決してるはずだと思うから違うんだろうね
dobon.net/vb/dotnet/form/unloadmode.html

248 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 02:30:19.50 ID:5XTKYZffM.net]
多分form1からボタンクリックでform2を開いてそのform2が閉じられたことをform1で検知したいってことなんじゃないか?

249 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 02:55:07.02 ID:MT95SofI0.net]
var変数って便利だけど初期化必須だから惜しいなと思うことがある
例えばとりあえず広いスコープで宣言しといて後のfor内とかで使おうとしたときにここはfloatで扱いたいな→結局宣言箇所をfloatに書き直すのか・・・ってなったり
書きながら考えるときの補助として使おうとすることが間違ってると言えばその通りだけどね



250 名前:デフォルトの名無しさん [2019/04/06(土) 03:20:06.81 ID:QWD6tIIM0.net]
非同期処理A内でタスクBを生成した場合について教えてほしいのですが、
Aのスレッドが抜けてしまったり、あるいはAのタスクが終了してしまった場合でもタスクBは生き続けるんですか?
Aの終了とともにBも終了させるようにはできないのでしょうか?

251 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 05:50:01.71 ID:9VymyaU60.net]
出来るけどリークするぜよ

252 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 09:32:18.73 ID:WatgyYvN0.net]
>>247
CreateLinkedTokenSourceで複数タスクにまたがるCancellationTokenSource作ればいいんじゃね

253 名前:240 mailto:sage [2019/04/06(土) 10:07:54.08 ID:hyh7Xf1q0.net]
>>243 form2.IsDisposed で閉じたかどうか判定できました。ありがとうございました。

文章が分かりにくいみたいですが243みたいな超能力者がレスしてくれれば良いのです。
>>245の説明の通りですが「教えてください」って書いても放置されることが結構あるので神レス243のほうがありがたいです。

254 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 10:13:25.13 ID:12K3yeCTa.net]
>>246
ああ、良くないと思うぞ。
変数が必要になったら想定される範囲でなるべく小さいスコープで宣言して、それで足りなければスコープを見直すか設計そのものを見直すくらいのがいいと思うよ。

255 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 11:19:51.64 ID:1moq2C1C0.net]
>>250
ガイジは死ね

256 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 11:27:56.56 ID:j7WnBgX90.net]
>>250
意味不明な質問してたらそりゃ放置されるわな

257 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 11:31:41.71 ID:ts7XFDpTa.net]
>>250
放置されることが結構あるということは、これまでも質問のしかたが下手だったか、態度が悪かったか、頓珍漢なことをいっていたか、等々、なんらか自分側にも問題があるとは思わなかった?
答えてくれない方が悪い!ではいつまでたっても改善しないし、周りも困らせることになるよ。

258 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 15:23:17.78 ID:MT95SofI0.net]
マネージャーがまさに自分の視点でしか話をしないから意味を推察するのにめちゃくちゃ苦労してる
しかもマネージャーだから放置も無視もできないしめんどくせぇ

259 名前:245 mailto:sage [2019/04/06(土) 15:58:43.28 ID:2DuVrQtfM.net]
>>250
逝ってよし



260 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 16:39:47.93 ID:MA8UEjRg0.net]
アストラルサイドの話はちょっと

261 名前:デフォルトの名無しさん [2019/04/06(土) 18:24:20.03 ID:QWD6tIIM0.net]
>>248
教えてもらって悪いんだけど、一体どういうことなんだぜ?

262 名前:デフォルトの名無しさん [2019/04/06(土) 19:26:12.20 ID:nnViyGGtM.net]
実現したいならタスクBが走ってるスレッドを殺すしかないが
その場合ILが半端なところで止まってクリーンアップ処理が正常に走らないからリークする
嫌なら249が言ってるような方法でタスクが自発的に止まるしかない
好きにしたらいい

263 名前:250 mailto:sage [2019/04/06(土) 20:05:47.05 ID:hyh7Xf1q0.net]
>>254 そうじゃなくて、質問して「質問は・・ということなの?」的なレスが返ってきた状況のときに
「そうです。解決方法を教えてください」ってその人にレスしても放置されることが多々あるという経験を書いただけ。
別に質問の大半が放置されたわけではないよ。
あと理系の人が書いた本とかマニュアルは難解でも当方は理解しますし「分かりやすく書けや」とはそれほど思いません。
理解しやすい文章を書けと思う人は経験不足です。

264 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 20:12:41.03 ID:gcTy2CwVM.net]
はやくゴミクズから人間になろうな

265 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 20:15:14.96 ID:MA8UEjRg0.net]
でも>>236>>240ってわかりにくい云々の前に
頭がおかしいレベルだよね?
流石に今後の人生のために改善したほうが良くね?

266 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 20:28:05.68 ID:MT95SofI0.net]
質問の意味を確認される時点でそもそも伝わりにくい文章だと思うけど。
コミュニケーションは相対的なものとはいえ、相手に負担を押し付けるやりとりをしていることに気づいてないのでは。

267 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 20:43:07.38 ID:j7WnBgX90.net]
>>260
一緒にしたら失礼。
難解な本は読み手に前提となる知識が足りないから読み難いが、書くべきことはちゃんと書いてある。
あなたのは書くべき情報が欠落していて単に文章として破綻してるだけ。ついでにその後のコミュニケーションも酷過ぎる。

268 名前:250 [2019/04/06(土) 20:44:56.97 ID:hyh7Xf1q0.net]
240見直したけど
「サブフォームFORM2を作って右上の×で消した時」が分かりにくいかな?
※1 form2 = new Form2();
※2 form2.Show();
「サブフォームFORM2を作って※1表示した後※2にFORM2の右上の位置の×をクリックしてFORM2を閉じた時」

って書かないと駄目だったのかな?でも回答を教えてくれた人居るし分かってほしいな〜

269 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 20:58:19.18 ID:YyWMpA9h0.net]
いや、動作がわからないんじゃなくてお前さんがやりたいことがわからないって話な



270 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 21:01:04.80 ID:Gnot3kBPd.net]
小手先に頼らず全部書け
質問に関係なさそうなところも全部書け
関係ないと断言できるだけ知識があるならそもそも質問は生まれない
だから頭からケツまで全部書け
全部書いたつもりでも情報は足りないんだから小学生に伝えるつもりで書け

271 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 21:01:50.77 ID:J4U0pcz9a.net]
いわゆるバカの壁だねw
彼はたぶん自分の何が問題なのか本気で分かってない。

仕事で取引先とかとメールでやりとりしてる人なら同意すると思うけど、
日本人は案外彼みたいな人が多い。
多いというか、日本人全体を母集団にとるとたぶん90%以上が彼みたいなタイプだw

これは(実は案外昔から指摘されてるんだけど)日本の初等教育に問題があるんだよねw
日本の国語教育は何であんなくだらない文学観賞と子供を嘘つきにする作文に偏重してるのか。

思いっきりスレ違いなのでこの辺で

272 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 21:01:55.77 ID:ZE/404d00.net]
>>260
理系の人が書いている文章は、内容が難解であっても文意は明確で読みやすい。君の文章はそうではない。むしろ逆で、平易なことが上手く伝えられず理解してもらえない。
君が「難解だが上手い文章」を読みやすいということと、他の人が「君の下手な文章」を理解しにくいということはまったく別のことだが、何でそこから他人を経験不足だと断じる結論になるのだろうか?
君の方が、他人とのコミュニケーションについて経験不足なのでは?

他人に理解してほしいというのは自然な欲求だが、相手に労力を求めるのでなく自分が理解される努力をしなよ。

273 名前:250 [2019/04/06(土) 21:25:08.15 ID:hyh7Xf1q0.net]
>>266-269
要するに、やったことが無いから何故俺がそれをやりたいことがわからないんだね。
でも回答を教えてくれた人居るし・・。

274 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 21:26:09.76 ID:Hw9bu2CQ0.net]
>>240は「右上の×で消した時」が分かる人には引っ掛け問題になってるな
単に「サブフォームが閉じられたかどうかを判別したい」なら問題なかった

初心者スレだから質問者の文章が分かり難くてもある程度はしようがないし
>>240もその範疇だと思うけど、>>250はあり得ない
叩かれまくってるが自業自得だ

275 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 21:31:28.36 ID:7yOX3K990.net]
>>270
何度も書かれているけれどお前の説明が致命的に下手すぎるのが原因

276 名前:デフォルトの名無しさん [2019/04/06(土) 21:49:22.76 ID:l9A0t+NU0.net]
>>260
>質問して「質問は・・ということなの?」
っていうのは、おまいさんの質問文そのままじゃわからないので経験を加味して質問文を解読して少しでも回答できるやつを増やそうとしてくれてるんだよ。
おまいさんの質問文そのままじゃ超絶エスパーがスレに降臨するまで話がすすまないよ。

277 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 21:50:12.97 ID:1moq2C1C0.net]
いろいろな人がいろいろな表現で指摘しているけど、
結局のところのお前が程度が他人とコミュニケーション取るレベルに至ってないって指摘だ

早く人間に達しろゴミクズ

278 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 22:35:24.43 ID:YyWMpA9h0.net]
>>270
> 要するに、やったことが無いから何故俺がそれをやりたいことがわからないんだね。
逆、下手に「右上の×で消した時」とか書くからやりたいことがわからないって話
フォームの閉じ方は「右上の×で消す」だけじゃないから知ってる人は特別に「右上の×で消した時」を区別したいのか?とか思うんだよ
>>242-243でも指摘されてるだろ

> でも回答を教えてくれた人居るし・・。
>>243はかなり親切だからいくつかのケースを書いてくれてるけどそれでも
> 具体的に何が目的かを書いてもらった方が答えやすいと思う
って書かれてる意味を考えなよ

279 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 22:47:01.10 ID:ZtBD8DJx0.net]
みんな優しいな



280 名前:デフォルトの名無しさん mailto:250 [2019/04/06(土) 23:04:06.29 ID:hyh7Xf1q0.net]
>>275

>242 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?
242には触れたくなかったけど、こんなこと240に書いてないし242は馬鹿なんだと思う。
それをおかしいと思わない275もどうかなと思う。close()で閉じてもIsDisposedで判別できるし
何で気にするか分からないな。ていうかウィンドウの右上にXが無いのかな?

281 名前:デフォルトの名無しさん mailto:sage [2019/04/06(土) 23:14:09.25 ID:j7WnBgX90.net]
>>277
日本語が拙いから推測されただけだろ。エスパー求めてるのに何言ってる。

282 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 00:08:13.42 ID:fnPZIWU30.net]
ここまでいろんな人が指摘してるのに論点が噛み合わないのは逆に逸材なのでは
なんかモスバーガーの包み紙のスレを思い出した

283 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 00:36:33.50 ID:yNnH+Rdg0.net]
初歩的な質問で申し訳ないのですが、c#のガベージコレクション機能は循環参照状態にあるインスタンスも破棄してくれるのでしょうか?
暫く調べたのものの「リークするから弱参照を使う」「GCに頼っていい」「javaなど一部言語は破棄する」など多くの話があり混乱しています
より専門的な、ガベージコレクションの内部的な仕組みそれ自体を説明しているサイトは私の知識では理解できませんでした

例えばa→b→c←→dという向きで参照しているインスタンスの組み合わせがあったとして、
aからbの参照を切ってもGCで回収されるのはbだけでcとdの組は残り続けるのでしょうか

284 名前:デフォルトの名無しさん [2019/04/07(日) 00:37:08.32 ID:AJMxYZfA0.net]
でもさぁ、サブフォームをXボタンで閉じた時と閉じてないときの判別方法を聞いてるのに

>242 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?
で選択肢が1個増えて余計ややこしくしてるだけだし

本当に240だけの問題なの?241=242=262の頭に問題は無いの?

285 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 00:40:32.22 ID:Lr+Z70d50.net]
じゃあ、もう一回確認な

サブフォームFORM2を作って右上の×で消した時
どうすれば(どこを調べれば)よいですか?



A=サブフォームFORM2
B=右上の×で消した

で置き換えたとき

Aを作ってBのとき
どうすればよいですか?

って何言ってるのかさっぱりわからないよね?
これで世の中渡っていけると本気で思っているのか?

286 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 00:44:13.15 ID:Lr+Z70d50.net]
>>281
じゃあ、質問に答えてね

サブフォームFORM2を作って右上の×で消した時どうすれば(どこを調べれば)よいですか?

287 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 00:49:36.20 ID:vK2HJm7v0.net]
>>282
気持ちは分かるが落ち着けw
>>236>>240で意味不明だっと認めて訂正してるぞ。

288 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 00:55:57.83 ID:Lr+Z70d50.net]
>>284
そんなの考慮する必要ない
だって彼にもその気はないんだから

289 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 01:00:11.33 ID:h90p5IeD0.net]
>>281
いったい何に拘ってるんだ?そこまで自分に非があることを認めたくないのか?
>>241,242で君の説明が理解されなかったのは別に変でもないし頭がおかしいという訳ではないぞ。>>262も攻撃的ではあるが頭がおかしいというのとは違う。

誰も>>241等のレスに無関係に、君の一連のレスに対して、説明が下手であること、態度に問題があること、それについて君がいっこうに理解できていないことを指摘しているだけ。



290 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 01:58:10.82 ID:73jPe6360.net]
>>280
こっちの話の方が面白そうだよ

291 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 05:53:56.72 ID:vRdyA0zq0.net]
>>280
そういう単純なケースならc,dともに回収されるので気にするな

292 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 06:41:43.95 ID:u8jd6Keja.net]
>>280
GCの方式が参照カウンタ方式というものなら循環参照があると回収されないけど
C#(.NET)は世代別GCという方式だから循環参照があっても未使用なら回収される
> 例えばa→b→c←→dという向きで参照しているインスタンスの組み合わせがあったとして、
> aからbの参照を切ってもGCで回収されるのはbだけでcとdの組は残り続けるのでしょうか
b, c, dが他から参照されていなければ、b, c, dすべて回収される

293 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 07:40:40.19 ID:AvqFg2320.net]
>>277
う~ん、引っ込みがつかなくなってるのか本当に初心者で何を指摘されてるのか理解できてないのかよくわからんけどここ初心者用だから初心者として仮定して…
Xボタンでフォームを消すと言うのはどちらかと言うと一般的じゃない(普通のフォームならOk/Cancel/閉じるボタン等を配置するよね)ので「右上の×で消す」と書くとなにか特別なことをしようとしてるのかと思われるの
ただ初心者だとXボタンで消すのが当たり前と思ってる人もいるから確認の為に>>242みたいなことを聞いてるわけ
あとそもそもサブフォームの状態を調べると言うのもあまり一般的じゃない
GUIだとイベントで処理するのが普通だから>>238みたいなことを言われる

294 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 07:58:43.91 ID:AvqFg2320.net]
>>280
初歩的な質問じゃない気がするがw
まあこのスレとしては「GCに頼っていい」が正解かな
>>289も書いてるけどGC持ってる最近の言語の実装は世代別(と言ってもたいてい2世代だけど)GCになってるのが多く最終的にはマーク&スイープで回収されるのが一般的なので全部回収されると思ってていい

295 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 14:00:44.14 ID:yNnH+Rdg0.net]
>>287-289,>>291
ありがとうございます、助かりました
もう少しC#に慣れるまでメモリ管理は忘れます

296 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 16:38:33.55 ID:gLMV6b6F0.net]
Listboxにデータをバインディングするときに、XAMLにBinding記述する方法と、コントロールに名前を付けてコード上からやる方法がありますが、どちらがよいのでしょうか

297 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 18:07:02.76 ID:yVw8pf+H0.net]
好きにすれば良いけど転がってるサンプルコードはほぼXAMLでやってるな

298 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 18:24:40.28 ID:bCl1La9L0.net]
GCがちゃんと動いてオブジェクトが解放されたのかは、デストラクタに
Console.WriteLine("解放されますた!");
と書いておくと安心できる。
メモリリーク発生の可能性も減る。

299 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 18:48:15.95 ID:zc2PfqGUM.net]
>>295
心の安寧が欲しいなら止めないけど
C#では、パフォーマンスを低下させるため、プログラムの動作に必要がない
ファイナライザを実装すること自体が推奨されないことは、知っておいた方がよい

パフォーマンスが低下するのは、ファイナライザの実装されていると
GC時にファイナライザキューを介してファイナライズが行われるが
このファイナライズを行う際はStop the worldする必要があるためだ

ファイナライザを保険として実装した上で、前述のパフォーマンス低下を避けるには
自分でファイナライザ相当の処理をした上でSuppressFinalizeを呼び出しておく必要がある
この場合、ファイナライザは実行されなくなり、パフォーマンスの低下も起きない



300 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 18:49:09.04 ID:QS/EO+8da.net]
デストラクタにはなるべく頼らないようにしようぜ
デストラクタを記述するにしてもDispose()されたときにGC.SuppressFinalize(this)しようぜ

>>295
出力の有無でメモリリークに気づける可能性はあるが「発生の可能性も減る」について詳しく

301 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 19:36:38.60 ID:AJMxYZfA0.net]
既にスレを荒らした状態になってるから、もうこれで最後にするけど

>>290
の上8行「右上の×で消す」という書き込みは初心者が使うフレーズだから
中〜上級者の俺様は深読みして間違えたと解釈したけど
本物の中上級者でも「右上の×で消す」の意味は「右上の×マークをクリック
して窓を消す」以外ありえません。そういうわけであなたは
初心者でも中〜上級者でもない別の何かです。

初心者の書く「右上の×で消す」の文が不満で何で
「Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?」
何で選択肢が増えるんだよw
プログラムより国語の勉強しないと。
回答側に回りたいなら模範回答できる質問だけにしてください。

302 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 19:41:49.21 ID:AvqFg2320.net]
>>298
> 「右上の×で消す」の意味は「右上の×マークをクリックして窓を消す」以外ありえません。
どうしたらこんな頓珍漢なレスができるんだよ…
誰もその意味がおかしいとか言ってるわけじゃないぞw

303 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 20:15:40.25 ID:AJMxYZfA0.net]
>>299 何でイベントのclosedでは駄目かというと、閉じた瞬間の情報が欲しい訳ではないからです。
窓閉じてしばらくして閉じたかどうか知りたいってことなので。なんでそんなこと知りたいんだよ(怒)
って言われても別にいいだろとしか。c#はイベントで処理するからって考えの人にあれこれ
言う義務は俺には無いよ。

304 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 20:16:16.95 ID:QS/EO+8da.net]
>>298
初心者様ってすごいね
ちゃんとした回答が欲しいなら質問をちゃんと書いてね
https://teratail.com/help/question-tips#questionTips3
ここは5chだから多少は違いがあるけど「正しく伝わる質問の仕方」は同じだよ

305 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 20:32:13.15 ID:E1covCOyM.net]
昨日今日はどのスレもこんなのばっかりだぜ
金払ってスクールでも通えよって

306 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 20:37:07.02 ID:AvqFg2320.net]
>>300
別に閉じてるかどうかを知りたいことがないわけじゃなくて珍しいって話な
たいていの場合はなにか設計がおかしい可能性が高い
まあ俺に影響あるわけじゃないから好きにすればいいと思うけどw

307 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 20:56:30.81 ID:AJMxYZfA0.net]
>>301
回答は貰ったんだよ。

質問はその後訂正してる。他の上級者は理解して神回答を頂きました。
>>281-285見たら誰が問題か分かる。284に変なレスしてる奴。

C#はイベントだけで処理すると考える学生がイベントのclosedで解決すると思ったら
解決しないから発狂してキチガイとか日本語が変とか難癖つけたんだろ。

308 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 21:09:42.81 ID:aPMrZc410.net]
ゴミクズにレスつけてる奴も死なねえか
お前のせいで終わらんのやぞ

309 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 21:39:33.31 ID:QS/EO+8da.net]
>>304
質問内容に >>300 中の「閉じた瞬間の情報が欲しい訳ではないからです。窓閉じてしばらくして閉じたかどうか知りたい」
という内容も書かれていたら、最初から正しいIsDisposedの回答だけが得られたかもしれないね
「学生」を罵り言葉として使っているということは社会人かな?
その態度を貫けるくらいには沢山エスパーが居る会社なのかな、凄い環境だなあ



310 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 21:59:51.43 ID:FnnSZHMw0.net]
>>298
え?じゃあ聞くけど

サブフォームFORM2を作って右上の×で消した時どうすれば(どこを調べれば)よいですか?

FORM2 form2 = new Form2();

311 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 22:30:58.81 ID:RA8LBCNw0.net]
オフショア開発してるけどこんな訳わからない質問ばっかで気が狂いそうになるよ
エスパー能力欲しいなぁ

312 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 22:31:35.27 ID:AvqFg2320.net]
>>306
まあ引っ込みつかなくなってるんだろうね
学生云々は不問にするとしても
> C#はイベント「だけ」で処理すると考える
とか誰も書いてないことを言い出してるしw

313 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 23:15:27.17 ID:fnPZIWU30.net]
この議論はGCに処理してもらおう

314 名前:デフォルトの名無しさん mailto:sage [2019/04/07(日) 23:52:46.05 ID:h90p5IeD0.net]
>>310
なるほど。この無価値な議論の中身を気にして参照してるのはもはや当人同士の循環参照のみだから、>>289に書かれている通り世代別GCで回収されるわけですな。

315 名前:デフォルトの名無しさん mailto:sage [2019/04/08(月) 20:04:21.39 ID:bxLyJs4eM.net]
引数について質問させてください

ref と out の違いってなんですか?
どういうときに ref を使うのか、out を使うのか、よくわかりません

316 名前:デフォルトの名無しさん mailto:sage [2019/04/08(月) 20:16:44.97 ID:DkSPe/Rf0.net]
>>312
https://www.atmarkit.co.jp/ait/articles/1804/25/news021.html

317 名前:デフォルトの名無しさん mailto:sage [2019/04/08(月) 20:23:20.59 ID:WPZzOuq3a.net]
>>312
ref引数は、呼び出し先関数で、引数を使うし設定もする場合に使う
out引数は、呼び出し先関数で、引数を設定するだけの場合に使う
この違いにより、refで渡す引数は初期化しておく必要があるけど、outで渡す引数は未初期化でも構わない

.NET Framework中にある実例としては
int.TryParse()の場合、文字列の数値を引数に設定するだけで、引数の元々の値は使わないから、out引数でいい
難しい例だがInterlocked.CompareExchange()の場合、引数の値を返すし引数に設定する必要もあるため、ref引数が必要

値型と参照型の違いも知っておいたほうがハマりにくいかも

318 名前: mailto:sage [2019/04/08(月) 21:00:25.38 ID:PMJ1/1Ak0.net]
>>314
めんどくさいので out は忘れて ref ばかり使っていますが問題ありますでしょうか!?

319 名前:デフォルトの名無しさん mailto:sage [2019/04/08(月) 22:47:42.86 ID:WPZzOuq3a.net]
>>315
refでも問題らしい問題は無いだろうけれど
refでなくoutで済む場面ならoutを使ったほうが楽できる
未初期化変数でも渡せるし、C# 7からはout引数の場所で変数宣言が出来るようになった
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7#out-variables

ただout引数やref引数を取る関数はasyncやiteratorメソッドに出来ないから
最近の風潮だと、out引数を経由して多値を返すよりも、戻り値の型をValueTupleにして直接多値を返す方が良さそう
https://ufcpp.net/study/csharp/datatype/tuples/?p=3#out-params



320 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 00:18:34.64 ID:/fBSGCK40.net]
コンストラクタでテキストボックスの値でフィールドを初期化しようとしたら怒られた これダメなのか…

321 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 02:13:47.76 ID:UAdV14hW0.net]
>>317
なんと言って怒られたの?

322 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 10:04:22.44 ID:iYhZfRkA0.net]
おんどりゃぁふざけた初期化すんじゃねぇ です

323 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 10:26:21.20 ID:euLRl0x60.net]
>>317
日本語でおk

324 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 11:37:19.16 ID:6ZB9MqDTM.net]
コンストラクタでテキストボックスの初期化、俺じゃなきゃ見逃しちゃうね

325 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 11:56:56.57 ID:hdDhGrZ5a.net]
>>317
デザイナーで置いたテキストボックスのインスタンス構築や、各種プロパティの設定は
実際はInitializeComponent()メソッドの中で行われる
InitializeComponent()よりも前で値を読もうとしてNullReferenceExceptionが出ているのなら
InitializeComponent()の後で値を読めばいい
までエスパーした

326 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 21:10:24.64 ID:0DYeC ]
[ここ壊れてます]

327 名前:6pW0.net mailto: C#でProcess使ったコンソールの標準入出力処理書いてるんだけど
printf("値を入力1:");
scanf("%d",&i);
printf("値を入力2:");
scanf("%d",&j);
printf("%d %d", i, j);
みたいな処理のプログラムを動かしたとき、コマンドプロンプトだと
値を入力1:3
値を入力2:4
3, 4
ってなってるのに対して、OutputDataReceivedだと
値を入力1:値を入力2:3, 4
って標準入力が全部完了されたあとにまとめて文字列渡されるのって何でなの?
[]
[ここ壊れてます]

328 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 21:31:50.99 ID:2u68c9Dp0.net]
標準出力に改行が出力されてないから

329 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 21:49:55.14 ID:0DYeC6pW0.net]
>>324
試しに全部のprintfに改行入れてみたけど、それでもscanfが全部終わるまでOutputDataReceivedイベント発生しないっぽい。
C#側で標準出力を受け取ってstringに追加 ー> exe側は入力待機 ー> C#側からStandardInput.WriteLineで標準入力 ー>exe側は処理続行
みたいな コマンドプロンプトからのの実行と同じような動きをする処理って、C#じゃどうやるんだろう?



330 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 23:25:15.43 ID:2u68c9Dp0.net]
stdoutがパイプに繋がってるとprintfは改行があろうがバッファし続ける
setbuf(stdout, NULL)しとくか、printf後にfflush(stdout)するか

331 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 23:39:38.53 ID:IIo4qqMm0.net]
C#関係なくね?

332 名前:デフォルトの名無しさん mailto:sage [2019/04/09(火) 23:59:05.15 ID:0DYeC6pW0.net]
>>326
setbufでもfflushでも何故か入力待機状態が終了するまでOutputDataReceivedイベントが発生しなかったからあきらめてテキストファイルにログ出力してそれ読み込むことにするわ
教えてくれてありがとう

333 名前:デフォルトの名無しさん mailto:sage [2019/04/10(水) 20:02:38.36 ID:YVfMef4MM.net]
>>313-316
だいぶ返信が遅れてしまいました
まとめてですみませんが、親切に教えていただきありがとうございました

334 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 22:52:29.27 ID:luZS+mvc0.net]
C#関係ないんだけどシングルトンの使い場所がわかりませぬ

こんなクラスがあるとして、
class a{
 Dictionary<string, string> hoge;

 public string getHoge(key)
{return hoge[key];}
}
hogeにはDBから対象の精々100くらいの全レコード取ってきて格納しておきたい
複数インスタンスが必要にはならないようなデータ
外部からのsetは許可しない

こういう時ってシングルトン使ってnew時にDBからデータ取得とかしていいのでしょうか?
もっと賢いやり方あります?

335 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:01:43.16 ID:fgu2eH2Ta.net]
>>330
シングルトンはテストを困難にするアンチパターンだから忘れていい
単一のインスタンスが欲しい場合はDIを使う

336 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:09:32.03 ID:SGqhATO10.net]
>>331
DIとシングルトンは全く別の概念やぞ…

337 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:11:43.52 ID:fgu2eH2Ta.net]
>>332
DI使ったことないの?
単一のインスタンスを共有するのは大抵のDIコンテナでサポートされている一般的な機能だよ

338 名前:デフォルトの名無しさん [2019/04/12(金) 23:33:00.52 ID:HVuVGzQQr.net]
staticじゃあかんの?

339 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:33:46.50 ID:FJ5vSxoFM.net]
発想の飛躍やべぇな



340 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:40:02.85 ID:le1Q6kdLM.net]
シングルトン大好き。
状況的に複数インスタンス生まないクラスは必ずと言っていいほどシングルトン。

341 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:41:28.59 ID:le1Q6kdLM.net]
class名.staticメソッド、static変数を多用。

342 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:47:39.11 ID:SGqhATO10.net]
>>333
お前こそプログラミングしたことないやろ…インスタンスの意味から調べてこい

343 名前:デフォルトの名無しさん mailto:sage [2019/04/12(金) 23:51:53.21 ID:GRWvVKgh0.net]
>>334
get setでなんか仕掛けるでもしない限りはstaticでいいよな

344 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 00:17:16.36 ID:DF10sMIkM.net]
>>339
ユニットテストでモックしたいときどうすんの?

345 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 00:45:48.83 ID:gAxxWG/M0.net]
シングルトン的なことがしたいときの今時のやり方はDI使うことだな

346 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 01:23:05.24 ID:4BHEL+7ta.net]
>>330
言語レベルで単一インスタンスの強制を保証する必要が
本当にそんなにしばしばあるのかなとは個人的には思うね。

要は共有方法を明確にしておけば十分じゃないかと。
そもそも共有されるオブジェクトを各々が勝手にnewするのがおかしいわけで。

具体的には、例えばWindows FormならVSが自動生成するProgramクラスの
staticな読み取り専用プロパティとして実装する約束にしておけば済む

347 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 05:26:30.24 ID:f7He4YCD0.net]
俺もそう思う
べき論としてみんな口々に言うけどそこを懸念するとかどんだけ連携がないチームなんだよ

348 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 08:35:33.20 ID:vIVj+RyW0.net]
>>341
ただ、DIもシングルトンの一形態という記述は見たことが有る

349 名前:デフォルトの名無しさん [2019/04/13(土) 08:39:55.79 ID:Gb+AenIc0.net]
以前に書いたプログラムを元に加筆修正して別のプログラムを作った時
フォルダもソリューションも別名で保存したいのですが
VisualStudioはそういう保存はできないのでしょうか?
今は力業であらかじめ別名フォルダにコピーしたソリューションから作り始め
ソリューション名、プロジェクト名、アセンブリ名、空間名
等を書き換えてからプログラムの修正を始めるのですが
時々何かがおかしくなってバインディングが外れたり
破綻してしまうこともあるので
何か安全に書き換える方法があるのかな?と質問しました



350 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 08:52:30.68 ID:J/cBqpWVM.net]
>>345
いい加減git使おう

351 名前:デフォルトの名無しさん [2019/04/13(土) 09:32:07.36 ID:Gb+AenIc0.net]
>>346
うーんちょっと調べただけだけどヤヤこしそう・・・
それにバージョン管理とは違うんだよなー
ワープロを元にデータベースを作ったからフォルダもソリューションも変えて保存したい
って感じなんだけど

352 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 09:39:52.37 ID:vbn0MA6qa.net]
レベル下がったなこのスレも
VB.NETとJavaが終わりつつあるから流入してるのか

353 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 09:55:51.57 ID:J/cBqpWVM.net]
>>347
慣れたら自然にそんなアホなことをしようとは思わなくなるから気にしなくていい
俺も初心者の頃はそうだったから気持ちはよくわかる

354 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 09:59:00.31 ID:C2d1A80t0.net]
>>348
レベルの高い時期があったみたいな言い方だな

355 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 10:04:10.28 ID:vzJQEXVg0.net]
>>347
ソリューションを変えるのはわかるけど
> プロジェクト名、空間名
とかは変えなくても良くね?

356 名前:デフォルトの名無しさん [2019/04/13(土) 10:41:12.62 ID:kUX6ubEA0.net]
>>351
そうなの?
とりあえずその方がコードも分かりやすいから
exeとタスクトレイに表示される名前だけ反映させるには
アセンブリ名とアセンブリ情報の中だけでいいのかな

357 名前:デフォルトの名無しさん [2019/04/13(土) 10:44:39.80 ID:nXQ9b0jN ]
[ここ壊れてます]

358 名前:0.net mailto: 7.2で加わった、条件付きのref式って意味がわかんないんだけどさあ
これrefがついていようがいまいが同じように動作しないの???
なんなのこれ
[]
[ここ壊れてます]

359 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 11:21:31.91 ID:umtct5vHa.net]
>>353
int a, b, c;
void Reset() { a = 1; b = 2; c = 3; }

Reset();
ref int x = ref a;
x = (true ? b : c); // 普通の条件演算子
x = 4; // xの参照先はaのままなのでaが変わる
Console.WriteLine($"{a} {b} {c}"); // 4 2 3

Reset();
ref int y = ref a;
y = (true ? ref b :ref c); // 条件演算子の2項目と3項目にrefはあるが、条件演算子の前にrefはない→参照でなく値が代入されるだけ(上と同じ)
y = 4; // yの参照先はaのままなのでaが変わる(ここでハマってそう)
Console.WriteLine($"{a} {b} {c}"); // 4 2 3

Reset();
ref int z = ref a;
z = ref (true ? ref b : ref c); // 条件演算子の前にrefがある→zの参照先が変わる
z = 4; // zの参照先がbになったのでbが変わる
Console.WriteLine($"{a} {b} {c}"); // 1 4 3
// https://ufcpp.net/study/csharp/sp_ref.html?p=2#conditional-ref もどうぞ



360 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 18:28:52.41 ID:a4r2Gpw40.net]
この言語は、見かけはC++の兄弟分のような顔をしたVBだな。

361 名前:デフォルトの名無しさん [2019/04/13(土) 18:49:30.17 ID:nXQ9b0jN0.net]
>>354
ありがとう!やっとわかったぜ!!!

362 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 22:22:05.47 ID:zPnWLOfMa.net]
>>354
こんな機能追加されてたんだw
でも積極的な使い方を思いつかんなあ

363 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 22:30:05.68 ID:4tcIFh//0.net]
後から追加された機能ってどれもセンスないよね

364 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 23:41:32.18 ID:04eDeW4Td.net]
>>358
は?

365 名前:デフォルトの名無しさん mailto:sage [2019/04/13(土) 23:52:54.44 ID:4tcIFh//0.net]
>>359
は?じゃねぇよクソ虫

366 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:08:30.69 ID:01zt8L7jd.net]
>>360
ジェネリクスもセンスないのかい?

367 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:26:39.46 ID:eLdyJ0cI0.net]
>>358
最近追加された機能は効率重視でちょっと分かり難いのもあるから、
そういう風に見えるのも分からないでもない。

368 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 00:53:29.67 ID:DOuVmEEK0.net]
言語の価値って開発環境も含めて評価すべきじゃない?
自分は別に他の言語でもよい処理をついついc#でやっちゃうのはやっぱりIDEの強力なサポートがあってのことだわ

369 名前:デフォルトの名無しさん [2019/04/14(日) 08:42:45.32 ID:H5M6zKH30.net]
>>363
これはRuby先輩を呼び寄せるための撒き餌ですか?



370 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 08:50:41.27 ID:k2b6YaL90.net]
C#は、CとC++の系列のように外見を装っているが、実際にはVBのほうが似てる言語だろう。
CやC++に対しておこがましさを感じる。

371 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 08:55:34.96 ID:TOfo8K8Bd.net]
>>358
ラムダ式とか使わんの?

372 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 09:07:27.41 ID:UDnauAFh0.net]
>>363
言語の基本文法のみ良し悪しとか、標準ライブラリまで含めての評価とか、議論の対象をどこまでとすらかは文脈によるだろうし、君が開発環境まで含めた話をしたいというならそういう話題をふって話を進めればいいよ。
言語単体での話をしている時に「いやいやIDEが〜」とか言い出すと話が発散するから、議論の対象は明確に区切って意識した方がいい。

373 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 09:28:07.93 ID:VqeGGHsz0.net]
>>358
.NET 1.1 の世界から出てくるな

374 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 09:34:22.94 ID:LBjjw3Zya.net]
今の時代、言語だけ語っても意味はないよなぁ
使えるオプソのバラエティとか、コンテナとの親和性とかの評価は避けて通れない

375 名前:デフォルトの名無しさん mailto:sage [2019/04/14(日) 12:23:16.39 ID:cHKb6r3Sa.net]
>>357
この辺の追加機能はパフォーマンスを求めるための機能だから
速度特化ライブラリの製作者は使うだろうけど、それ以外の開発者は使う機会少ないかも
https://ufcpp.net/study/csharp/cheatsheet/ap_ver7_2/

>>358
https://github.com/dotnet/csharplang/issues
C#の言語仕様はgithub上で公開で議論されている
センスある機能について議論や提案してみたらどうだろう
もちろん何かコメントしたりissueを立てたりする前に、検索して既出じゃないか確認するのを忘れずに

376 名前:デフォルトの名無しさん [2019/04/15(月) 12:22:07.84 ID:3hi8+ot50.net]
先日windows7からwindows10にOSの入れ替えをしたのですが、win7では動いていたPostMessageが動かなくなってしまいました。
(送り手は自作のソフト、受け手は市販のソフトで、Win7でもWin10でも同じものです)
あるアプリケーションに
PostMessage(hWnd, WM_KEYDOWN, VkKeyScan("0"), 0);
のようにして数字を送信していたのですが、これが反応しなくなりました。
ウィンドウハンドルの取得とかは問題がないようです。
これ以外でも
PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
等すべてのキーが送れません。
対処法がありましたら教えてください。

377 名前:デフォルトの名無しさん [2019/04/15(月) 12:24:05.77 ID:3hi8+ot50.net]
正確に言うと(正確かどうかはわかりませんが)、
送り手側でエラーが出るわけではなく、受け手側のテキストボックスを一応選択はしているので、
送り手側としては送っているつもりですが受け手側が反応しなくなっている状態だと思います。
送り手の発信方法を変えればいいのでしょうか?

378 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 13:27:46.92 ID:3hi8+ot50.net]
すいません、解決しました。
管理権限の問題でした。

379 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:16:04.04 ID:l4hdcBztd.net]
新しいバージョンたくさんあるけど業務だとどの辺まで使ってるところが多いんだろ

valueタプルとかみんな使えてる?



380 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:17:38.51 ID:p/g7dyR00.net]
>>374
ようやく4.5.2が許されるようになったよ・・・

381 名前:デフォルトの名無しさん mailto:sage [2019/04/15(月) 22:37:21.92 ID:+hafi/JFa.net]
>>374
.NET Core 2.2/C# 7.3使ってるよ

382 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:08:51.63 ID:4W+nw3aAa.net]
うちも最近やっと3.5.1縛りが解けて4.5.2になったよ

383 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:14:19.68 ID:5XyUIsTTd.net]
>>374
うちは.NET Core2.1、C#7.3
次のLTSは3.1だっけ

384 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:15:38.75 ID:5XyUIsTTd.net]
てかVisual Studioをちゃんと更新してればC#のバージョン上げるのは全然問題なくね?

385 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:20:00.65 ID:3+f8cxJ/0.net]
最近?が多くて辛い
null条件演算子でも目眩がするのに
null合体演算子なんか使われたら頭いたい
ところでcoalescingてなんて読むんや

386 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:32:26.55 ID:mJc9sIPpa.net]
>>379
ネックはランタイムの方でしょ

387 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 08:37:21.73 ID:bBG3RNJT0.net]
Windows7のサポートが切れれば少しはましになるのかねぇ

388 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 09:11:39.30 ID:gry//OiE0.net]
>>377
async awaitへようこそ

389 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 12:31:57.15 ID:5XyUIsTTd.net]
>>381
だから「C#のバージョン上げるのは」って言ってんのに



390 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 14:23:13.78 ID:o1OTQxfgr.net]
とりあえずVSのバージョンだけでもあげてほしいわ
今時2008とかもう

391 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 15:21:56.74 ID:gbkfFEj/0.net]
>>385
こっそりあげちゃえよ。だれもお前のことなんかみてないからさ。

392 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 17:28:56.19 ID:CzwWdC590.net]
2015ってアン

393 名前:Cンストールしても平気かな。SSDの空きがかつかつで2019インストールするなら2015は消したい []
[ここ壊れてます]

394 名前:デフォルトの名無しさん [2019/04/16(火) 18:43:16.58 ID:HeVWn8Fl0.net]
VS2010からVS2017に上げたら変数名に全角の・使ってるところがビルドエラーになったわ。
こんなの変数名に使うなよと思いながらVS2010で名前変えまくった。

395 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 18:54:44.72 ID:csRNrKVvM.net]
フォームから自動生成したイベントハンドラの頭文字が大文字じゃねぇぞって怒られてるんだけどデフォルトでこうなの?

396 名前:デフォルトの名無しさん mailto:sage [2019/04/16(火) 19:43:25.05 ID:4DXe6mce0.net]
>>388
ユニコードのせいね
C#6.0の時のやつ

397 名前:デフォルトの名無しさん [2019/04/17(水) 20:49:20.12 ID:WkJZEAk70.net]
ドット絵エディタを作りたいんですが、win formでやってます
ピクセルを描くベースとなるフォームはどれを使用すればよいのでしょうか。

398 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 20:56:19.46 ID:SfPYWsjk0.net]
フォームに直書きでいいよ

399 名前:デフォルトの名無しさん mailto:sage [2019/04/17(水) 20:59:20.56 ID:VDkzUi/q0.net]
>>391
コントロールなら画像の描画に使うのはPictureBoxでやっとけば調べるのも楽だよ
書き間違いでなく何か別の意味で「フォーム」って書いているのならよくわからない



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 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<300KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef