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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2021/12/13(月) 22:53:21.18 ID:dhjmiKBp0.net]
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part152
mevius.5ch.net/test/read.cgi/tech/1629888256/
■関連スレ
C#, C♯, C#相談室 Part94
mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
https://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/
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries/
https://referencesource.microsoft.com/
https://source.dot.net/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured

388 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 00:50:54.28 ID:JsfvM5KJM.net]
>>382
全てTSでも型が保証されない
最も簡単な事例は
const x: string = 100 as any
もちろんこんなコードを書く人はいないが
複雑で膨大なアプリケーションコードを扱うプロジェクトのなかで誰一人としてミスをしないかというと
そんな保証は全くなく型に嘘をつかれることになるだろう

389 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 00:51:02.44 ID: ]
[ここ壊れてます]

390 名前:JsfvM5KJM.net mailto: >>383
ブーメラン
[]
[ここ壊れてます]

391 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 00:56:20.83 ID:fuEg19Cq0.net]
>>384
それはC#でも同じでしょ。

392 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 00:59:38.17 ID:JsfvM5KJM.net]
C#ではI/Oが生じる場合にも型が嘘をつくことはない
例えばこうだ

int x = Parse<int>(inputStream);

パースエラーにより実行時に例外が発生することはある
それはどの言語でも起こりうることだ
しかし、依然としてxにstringが入ったり、DateTimeが入ったり、という、TSでは普通にあり得る悍ましい挙動を示すことは無いのだ
なぜならC#はTSと違って型が嘘をつかないから
C#の型は信頼できる
TSの型は嘘つきで信頼できない

393 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 01:00:08.39 ID:fuEg19Cq0.net]
>>384
大規模アプリ開発では、何層もの見えない層があった結果これが起こる。
オブジェクトの型を破壊的に変換 - C#と諸々」でググってみ。

394 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 01:00:59.54 ID:fuEg19Cq0.net]
>>387
じゃあTSはどうしてxにStringやなにがしかが入るの?どこで入れてんのよ?w

395 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 01:10:21.43 ID:JsfvM5KJM.net]
>>386
全く異なる
C#ではdynamic、リフレクション、コード生成を使えばコンパイラの検証を回避して、間違った型の変数に値を設定できる
しかし、C#でこれをやると実行時にエラーになるのだ
TSで何事もなく処理が進むのとは、全く趣が異なる
そう、TSではstringと指定した筈の変数にnumberやDateの変数が入ったまま、何事もなく進んでしまうのだ
これは本当に恐ろしい挙動だ
つまり、バグを仕込んだところから、しばらく処理が進んだところで被害が顕現する、ということだ
これはまるで、潜伏期間の長いコロナウイルスのように厄介な特性だ
この挙動はC言語などではよくあるものだったが、原因と結果が離れているのでデバッグがしにくい、とのことで先人達は大いに苦しめられたものだ
まがりなりにも後発の言語であるTSが、大昔の言語設計と同じ失敗を繰り返しているのは残念でならない

396 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 01:17:22.12 ID:JsfvM5KJM.net]
>>388
低レベルなメモリアクセスでランタイムを破壊できるのはどの言語でも当たり前のことだろう
TSのように低レベルメモリアクセスでもなんでもない、ただの代入で型安全を破壊できるようなものと同列に扱うべきではない



397 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 01:19:07.95 ID:JsfvM5KJM.net]
>>389
困ったことにTSではどこででも起こりうる
だから欠陥言語なんだよ
C#のように低レベルメモリアクセスで無理やり破壊すればできるよ、といった次元とはわけがちがう

398 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 01:46:29.20 ID:lnjYKBBj0.net]
>>379
varの上にマウスカーソル合わせてツールチップに表示される型を見るだけ

399 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 07:33:07.78 ID:OXnyWrYu0.net]
>>384
既に>>349で挙げているがそこに注意してプログラミングすればいいだけ。
お前は馬鹿だからそれができないんだろうが世の中の人間がみなお前と同じように馬鹿なわけではない。

400 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 07:38:49.44 ID:t5pkfnoc0.net]
JSなんて使いたくて使ってるやつはいないって事だよ
ほかに選択肢がないから仕方なく使ってるだけで

そもそも本来TSのようなトランスパイラはこの世に存在し得ない存在

401 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 09:23:21.76 ID:bvaGXVet0.net]
なんでc#スレで一生懸命TSの悪口言ってるの?

402 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 09:53:21.58 ID:SNzZltS0M.net]
欠陥指摘できる俺すげー君だろw
スルーしとけ

403 名前:デフォルトの名無しさん [2022/01/05(水) 09:57:56.22 ID:5ORhcVX2D.net]
WinFormのlistViewをタブレットで使いたいのですがlist部分を指で上下してlistをスクロールする事は出来るでしょうか
スクロールバーで上下出来るのですがスマホのように出来ないかなと

404 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) ]
[ここ壊れてます]

405 名前:10:15:33.57 ID:Zzh6nSy3M.net mailto: >>394
挙げられたリストでは全く足りない
こういう認識の甘さがバグを仕込むキッカケになるのだろう
そもそも人間は間違える余地があれば、いつか必ず間違える
注意してれば大丈夫、などという考え方では到底ダメだ
[]
[ここ壊れてます]

406 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 10:17:21.15 ID:Zzh6nSy3M.net]
>>396
しつこく返してくる奴がいるから仕方なく付き合ってやってる
そいつがTSの型は安全でないという当たり前の事実を素直に受け入れれば俺もこんなレスバしなくても済むんだが



407 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 10:34:58.47 ID:TbL+VltAd.net]
TypeScriptなしではJS開発やってられなくなってしまったな
特にチーム開発

408 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 11:00:24.24 ID:dUhlmVC50.net]
>>398
一応標準でサポートされてるはずだけど
なんかスクロール遅いし慣性の扱いが下手糞だけど…

409 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 11:06:50.05 ID:llHLsWPPp.net]
>>400
おまえは相手がうんと言うまでスレチ議論続けるつもりか

410 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 11:43:03.34 ID:93Qk8F8ua.net]
例えばリストビューを作るときにアイテムのTagに日時を代入しとく
そうしたら選択したアイテムの日時がすぐにわかるから。こんなのはよくやる手法だよね

で、実際にアイテムがクリックされたときにTagを読んで日時を取得しようとしたらstringだったりDateTimeだったりして型エラー。バリデーションwが必要になる
こんなの(アホがプログラミングしたら)c#でも日常茶飯事だからな
tsでも同じ。アホがプログラミングしたらバリデーションwは必須だし、普通にプログラミングしたら不要

411 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 11:54:44.06 ID:ZRZErZAVM.net]
>>404
君は議論の焦点を全く理解してないようだね

412 名前:デフォルトの名無しさん [2022/01/05(水) 12:07:48.08 ID:2gwkfiFL0.net]
すまんが、昔、Linux + LLDBでのC#のデバッグ方法が公式サイトに書かれていたようが気がするんだけどさ
そんなようなページってどこにあるのか、誰か知ってたら教えて!!!

413 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 14:47:28.15 ID:kRupjksVa.net]
昔OSも乗ってない小規模組み込みをアセンブリでずっと書いてたけど、
アセンブリには当然型なんて概念そのものが存在しないが、
だからintとBCDを間違えたり、構造体のポインタを別の構造体のポインタと勘違いする
ミスが多いかと言うと、そこは意外とそうでもなかったりする。
それより生産性に対する影響の方が大きい印象だね。

まあこれは小規模かつ基本1人の開発だったからそうだっただけで、大規模かつチーム開発だと
話が変わってくるのかもしれない。
この辺はゲーム業界の人が詳しそうだね。
あの世界は下手したら90年代の終わり頃までアセンブリでやってたはず

414 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 15:04:40.06 ID:XpPjLRYm0.net]
バグには様々な要因があるから、不正な型が代入された場合だけを過度に心配してもね

415 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 15:08:39.22 ID:C1Xb8B3u0.net]
型を気にしない馬鹿はテストも当然にしないから

416 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 15:14:15.12 ID:ROW6egx4d.net]
>>384
自分が守らなければそりゃ保証もされないだろ。
C#ならある型にはある値しか入らないと思ってそう。

例えば構造体につっこんでFieldOffsetで上書きすればあっさり壊れるぞ。

[StructLayout(LayoutKind.Explicit)]
struct XXX {
 [FieldOffset(0)] public DateTime Value;
 [FieldOffset(0)] public ushort Tag;
}

でXXX.Tagに適当なもの入れ



417 名前:スらValueは無茶苦茶になる。 []
[ここ壊れてます]

418 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 15:54:13.43 ID:qaVNdYDmM.net]
参照型の変数にnullが入ってるかもしれないし、C#の場合は例外の型もドキュメントの記載を信じるしかないよね
結局は程度問題なんだよ
前者のnullの問題についてはnull許容参照型を使えば型として区別できるけど、null非許容だからといって絶対にnullが入らないわけではなく簡単にnullを混入させることができる
彼の大嫌いなTSと同じく、特にランタイムチェックのない紳士協定だ

419 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 16:24:00.16 ID:kRupjksVa.net]
っていうかこれたしか元はvarの話だよね。
繰り返しになるけど、元々の問題提起、つまり
「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」は正しいよ完全にw

匿名型を受ける場合以外のvarの目的は、「見れば分かる」冗長な繰り返しを避けて
シンプルにすること。

「かっこ悪い」みたいな中二病的動機で意地でも型を明示しないことに固執する奴はアホだが、
困ったことに現実にはそういうアホが結構いる。

この辺LINQの乱用が嫌われるのと同じなんだろうねw
シンプルにするための道具を使ってわざわざ難解にするバカw
たぶん彼はシンプルとは文字数が少ないことだと倒錯している

420 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:12:39.57 ID:x9hFTlB3d.net]
varの型が分からん分からんってこいつメモ帳で開発してんのか?

421 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:24:59.67 ID:5TZJeeZKa.net]
IDEだけでしかソース見ない奴は問題ないんだよ
ぐぐってブラウザ上で見るソースなんてマウスあてても型表示してくれないからな

422 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:28:23.80 ID:C1Xb8B3u0.net]
どんだけ小さなプロジェクトしか関わったことないのか知らないが
code reviewするときに数百、数千というvarをおまえはいちいちマウス乗せてチェックしてるのか?

型を気にしないならオープンソースもコードを確認せずビルドして使うタイプだろう。
OSS品質=誰かがチェックしてくれるはず=テストしてない=今のMSのコード品質

423 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:32:31.52 ID:5TZJeeZKa.net]
var使ってるぐらいで崩壊するようなとこは大きいの作れないから気にする必要ないよw

424 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:43:11.47 ID:t5pkfnoc0.net]
varなんて大抵は右辺見たら型わかるやろ?
何が分からんのだ?

425 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:48:48.78 ID:C1Xb8B3u0.net]
実験結果は分かった気になって実は全然分かってないでした。
でも分かった気になってるのでいつまでもなぜ分からないのだ?と問い続ける。

426 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:52:58.23 ID:t5pkfnoc0.net]
いやマジで何が分からんの?アホの子なの?



427 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:58:12.21 ID:bWjicXEh0.net]
つか、変数名見ればクラス名も分かる程度にしておくのが普通だから
マウスで調べなくてもだいたい分かる

428 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 17:58:55.28 ID:C1Xb8B3u0.net]
自演じゃないよ、彼はそう信じてるんだ。笑わないでほしい。

429 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 18:09:44.71 ID:R56PdZ5+0.net]
>>421
このスレの住人はお前のことを笑っているぞ

430 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 18:09:55.54 ID:t5pkfnoc0.net]
staticおじさんみたいなもんだな

431 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 18:21:06.82 ID:C1Xb8B3u0.net]
そして彼は笑いながら未テスト納品を繰り返す。そしてまたスパコンのデータを吹き飛ばす。

432 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 18:39:16.92 ID:w42D9Ab/0.net]
コードレビュー時にローカル変数の型をいちいち調べる意味がよくわからん
必要になるのってバグの原因調査する時だけでしょ

433 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 18:41:30.05 ID:jje+EFiu0.net]
TS、JSの型がゴミなのはわかる
c#のvarも俺は嫌い
普通に読みにくい

最近は派遣先会社のVSに仕込まれた強制変換スクリプト?で保存すると勝手にvarが明示的な型に置き換えられて
久しく見ない問題だったが

434 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 18:42:19.84 ID:C1Xb8B3u0.net]
何も知らないなら喋らなきゃ無知はバレない。

435 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 19:07:10.79 ID:5TZJeeZKa.net]
>>425
人のソース読むのにvarで省略されてるよりも、型が使われてる方が理解しやすい
もちろん>>420のようにしてくれればvarでも変わりゃしないけど、世の中そういうソースばかりじゃないし酷いのになると名前で型を騙されることあるからな
整数型にn、floatにfついてるからdがついてたらdoubleかと思ったらそれも整数だったり。そりゃないだろ・・・

436 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 19:19:51.10 ID:fuEg19Cq0.net]
限度の問題では?
MSの規約にあわせれば良いでしょ。
IEnumerable<T>で受けるべきなのにList<T>で受けてるとかそういう不適切な状態になってない限りvarで良いと思うけどな。
varは省略の為に使うのではなくて推論の為に使うんよ。



437 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 19:53:56.06 ID:jje+EFiu0.net]
varなんて右クリックメニューで元に戻せるから書くだけ書いたら明示的な記述に直しちゃった方がいいよ

438 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 19:57:59.86 ID:kRupjksVa.net]
>>429
推論はするよりしない方が脳への負担が低いはずなので、
君の説を採るとvarは全面禁止すべきという結論になってしまうよw

少なくともコードの読み手(書き手ではなく)にとってのvarのメリットは
右辺の型が分かりきっている時に左辺の方でもくどくどそれを繰り返される冗長さが回避されることだ。

439 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 20:04:49.66 ID:lXYh5E9eM.net]
型推論
https://ja.wikipedia.org/wiki/%E5%9E%8B%E6%8E%A8%E8%AB%96

440 名前:デフォルトの名無しさん [2022/01/05(水) 20:09:49.34 ID:34fypwCFM.net]
書くやつは楽
コピペ盗作するやつは脳味噌が必要

var大勝利じゃん

441 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 20:11:27.06 ID:jje+EFiu0.net]
>>432
そもそもこれがゴミなのか有効なのか?
って議論がなされないまま突然導入されてほら使えだからな
VSの右クリックメニューにもvarを元に戻す機能が付いたってことはあんまり評判よくないだろコレ

442 名前:デフォルトの名無しさん [2022/01/05(水) 20:16:51.17 ID:eampx4mf0.net]
議論に参加できるぐらい出世しろ

443 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 20:20:48.72 ID:jje+EFiu0.net]
>>435
お前の会社は社長が1番技術力高いのか?

444 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 20:41:21.39 ID:P9kF/5N50.net]
varで推論しないほうが脳への負担が低いというのはどういうことですか?

445 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 20:42:40.80 ID:C1Xb8B3u0.net]
>>437
型が分からなくてもイライラしない人はそもそも負担がありません。

446 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 21:00:44.67 ID:jje+EFiu0.net]
アホが作った無意味なマトリョーシカクラス追わなくて済むからな



447 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 21:16:57.60 ID:w42D9Ab/0.net]
15年近く前から導入されてるものに対して
いまだに文句を言い続ける「熱量」には感心する

448 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 21:20:57.24 ID:jje+EFiu0.net]
>>440
正直、クラスから嫌いです
構造体以上のメリットを全く感じたことない

449 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 21:56:49.45 ID:LjEcMnXra.net]
>>441
そこは「しっくりこないんです」、と書いて欲しかったw

450 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 22:09:26.64 ID:R56PdZ5+0.net]
staticおじさん生きてたのかw

451 名前:デフォルトの名無しさん [2022/01/05(水) 23:32:21.89 ID:9KUuQ3bM0.net]
わかってる奴がvar使うのはOK
馬鹿がvar使うのはNG

452 名前:デフォルトの名無しさん mailto:sage [2022/01/05(水) 23:33:33.69 ID:HyMzvNe00.net]
じゃあdynamicつかうね

453 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 02:10:11.97 ID:jegOl+WX0.net]
>>431
推論させる方が脳への負担は低いよね?

型がわからなくてイライラすると言うけど、解る必要ある部分ではないのでは?
極端な

454 名前:bメソッドの入口と出口は型が決まってんだから。 []
[ここ壊れてます]

455 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 02:36:29.67 ID:Vr7+jyV40.net]
そのメソッド追っ掛けるのが面倒だって話ではないのか

456 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 02:50:36.77 ID:ChZ1cCgVa.net]
>>446
推論の主語が変わってるよw
あなたの言ってる推論の主はコンパイラ(開発環境)だよね?w

ついでに言うと、あなたがたぶん言いたいことは「書く時の負担が減らせる」ということ。
だからそうじゃなくてコードの読み手にとってのメリットが重要なのよw
そう書いてるよね?>>431

だってそうでしょ。
コードを書いてる時の書き手にとってはどの変数がどの型かなんて
当然自明なんだからvarにはメリットしかないよ。そんなの当たり前でしょw

結局varについても意見が割れるのは前にも書いた(>255)こういう意識の差があるからだろうね。
世の中KISSなんてただのお題目だと思っててなぜ重要か体感レベルで実感できない人が結構いる。



457 名前:デフォルトの名無しさん [2022/01/06(木) 03:46:43.08 ID:Jy6L3sVt0.net]
>>448
>コードを書いてる時の書き手にとってはどの変数がどの型かなんて当然自明なんだから

馬鹿はvarを使えばエラーが出ないという理由でvarを使っているだけで型なんか理解もしとらんのだよ

458 名前:デフォルトの名無しさん [2022/01/06(木) 06:07:27.91 ID:WSidiaMA0.net]
>>449
その発想はなかったわ
バカの考えは馬鹿にしかわからないのだな

459 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 08:30:02.04 ID:GGuE86Bnd.net]
>>448
違うよ。
コードの書き手も読み手も楽が出来る。
varで宣言されている変数に関しては、推論を行わせて、自動的に型が決まっていても良い、というシンプルな話。

Task<IQueryable<Bar>> foo()
{
 var masters=getMasters();
 //なんかmastersを使った処理
 // :
 var predictate= e=> ... ;//変換したmastersを使った関数
IQueryable<Bar> result = xxxx.Where(predicate).Take(10);
 //resultの確認
 return result;
}
こんながあったとき、predictateとmastersはvarで充分では?

460 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 09:18:51.63 ID:BMV6DlOj0.net]
全く論点が不明
コードレビューでは全てのvar変数をマウスオーバーして型を確認しなければならないと言うのもシチュエーションとして理解不能、猿が働いてる企業なのか?

そもそもそんな使用の是非の議論が必要な話なら世の中にvar禁止の組織はさぞかしあるんだろ?
御託並べる前にgithubでvar禁止にしてるC#プロジェクトでも持ってこいよw

461 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 09:23:52.72 ID:BMV6DlOj0.net]
この手の「一人のstaticおじさんに大勢が説教する図」はさまざまなスレで見かけるけどまったく生産性ゼロで不毛だよな
ほかに同調する奴いない時点で自分が間違ってる可能性か考えろよ
まず自分を疑うのはエンジニアの基本やろ

462 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 09:37:12.69 ID:VWdkYx+r0.net]
>>440
また低能馬鹿論理でましたね。WPFでも同じ馬鹿なこと言ってる人がいました。

463 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:00:08.90 ID:WPmMIBV7M.net]
>>451
C#だとresultの型は推論できないんだっけ?

464 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:02:24.36 ID:VWdkYx+r0.net]
>>ID:BMV6DlOj0

論点すら分からない馬鹿でも喋らなきゃ無知はバレない。

465 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:07:20.21 ID:sIABQ4ka0.net]
初心者スレで無知晒しても別に構わんだろ
ちゃんと教えてやれよ

466 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:10:39.02 ID:jegOl+WX0.net]
>>455
resultというか、メソッドの宣言的には省略不可。
なので、returnしているということはvarでも良いかもしれんな。



467 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:11:51.45 ID:VWdkYx+r0.net]
>>ID:BMV6DlOj0
いちいち捏造してはマウンティングしてきて
相手を猿だの罵倒してくるクソ野郎にはクソレス返しで十分。

468 名前:デフォルトの名無しさん [2022/01/06(木) 10:36:42.54 ID:cm3DDwaa0.net]
議論用でやれば
凄い流れるんだけど

469 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:38:33.11 ID:BMV6DlOj0.net]
数千のvarをマウスオーバーして型を調べるってんだからそんなもん猿以外の何者でもないだろw
それでカネ貰えるんだからいい仕事だなあ

で、var禁止のC#プロジェクトは見つかったのか?
さっさと探してこいよ

470 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:42:17.16 ID:VWdkYx+r0.net]
ID:BMV6DlOj0 ←無職のクソ野郎が仕事を語る

471 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:52:01.70 ID:XJZjWgUBd.net]
戦犯は>>323

472 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 10:58:22.55 ID:VWdkYx+r0.net]
>>463
馬鹿の壁の社会実験。参加してくれた馬鹿に感謝する。

473 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 11:41:47.82 ID:CKbwlJU4M.net]
>>458
メソッドの宣言?
ここの話だろ
> IQueryable<Bar> result = xxxx.Where(predicate).Take(10);
xxxx の定義によるけど普通は var で良くね?

474 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 12:18:50.36 ID:+o9sIybza.net]
IQueryable<Bar> result = xxxx.Where(predicate).Take(10);
↑だとこの一行でBarとってるとわかる

var result = xxxx.Where(predicate).Take(10);
これだとなにかを取ってるとしかわからない。たった数文字の差だけど受け取れる情報が多くなって読みやすい
俺みたいなエスパー能力低い人間にとっては普通に書いてくれた方がありがたい

475 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 12:34:17.18 ID:B4j0C8aZM.net]
試してみたけどpredicateの型を明示的にExpression<Func<T>>にしてないと
WhereがIEnumelableで解釈されてだめやね
resultの型をIQueryable指定しててもコンパイルエラー

Whereにlambdaのリテラル入れた場合は varでOk

476 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 12:57:35.75 ID:jegOl+WX0.net]
>>465
すまん、そこ間違えた。varで良い。
言語によってはTask<IQuerable<Bar>>が要らない言語があるんよ。

確かにBar取ってるとわかるが、Barを取っているとわかる必要はある?

>>467
スマホで書いたらダメだな、すまん。



477 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 13:20:28.91 ID:+o9sIybza.net]
Barだと分かる必要はないけど分かったほうがありがたい
無地のジグソーパズルでも問題なく完成できるけど、絵柄があったほうがありがたいのと同じ

478 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 13:50:37.41 ID:A4g6fK0TM.net]
わかる必要はないのわかったほうがありがたい?
初心者にありがちな必要ないのにやけに細部にこだわるタイプなのかな?

479 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:04:18.23 ID:+o9sIybza.net]
その行の前後見ればvarとあってもそれがBarだとわかる
でもBarと明示してくれたら前後見る手間なく分かる、たったそれだけの差をありがたいと言ってる

var result = colBar.Where(predicate).Take(10);
xxxxでなくcolBarというように書かれてたらvarでもBarだと分かるからありがたいし
もっと言えばresultとかやめて
var resBarTop10aroundPOI = colBarInTokyo.Where(predicate).Take(10);
こんな風にしてくれたら、この一行見るだけでそれが何しているのかが分かってありがたい
俺みたいに理解力に乏しい人間にとっては情報量多いほうがありがたいんだよ。無駄に多すぎるのは勘弁だが

480 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:08:45.09 ID:t38juXmg0.net]
class HogeBase
{
・・・
}

class Hoge : HogeBase
{
・・・
}

static Hoge GetHoge()
{
  return new Hoge();
}

の場合


HogeBase hoge = GetHoge();

だと右辺の型確認しない主義の人はhogeの実態がHogeBase型だと勘違いしたまま作業することになるからまずいんじゃないの?

481 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:13:52.71 ID:HsEWm91X0.net]
それは勘違いじゃないんじゃないの?

482 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:15:52.97 ID:+o9sIybza.net]
それはHogeBaseとして扱いたいからHogeBaseに入れてるんでしょ
中身はHoge2やHoge3かもしれない。Hogeと知らなくてもいいよ

483 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:19:47.84 ID:t38juXmg0.net]
virtualメソッドがHogeとHogeBaseで違う動きするよ?
virtualがHogeBaseの動きする前提でレビューしていいのかい?
>>473
>>474

484 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:29:24.20 ID:HsEWm91X0.net]
何か問題が?
それで困るなら派生させちゃ駄目

485 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:33:13.09 ID:+o9sIybza.net]
HogeBaseがさらにIBaseってインターフェース派生だったらどうするよ
IBase hoge = GetHoge();
hogeは何も実装できないInterfaceだから何の動作もしないはずなんて思うやつはいない

そもそも型に対して前提としてる考え方が違う
GetがHogeじゃなくてHogeBase返してきたら右辺見ても区別つかないよ
static HogeBase GetHoge()
{
  return new Hoge();
}

486 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:33:43.94 ID:t38juXmg0.net]
>>476
へー、呼ばれるメソッドを間違えて認識しててもレビューできるんだ
すげーな



487 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:37:00.03 ID:t38juXmg0.net]
>>477
うん、だからレビューするなら真面目に右辺のメソッドの中身まで確認しろってこと

488 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:41:37.87 ID:A4g6fK0TM.net]
>>478
えっ?
多態使ったことないんか?

489 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 14:54:39.91 ID:t38juXmg0.net]
使ってるからこの話題持ち出したんだけど
>>480

490 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:15:22.51 ID:FKeKEAH4M.net]
hoge.fuga();
って言うコードをレビューする時に実際に呼ばれるメソッドがまだ作られてないケースもあるんだけどどうやってレビューしてるの?

491 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:19:14.44 ID:Rudq/m5Ya.net]
>>451
人の話聞かない人?何が言いたいのかさっぱり分からん。

恐らく誰も、少なくとも俺は
「varを使うと自動的に左辺の変数が不明瞭になるからvarは一切使うな」
などとは言ってないの。
例えば>>431

むしろ現実的にはほとんどの場合varでいいんだよ。
それはコードの書き手にも読み手にもメリットがある。

論点は>>412に書いた通り、「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」だ。

492 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 15:20:25.57 ID:77VqpiEwM.net]
var嫌がってるのってもしかしてテストコードを書かない種族の人?

493 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 16:21:47.64 ID:7whnQ4QD0.net]
ワイはvarのほうが効率あがる
うちはそこはレビューよりも書き手優先でvar推奨(c#)
レビューも気にするならその段階でIDE起動してる

その現場でいちいち書かせたいんなら型明示を強制すればいいんでね
うちのとこはそんなとこまでちまちま言い合うほど暇じゃないし、それ以上にテスト充実してほしい勢
まあvarにわざわざ書き直させたりもしないねw

494 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 16:35:03.08 ID:+o9sIybza.net]
俺はvarが嫌なんじゃなくて読みにくいコードが嫌
で、読みにくい要因の一つがvarだということな
さらに自分がvar使うのが嫌なんじゃなくて他人が使ってるのが嫌。自分のコードだったらそんなこと気にしなくても読めるし
自分に優しく他人に厳しくがモットーなんだよ

495 名前:デフォルトの名無しさん [2022/01/06(木) 16:36:42.04 ID:OeKJG00I0.net]
私C#良く分からないのですが、
そんな私がC#の説明することになりました。

クラスが参照型なのですが、どういう理由でこうなっているのか、
どういう意図でこうなっているのか、何と言って説明すればいいの?
本読んでも「参照型はポインタ的な雰囲気の何か」的な説明しかなくて
なんでこうなっているのか全く書いてなかった。

ちなみに、参照型=ポインタと言い切っちゃってもいいのかな??
よろしくお願いいたします。

496 名前:デフォルトの名無しさん [2022/01/06(木) 16:38:59.36 ID:OeKJG00I0.net]
コード書くときはvarで書いて、
それをintとかlongに変換してくれるツールを作ればいいだけなのでは??



497 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:01:20.10 ID:WCTWOnks0.net]
>>487
書籍に例えるとどちらも目次に該当する
ポインターがページ数だとすると参照型ってのはタイトル

498 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:31:36.72 ID:ae3RunliM.net]
>>487
参照型はデータそのものじゃなくデータへの参照を持ってる型

C言語しか知らない人にC#を説明するんじゃなければわざわざポインタとの対比で説明する必要ないよ

499 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:35:14.31 ID:WCTWOnks0.net]
Varでも何でもいいけど読みながらその都度型を類推するよりは読む前に何をしてるか理解してから読む
大まかな流れを理解してから読むのとメクラ滅法に読むのじゃ時間が100倍も1000倍も異なるからね
書く時だってそう

500 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:50:32.30 ID:rL+VifTwM.net]
>>483
> 論点は>>412に書いた通り、「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」だ。
具体的にどういうケースを言ってるの?

501 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:51:43.10 ID:VWdkYx+r0.net]
>>492
型が分からなくてスルーできる脳みそが羨ましいわ〜

502 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:55:43.01 ID:h7LPoqLqM.net]
そもそもvarがいいのって書くときだけじゃん
戻り値なんかでやられると最悪じゃん

503 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 17:58:59.73 ID:XJZjWgUBd.net]
結局宣言行まで戻って型見る面倒
ショートカットでいいような

504 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 18:41:32.37 ID:6bRgcWdcM.net]
>>493
そういうレスしかできない時点でなにも困ってないのがバレバレやん

505 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:04:48.00 ID:VWdkYx+r0.net]
>>496
トラが檻に戻ってないのに確認しないで施錠できる脳みそみたいな

506 名前:sage mailto:sage [2022/01/06(木) 19:25:09.72 ID:OeKJG00I0.net]
>>489 >>490 返答ありがとうございます。

「参照型とは何か」を問うているのではなくて、
クラスが参照型なのは、どういう理由でこうなっているのか、
どういう意図でこうなっているのかを問うています。
クラスを参照型にしている思想は何かということです。



507 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:27:13.03 ID:6bRgcWdcM.net]
単なるアホかよ、NGしとくわ

508 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:34:15.72 ID:VWdkYx+r0.net]
>>499
推測しづらいケースが一つも思い浮かばない→推測をしたことがない→馬鹿の壁

509 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:34:56.89 ID:jNRDp0FJa.net]
>>498
逆に参照型じゃないならどうする?
多くのデータを抱えたクラスを毎度毎度コピーして渡すコピー型にでもする?

510 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:35:48.42 ID:Bcw/lb7Z0.net]
>>498
C# クラス 参照型
でググれば一番上にお前が望んでいる答えがあるぞ

511 名前:デフォルトの名無しさん [2022/01/06(木) 19:38:04.42 ID:OeKJG00I0.net]
var addFunc(var a, var b){ return (a + b); }
とかはありですか??

512 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 19:42:33.04 ID:Z0ROnAB1M.net]
>>503
その宣言内容だけでどうやって型推論するのか
いくら何でもコンパイラに与える情報が足りなさすぎる

513 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:15:49.57 ID:pGhYWD4M0.net]
>>499
気付くのが遅いぞ
コレいつもの人だわ

514 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:27:11.92 ID:VWdkYx+r0.net]
>>505
おまえの型推論はバグってるな。

515 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:53:48.44 ID:2nit6p8q0.net]
>>471
これ、古より嫌われているシステムハンガリアンだから結構嫌がる人多いと思うよ

516 名前:デフォルトの名無しさん [2022/01/06(木) 20:55:39.69 ID:WSidiaMA0.net]
winapiのクソキャストにはハンガリアンぐらいが丁度いい



517 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 20:59:03.64 ID:snULIxlRa.net]
>>487
問題設定自体を変えた方がいいかもね。
なぜ値型ではだめなのか?と。

値型だと少なくとも「フールドを増やしたサブクラスの値を
ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。

というか、こういう禅問答みたいな話は(たぶん重要なんだろうとは思うけど)
初心者は後回しにした方が絶対にいいと思う。

518 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 21:28:53.73 ID:TiVU33P2M.net]
>>498
参照型を理解してないんだからそれを理解するのが先

クラスが参照型なのはポインタ型や値型だと困るから
文字列が値型だとどうなるか考えてみれば?
ポインタを理解してるならすぐわかる

519 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:17:09.17 ID:mv8eR6oh0.net]
C#のスレでメソッド名の先頭が小文字から始まってる時点で、
・意識が低い
・まともに調べたり勉強していない
どちらかであることを認識すべき。

520 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:20:50.62 ID:VWdkYx+r0.net]
varがある時点でやっつけ専用言語なのに

521 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:32:25.27 ID:8QDluGwV0.net]
>>512
???

522 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:51:42.25 ID:t38juXmg0.net]
>>512
今時C++でさえ型推論付いてるというのに

523 名前:デフォルトの名無しさん mailto:sage [2022/01/06(木) 23:53:35.71 ID:VWdkYx+r0.net]
どうしてもc++でやっつけコード書きたいから追加した仕様だろ

524 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:03:01.88 ID:IK3vjsT30.net]
今時型推論ないほうが珍しいだろ

525 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:09:41.99 ID:qow9t6Ky0.net]
やっつけコードしか書かないプログラマだらけの時代に何言ってんだ
昔はOSの無償サポートは10年とかだったのに今はすぐサポート切れの切り捨て。
なぜならやっつけコードで保守する気ないからだ。Win8とかEdgeとかWPFとかぜーんぶやっつけで作ってたからすぐ捨てられた。

526 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:23:20.23 ID:bs4RpyaW0.net]
型推論はやっつけなのか。
古き良きなのか、時代についてこれないのか
考え方は人それぞれよね



527 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:30:28.71 ID:uWMJJK3h0.net]
型推論だめってチームいやだわ
ギスギスしてそうw

528 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:32:56.56 ID:IK3vjsT30.net]
型推論付きの言語はやっつけ専用か
普段この人は何言語でやっつけじゃない開発してんだろう

529 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 00:40:49.40 ID:YgufRjXg0.net]
最近は「int key = 0」でなく「Key key = new(0)」みたいに書いてるからvarは使わんな

530 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 06:45:05.41 ID:j4Wq+RBJM.net]
>>520
・老害のCOBOLer
・自称スーパープログラマーな組込C使い
・Javascriptのvarと混同してるボンクラPG

531 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 08:15:52.34 ID:y6x0s+uzd.net]
var一切使わない人ってラムダの引数型もクソ真面目に書いてそう

532 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 09:50:10.76 ID:qow9t6Ky0.net]
スップw 初心者スレでラムダw

533 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 10:00:38.21 ID:qow9t6Ky0.net]
知らないうちにLINQスレもなくなってる。過疎なム板で落ちるとかよほど人気ないのか。
>>523 そうやってガキみたいに初心者相手にマウンティグして全部追い出したんじゃないのか。

534 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 11:42:40.26 ID:yxixByMw0.net]
おーっとここでガキマウントです

535 名前:デフォルトの名無しさん [2022/01/07(金) 11:50:35.85 ID:FRwoYiaWM.net]
>>524
初心者のくせにラムダなんて生意気だ!
ってマウントですね

536 名前:デフォルトの名無しさん [2022/01/07(金) 12:38:03.65 ID:6zNCaZbD0.net]
>>509
>> 値型だと少なくとも「フールドを増やしたサブクラスの値を
>> ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。

すみません。良く分かりません。クラスが値型のC++で
「フールドを増やしたサブクラスの値をベースクラスの型の変数に入れる」
なんて芸当、なんの問題もなくできると思うのですが

>>510
>>文字列が値型だとどうなるか考えてみれば?

文字列は内部実装は参照ですが、ユーザ見えは値型と同じだと思うんですが・・・
内部でどう実装されているのかは、そんなに説明するつもりもないし・・・



537 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:00:57.38 ID:y6x0s+uzd.net]
>>528
ベースクラスの変数に入れることはなんの問題もないけど逆の操作派生クラスに戻せなくなる
C++でもそうだけどnewされた時の型をベースクラスが覚えておかないとvirtualとかasが使えない

538 名前:デフォルトの名無しさん [2022/01/07(金) 13:01:07.20 ID:6zNCaZbD0.net]
返答ありがとうございます。

>>501
>>逆に参照型じゃないならどうする?

c++ではクラスは参照型ではないですよね?
c#では構造体は参照型ではないですよね?

>>502
>> C# クラス 参照型
>> でググれば一番上にお前が望んでいる答えがあるぞ

配列が参照型なのを考慮すると、高速化・・・・
いや、そのサイト見てると高速化よりも
ポインタを無理やり追い出した弊害に思えてきました・・

539 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:03:35.17 ID:qow9t6Ky0.net]
c++に参照あるのに

540 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:03:54.16 ID:y6x0s+uzd.net]
>>528
型ってのはコンパイル時に大きさ(byte数と配置)が決まってないといけないという縛りがCのときからある
長さがいくつになるか分からんstringは参照型にするしかない

541 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:06:18.93 ID:qow9t6Ky0.net]
クラスや構造体の中にポインタもって動的にメモリを確保するだけである。型のサイズは変わらない。

542 名前:デフォルトの名無しさん [2022/01/07(金) 13:08:54.79 ID:6zNCaZbD0.net]
>>529
>>C++でもそうだけど

まことに申し訳ないけど、何を言いたいのか全く理解できません。
クラスが値型のC++でも通用する話を出してきても???と思うんですが

543 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:09:35.44 ID:IAj8vN+S0.net]
>>530
生のポインタだとオブジェクトを移動して断片化したメモリの整理が出来ない

544 名前:デフォルトの名無しさん [2022/01/07(金) 13:12:31.36 ID:6zNCaZbD0.net]
>>532
それだとクラスは値型でOKという話になっちゃいます。

545 名前:デフォルトの名無しさん [2022/01/07(金) 13:17:33.66 ID:6zNCaZbD0.net]
>>535
ひょっとして私根本的な所を理解していないのかな?
class clsA { class clsB { class clsC { xxx }}}
みたいなクラスの内部にクラスを含んだクラスであっても
GCでガンガン割り当てられているメモリアドレスを
動かされると言いたいのでしょうか??

546 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:18:48.25 ID:qow9t6Ky0.net]
で参照の何を議論してるんだ?
c#のクラスが参照型なのが許せない!!って言いたいのか? キミがそういうのならそうだろう。キミの中ではな。



547 名前:デフォルトの名無しさん [2022/01/07(金) 13:26:11.81 ID:FRwoYiaWM.net]
参照のほうが便利だからじゃね?

548 名前:デフォルトの名無しさん [2022/01/07(金) 13:28:12.36 ID:6zNCaZbD0.net]
>>538
>> c#のクラスが参照型なのが許せない!!って言いたいのか?

質問を読んでそういう理解なのでしょうか?
質問を読まずにそういう理解なのでしょうか?

549 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:34:18.44 ID:qow9t6Ky0.net]
>>540
誰が質問をしたかすら知らないが、質問を質問で返す。つまりそれは構ってちゃんだ。

550 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:45:30.30 ID:BJs69ghP0.net]
流れを読まず、適当なところに突っかかる
つまりそれは荒らしだ

551 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 13:51:09.32 ID:qow9t6Ky0.net]
話題が分散しすぎて流れが分からないから聞いただけなのに酷い言い掛かりだ。

C#のクラスがなぜ参照型かだって?
C#は関係ないよ。.net側の仕様だから。vb.netでも同じ。で終わりの話。

552 名前:デフォルトの名無しさん [2022/01/07(金) 13:54:19.71 ID:FRwoYiaWM.net]
>>543
その仕様をなぜ決めたかを聞いているんでしょ

こんなところで

553 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 14:01:57.02 ID:IAj8vN+S0.net]
>>537
そう頻繁では無いにしろ移動されない保証は無いね

554 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 14:24:42.02 ID:qow9t6Ky0.net]
>>544
え? コピーのコストが違うから分けたという単純な話だが。
Cだって配列のコピーは重いから引数で参照渡しされるだろう?

555 名前:デフォルトの名無しさん [2022/01/07(金) 14:55:19.17 ID:FRwoYiaWM.net]
だからみんな単純な回答してるじゃん

あ、俺はどちてぼうやじゃないよ

556 名前:デフォルトの名無しさん [2022/01/07(金) 15:17:14.00 ID:6zNCaZbD0.net]
>>546
>> コピーのコストが違うから分けたという単純な話

確かにそんな感じですね。
クラスが値型のc++が遅くて
クラスが参照型のc#が早いなんて
全く聞いたことないのですが、
MSがトチ狂って高速化を優先(それ以外を犠牲)したようですね。



557 名前:デフォルトの名無しさん [2022/01/07(金) 15:54:45.54 ID:FRwoYiaWM.net]
トチ狂っててワロタ

558 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 16:20:24.15 ID:EZdfrZXhM.net]
>>548
C++ は値型のクラスを作れるけどそれをそのま他の関数に渡すなんてことはほぼやらんぞ
そもそもCでも構造体をそのまま渡したらコピーされるからコピーコストを言うなら参照型にしてるだろ
要はC/C++はそういう制御もプログラマに開放してるがC#は開放してない(コピーはそれなりのメソッドを呼び出す)ってだけの話

559 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 17:18:23.04 ID:0zyZKkps0.net]
牛乳飲んで落ち着いて

560 名前:デフォルトの名無しさん [2022/01/07(金) 17:50:23.82 ID:7Nc+xMj80.net]
>C++ は値型のクラスを作れるけど

なんかもう、松永パソコン大先生みたいな話だな

561 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 18:17:48.54 ID:EoqFVcXVr.net]
割りきればいいものを、どうでもよく無駄にこだわるやついるよな

562 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:02:16.87 ID:NAsC2Vwba.net]
>>528
正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね
https://www.cloverfield.co.jp/%E7%B5%84%E8%BE%BC%E3%81%BF%E7%8F%BE%E5%A0%B4%E3%81%AE%E3%80%8CC++%E3%80%8D%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20%E6%98%8E%E6%97%A5%E3%81%8B%E3%82%89%E4%BD%BF%E3%81%88%E3%82%8B%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80/3.3%20%E7%B6%99%E6%89%BF%E3%81%AE%E8%A3%8F%E5%81%B4.html

だから他の人が指摘しているstringのようなケースを無視するとしても、
値型で無理に継承を実現しようとすると、

(1) >>509に書いたように多態を諦めるか

(2) メモリ効率を犠牲にして、ベースクラスの変数のメモリ上のサイズは全ての派生クラスの
「共用体」のサイズとする。当然全ての型はinternalとして定義する必要もある。

こういうありがたくない制約が出来ちゃうでしょ

563 名前:デフォルトの名無しさん [2022/01/07(金) 19:37:25.76 ID:6zNCaZbD0.net]
>>546
>>Cだって配列のコピーは重いから引数で参照渡しされるだろう?

つ【std::vectorは参照ではない】 []
[ここ壊れてます]

565 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:39:06.67 ID:46kMC38t0.net]
Unityの座標系って左下起点がデフォなの?
WindowsのGUIとのやり取りが凄い大変なんだけどなぜこういう仕様になってるのか教えてもらいたい

566 名前:デフォルトの名無しさん [2022/01/07(金) 19:41:19.72 ID:6zNCaZbD0.net]
>>554
>> 正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね

菱形継承はいろいろと問題あるからね。菱形継承問題でググってみな
それにc#は多重継承できないからね・・・



567 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:42:11.75 ID:46kMC38t0.net]
>>555
push_backでコピーorムーブが発生するってことを言いたいん?
そのコピーコストを無視できないくらい大きなもの扱ってるときは正にC#の参照型Listのようにポインタ型のvectorを作るか、resize+インデクサアクセスで直埋め込みするじゃん

568 名前:デフォルトの名無しさん [2022/01/07(金) 19:44:39.54 ID:6zNCaZbD0.net]
>>554
>> ベースクラスの変数のメモリ上のサイズは

いや、ベースクラスの変数のメモリ上のサイズは
ベースクラスが持っている変数のメモリ上のサイズの合計
(パディング考慮)でしょうが・・・

569 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:46:03.22 ID:NAsC2Vwba.net]
>>556
Unity知らんけど、印刷考えなきゃ最初から普通のデカルト座標採用してくれた方が
自然ではあるね。

むしろCRTなんていう前世紀の遺物の仕様をいまだに引きずってる方が「なぜ」のような気が

570 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:47:36.10 ID:NAsC2Vwba.net]
>>559
だから、そうだとしてそれにフィールドを追加した派生クラスの値を入れられるんですかと

571 名前:デフォルトの名無しさん [2022/01/07(金) 19:48:35.26 ID:6zNCaZbD0.net]
>>558
引数で参照渡しされるだろう?

と言ってるので『std::vectorを引数にする時は参照渡しではない』という意味で言ってるが

572 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:54:08.11 ID:46kMC38t0.net]
>>562
C/C++には参照型も糞なく全部値型だからvectorそのままだと当然値渡しになるから言葉そのまま受け取ればそういうことになるけど
std::vectorって配列へのポインタを持ってるだけだから疑似参照型みたいなもんってことを言いたいんだろ
sizeof(std::vector<T>)のTが何であろうと固定で16byteくらいだし

573 名前:デフォルトの名無しさん [2022/01/07(金) 19:54:17.18 ID:6zNCaZbD0.net]
>>561
つまり『ポインタを無理やり追い出した弊害に』だよなぁ

574 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 19:58:27.54 ID:46kMC38t0.net]
>>560
WindowsGUIの方がレアだったのか
C#でもSIMD命令呼べるようになったから_mm_add_psとかで一気にやりたいのにxとyで加算減算分けないといけないから出来ないのが

575 名前:c念すぎる []
[ここ壊れてます]

576 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 20:02:45.79 ID:qow9t6Ky0.net]
>>555
それC++やないか。しかもそれはC++でも配列やない、classや。
しかもC++はclassの参照渡しできるねん。



577 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 20:49:57.04 ID:NAsC2Vwba.net]
>>564
いや何でそうなるw
意味が分からん。

問題設定は「なぜクラスの変数はポインタなのか?」
だからポインタを使わないとどうなるかを示しているわけで、
実際はC#はポインタを追放なんかしてないよ

578 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 20:56:58.30 ID:0Qlm+FNra.net]
他人の話を聞かないタイプだから相手するだけ無駄よ
相手するならMSはトチ狂ってるってのに同意する方向じゃないと

579 名前:デフォルトの名無しさん mailto:sage [2022/01/07(金) 21:12:41.39 ID:qow9t6Ky0.net]
だから.netの仕様だと。
言葉を借りるならポインタを追い出したのが値型だ。値型と参照型の機能の違いを仕様書で確認しなさい。
つまるところガベジコレクションからの分離。値型はスタックに乗せれる。確保も開放も高速。
つまり型が分からなくてもスルーできる奴は元から何も考えてないということだ。

580 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 00:48:49.28 ID:T5N54j6i0.net]
手動でメモリ確保して解放すんのめんどくせぇなぁって流れから、
全自動でメモリ確保と解放するC#が生まれたってだけの話じゃないの?

581 名前:デフォルトの名無しさん [2022/01/08(土) 01:01:47.02 ID:PQBT4Nc/0.net]
>>570
Delphiを知らない馬鹿

582 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 01:03:56.61 ID:IGpBQzM50.net]
その後10時間もマウンティングゴリラしてたのかw

583 名前:デフォルトの名無しさん [2022/01/08(土) 02:44:00.27 ID:1bILROxT0.net]
大昔にVBで作られた社内業務アプリをC#で作り直す事になったけど、
GUIはWinForms?WPF?WinUI?どれが一番メジャーなの?
WPFは死んでるとか言われてるようだし、WinUIは出たばかりで情報少ないっぽいし、古いけどWinFormsがいいの?

584 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 03:02:40.46 ID:35B5Rb5B0.net]
>>573
一番メジャーなのはWinFormsだけど
社内でよく使われているモニターが高解像度で
スケーリング表示をきれいにしたいなら
WPFかWinUIの方がいいよ

585 名前:デフォルトの名無しさん [2022/01/08(土) 03:13:30.02 ID:IEuXTu700.net]
WinFormsって2番目だぞ
1番使われているのはWPF
社内アプリならとりあえず.NETのバージョンは6にしたほうがいいな
以前のとパフォーマンスが段違いなので

586 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 04:22:41.48 ID:BHQyctLJa.net]
>>573
何がベストかは結局何を重視するのかの関数だよね。
だからたぶん各選択肢のいわゆるpros and consを挙げてもらった方がよい気がする

コスト重視ならVBにもっとも近いFormがベストだ。
視覚効果や高DPI対応が重要ならWPFがベストだけど、学習コストが高いし、
はっきり言ってパフォーマンス的にまったく使えない分野もある。

WinUIは知らんw



587 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 06:02:52.91 ID:35B5Rb5B0.net]
一番楽チンなのはVS2008のコンバーター使ってVB6→VB.netにコンバートし、コンパイルエラーが発生する部分をちょいと修正する事
複雑な計算式使ってる場合に計算式の移植間違いを防げる

588 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 09:09:54.52 ID:LhcZsKvbM.net]
>>571
Delphi に GC あったっけ?

589 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 09:30:56.43 ID:qvdwzZse0.net]
>>578
ないと思う

590 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 09:56:39.05 ID:PHIkImNk0.net]
関係ないけど、こういう案件て段々広がって収拾つかなくなるか、
客がビビりはじめて結局ほぼ何もしてない変わらないみたいになるか、
ってなりがちよね
客にも腰据えてもらわないとぐだぐだになる

591 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 10:52:45.90 ID:76ewE+lX0.net]
Webで作るという選択肢はないのかな?
ある程度の規模があるところなら配布やサポートコストまで考えるとWebのほうが安上がり

592 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 11:16:30.10 ID:6MOJW9HWM.net]
社内業務アプリの内容によるけど今どきならWebだろうね
サーバーやDBMSの構築すらままならんとかならしゃーないけど

593 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 11:21:14.11 ID:eHBvCcl00.net]
クラサバとかの業務システムをWeb化するのはよくある話だが、スタンドアロンで済む
ただのGUIアプリをわざわざWeb化するのは割に合わんと思うがな。
それを上回るなにかメリットがないと。

594 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 11:32:33.07 ID:Sgj71hWsa.net]
データをサーバー管理するようなのならまだしも、普通のアプリなら普通に作ったほうが圧倒的に楽

595 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:01:38.53 ID:6MOJW9HWM.net]
今どき社内業務システムでローカルに閉じてるやつなんてある?

596 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:13:29.45 ID:qVp9qlx6r.net]
ローカルアプリから直接DB見に行くとかならあるんじゃね
ストアで更新配賦とか夢見たこともあったなあ



597 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:18:21.83 ID:eHBvCcl00.net]
>>573の業務アプリというのがどういうものかは>>573に聞いてみなけりゃわからんが、
業務で使う内製アプリがスタンドアロンだって例はいくらでもあると思うが。
逆に、なんで無いと思ったの?

598 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:18:22.15 ID:Sgj71hWsa.net]
社内業務アプリって言ってもいわゆる業務管理システムだけじゃないからな
ローカル完結なんていくらでもある
ちょっとしたツール類なんて全部そうだろ

599 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:45:29.08 ID:+n5rVMIfd.net]
Web化すべき案件なら最初からそっちで検討してるんだから余計なお世話やで

600 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:47:06.13 ID:v0nm/uLMM.net]
ツール類って具体的には?
そりや業務端末でも一般的なフリーソフトとか使ってることはあるけど、
業務用に作られたスタンドアロンなツールなんて機器制御関連以外では滅多に見かけないわ
システム連携が不完全なためにローカルなアプリやVBAで局所的な自動化をやってるケースはあるけど、結局その入出力は手動で他と連携するわけで、スタンドアロンとは違うでしょ

601 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:48:22.96 ID:35B5Rb5B0.net]
スタンドアロンで作るって言ってるのにしつこいな

602 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 12:50:35.22 ID:VCGpsaaV0.net]
VisualStudioでデバッグ中に変数やらクラスの中身を追っていくとき
大量にプロパティがあるとアルファベットの後半追うのに
▼で下まで流すのがかなりまどろっこしいんですが
スクロールバーもでないし・・・
もうちょっとスムーズにする方法ってあるんですかね

603 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 13:01:28.24 ID:Sgj71hWsa.net]
>>590
テキストファイルの文字数や段落数カウントするだけ
指定したウインドウのスクリーンショットを取るだけ
画像をpngにするだけ
ファイルをリネームするだけ
動画からフレームや動画を切り出すだけ

こういうの実際に作ったツールだな。フリーソフトでもできるけどそういうのも開発することあるんだよ

604 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 13:24:30.41 ID:a4nwkm/0M.net]
デスクトップアプリじゃなきゃダメな強い理由がなければ
WinFormならともかく今からWPFとかやるのは無駄だよね

605 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 13:25:51.14 ID:a4nwkm/0M.net]
>>592
ウォッチ式?

606 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 13:29:23.33 ID:Rc/Af6wIM.net]
>>593
そう言うのを社内業務アプリって言うの?



607 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 13:37:12.89 ID:Kbht7+jO0.net]
やっつけアプリ、やっつけツールと言います

608 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 13:38:58.06 ID:OnpKeph7a.net]
>>596
仕事に使うなら全部業務アプリだろ
区別する意味はないと思うが

609 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 14:16:08.90 ID:sJWr1x2I0.net]
業務といっても何を指すかで見当違いなことを言い合ってたりするからな
ちなみに俺は追記式で容量が10メガ超えるログファイルを待ち時間なしに検索&色分けフィルターするビューアー
が必要だったので作った

610 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 14:19:48.42 ID:QfvG5fL40.net]
プロパティの値についてなんですが
値が変わらないプロパティに関しては
Visual Studioの右側のプロパティから変更するのか
それともForm1.csのなかで変更するのどっちが王道でしょうか?

611 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 14:22:07.76 ID:LyVlYLKR0.net]
>>600
Visual Studio

612 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 14:45:55.87 ID:Sgj71hWsa.net]
変更したってことを把握しにくいからできるだけForm1.csだな

613 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 18:25:53.14 ID:W7HGPhnA0.net]
>>595
変数にカーソル合わせてポップアップででてくるクラスや変数の中身がでますよね
デバッグ中にそれで実際に入っている値を追っていくことがよくあるんですが
大量にあるとアルファベット順に並んでいるせいで
たとえば コンボボックスでいうと Selected〜まで見に行くのに
Sまで下りてこなければならないですよね
ポップアップにはスクロールバーもでないから毎回スクロールしないとならなくて
それが面倒で・・・

614 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 19:02:53.17 ID:9AShM9M8a.net]
デバッグで実行止めてるときに、デバッグ->ウインドウ->ウォッチでウォッチ1開いて、そこに見たい変数をドラッグ&ドロップ
配列の一部だけ見たいなら.Skip(100).Take(20)みたいに適当なlinqでもつけて

615 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 21:28:00.33 ID:WWAiwq7Z0.net]
ArrayクラスのResizeメソッドの引数が参照渡しなのは何故ですか?
他のReverseやSortメソッドが値渡しなので統一されていないと感じてしまうのですが

616 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 21:31:36.72 ID:7PajA1910.net]
ReverseやSortは要素を置き換えるだけで済むけど
配列は固定長である以上Resizeするには新しく配列を作り直すしかない



617 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 22:55:18.70 ID:W7HGPhnA0.net]
>>604
レスありがとうございます
ウォッチ、使ったことがなくて知らなかったです
クイックウォッチでも簡単に見渡せるんですごく楽になりました
感謝です

618 名前:デフォルトの名無しさん mailto:sage [2022/01/08(土) 23:12:33.36 ID:WWAiwq7Z0.net]
>>606
ありがとうございました
納得しました

619 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 02:13:23.67 ID:LmDP/A0i0.net]
.net6だとプロジェクト作成時にいつものusing systemとかが無かったんですけど暗黙的に使えるようになったか、あるいはどっかに記述を引っ越したんですかね?

620 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 03:14:56.13 ID:t77ZMTfv0.net]
global usingとかいう迷走の果てみたいなものがあったような覚えがある

621 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 16:59:27.76 ID:9R5shyc4d.net]
>>609
.csproj見てみ

622 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 18:05:28.98 ID:LmDP/A0i0.net]
>>611
Implicitusingsってやつですか
このglobal usingってのはユーザが任意に追加できるんですかね?.net標準分だけ?標準だけだと有り難みがイマイチ・・・

623 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 18:14:37.58 ID:Fbfc1ztE0.net]
implicitなのはSDKで固定のはず
global using自体は.csprojに自由に書けるよ
https://ufcpp.net/blog/2021/11/implicitusings/

624 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 18:32:28.44 ID:Fbfc1ztE0.net]
というか.csにも普通に書けるよ

625 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 19:26:41.39 ID:mJ9SvVvR0.net]
というか.txtにも.hogeにも普通に書けるよ

626 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 19:32:53.98 ID:Yn6t3tioM.net]
>>614
書けるけど1つに書くと全ファイルに影響するのは怖くね?
なんかやりすぎ感ハンパない



627 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 20:21:18.79 ID:mJ9SvVvR0.net]
>>615
悪ふざけじゃなくて、書いたらちゃんと認識されるよって意味ね。

628 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 21:15:40.34 ID:zf/OU/S30.net]
え、readme.txtとかに書いてても影響しちゃうの?

629 名前:デフォルトの名無しさん [2022/01/10(月) 22:20:21.82 ID:pzAlxVbU0.net]
何度も同じことを書かせる仕組みはプログラムの基本的な考えと違うと考えればglobal usingは妥当

630 名前:デフォルトの名無しさん mailto:sage [2022/01/10(月) 22:45:07.71 ID:zjcR70ev0.net]
global usingもあれば楽だけど書ける場所は限定された方が良かったような

631 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 06:33:56.47 ID:TdDX7t/9M.net]
>>619
それなら.csprojとかでいいでしょ
どこかに書いたら全体に影響するのはなんか違う

632 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 07:14:14.80 ID:qLFRpNWYM.net]
もうあっちゃう時点でキモいから書けるなら制限なしでいいでしょ

633 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 08:18:04.81 ID:34v9AEL90.net]
VS2022からC#やる人は結構わかりにくいやろなぁ。
なぜimportもusingもなにも書いてないのに、Console.Writel...
みたいにいきなり書けるのみたいな。

グローバルにいきなり書いてるがクラスに属さないグローバル変数はあるのないのとか。

634 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 09:25:26.02 ID:7v4JZSk/0.net]
えーーーんTT
Console Programつくろうとしたらmain()がないよー><
なにこれ、こわい><
たすけてー

635 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 09:36:34.63 ID:qBZtvv4T0.net]
従来のようなプロジェクトテンプレートでもプロジェクトを作れるようなオプションなりテンプレートなりあればいいのにね
テンプレートぐらい自分で作れって?面倒じゃん

636 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 11:21:28.14 ID:MvizqUHc0.net]
>>625
.NET 5.0をターゲットにプロジェクト作成してから.NET 6.0にターゲット変更する
https://docs.microsoft.com/ja-jp/dotnet/core/tutorials/top-level-templates#use-the-old-program-style



637 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 11:57:17.32 ID:7v4JZSk/0.net]
C#作ってる人たちはC#をスクリプトにしたいの??
何を目指してるのかよくわからない

638 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 12:22:25.87 ID:4qGoqi+ca.net]
なんでもできることを目指してるんだよ
もちろんスクリプトとしても使えるぞ。アプリの拡張プラグインをc#スクリプトにするとか簡単にできる

639 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 13:10:40.24 ID:Grp1ZbCtM.net]
>>627
IDEによるコード生成を完全に排除しようとしている、と考えると理解しやすい
最近の内製系の開発では、コードの自動生成は避けてソースを極力コンパクトに保とう、という考え方が主流になっているんだよ

640 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 13:50:01.49 ID:luTEChNva.net]
何で自動生成やめたらコードがコンパクトになるの?
そんなわけないと思うんだけどw

641 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 13:58:30.81 ID:/T2lNEPNM.net]
コードの自動生成と言うか簡便さを求めてるのだろう
他の簡易な言語と比べると不必要な部分があるからそれを簡略化する

ボイラープレート(決まり切った特定のコードの記述 )やおまじないのような入門者にとって敷居の高いものを減らす
それ自体は問題ないはず

C#は言語的に無駄な記述が多すぎたから一気に来たんだろうな

642 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 14:02:02.73 ID:/T2lNEPNM.net]
ファイル内のnamespaceは一個なのにそのためにインデントが一つ増えてエディタでのコードが見通しが悪くなる
こんなの早くから導入してくれと思ってた

643 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 14:14:24.58 ID:Jt6jcb4u0.net]
てかusingみたいに冒頭宣言みたくできればよかったのにな

644 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 14:35:22.28 ID:8rbbEYvA0.net]
>>629
コードの自動生成はむしろ最近より進んでるやろ
gRPC周りやソースジェネレーターなんてその最たるもの

645 名前:デフォルトの名無しさん mailto:sage [2022/01/11(火) 14:56:40.93 ID:luTEChNva.net]
>>631
それってVBの思想だよねw
ただしい選択とは思えんな

646 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 00:03:33.81 ID:3DcpczOy0.net]
スクリプトとしては異常に使いにくいよ、
特にアプリのプラグインとしては致命的。
やったことあるひとならわかるよね。

スクリプトだろうと1回実行したら、そのクラス型は解放されないから。
.netは型生成してしまうと、そのクラス型は基本的にアプリ終わるまで解放されない、
間違ったと思ってクラス型の部分のスクリプト変更して再実行しても反映できないのよ、アプリ終了しないと
クラス型が解放されないから。



647 名前:デフォルトの名無しさん [2022/01/12(水) 04:14:45.93 ID:qMg3RrrS0.net]
コンパクトに書けるようになっていくのはいいと思う
元のC#は長く書くことを是としていたようで他の言語と比べると見栄えが悪い

648 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 10:32:03.61 ID:2Wvp4VJl0.net]
C#はいいんだけど、ASP他諸々がなあ
Authorize入れるのも一苦労

649 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 13:15:42.75 ID:++K/dCbX0.net]
何に比べてどう苦労するの?

650 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 15:39:18.51 ID:BLJCWDpKa.net]
>>636
作り方しだいだけどアプリ終了しなくても
スクリプト実行&終了→スクリプトファイル書き換え→スクリプト実行で書き換えた編集が反映されるよ
開放されないってのと反映されないってのは別問題でしょ

651 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 18:17:31.66 ID:C1xp3kdWM.net]
おれはC#とASP.NET Core WebAPIが最もやりやすい
フロントは流石にReactとか使ったほうが楽だがJSもAltJSも罠だらけで洗練されてないね

652 名前:デフォルトの名無しさん mailto:sage [2022/01/12(水) 22:52:04.20 ID:JXqJfbQh0.net]
>>636
まさにクラスを書き換えて実行するのをやってるけど
そんな現象に出くわしたことがないぞ?

653 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 06:18:56.80 ID:hEm3mWj0M.net]
>>642
糞アプリの名前も書けない無能の相手すんなよ

654 名前:デフォルトの名無しさん [2022/01/13(木) 18:48:22.57 ID:OK31jUfcd.net]
質問です。
ピクチャーボックスに描画された物をボタン投下で色を印刷用に変更したいです。
元は背景色黒。線は水色。文字は黄色。四角は緑色塗りされてる物を
背景色白、四角は外枠黒線白塗り、他黒に変更したいです。

これを参考に弄って、背景色は直変更し、線は無事変更、文字は滲んだ感じになり、ほかはそのままでした。
https://dobon.net/vb/dotnet/graphics/setremaptable.html

こんなのやるなら色を再設定して再描画した方が早いですかね?
イメージ的にはCADで書いてる物を印刷時に白黒反転するみたいな感じなんですが。

655 名前:デフォルトの名無しさん mailto:sage [2022/01/13(木) 19:01:26.19 ID:Lka/sttda.net]
>>644
印刷の品質の観点から言っても「ビットマップを流用する」
という発想自体が不適切で、「描画処理を流用する」べきでしょうね。

656 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 07:06:02.10 ID:uASM5+QH0.net]
.net 6の Windows Forms の TreeView のサブクラスを作ったのですが、
サブクラスでOnMouseDownをオーバーライドすると動くのに、OnMouseClickをオーバーライドしても動きません。
何が原因でしょうか?



657 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 09:52:38.44 ID:Wn0kK1te0.net]
そもそもTreeViewのMouseClickはノードのある行の部分しか発生しないけど
ノード上でクリックしても反応しないの?

658 名前:デフォルトの名無しさん mailto:sage [2022/01/14(金) 23:45:25.88 ID:8g6TvuWW0.net]
こういう実装の隠蔽ってありだと思う?
https://ideone.com/XNNgQM

リポジトリクラスでしか使わないキークラスを外部から勝手に生成されたくないっていう着想なんだが、
特定のクラスからのみメソッド叩かせたいときとかにも使えそうな気はする
雁字搦め感は出てるし、将来の健忘症になった俺が手を付けてしまう恐れも減るしでメリットはある
ただぶっちゃけちまうとinternalで十分では?と他でもない俺自身が思ってしまった

659 名前:デフォルトの名無しさん [2022/01/15(土) 00:11:45.90 ID:TZiSYT8I0.net]
質問させてください

using System.Collections.Generic;

class TestEnumerable
{
static public Ienumerable FromTo()
{
yield return 1;
yield return 3.14;
}

static void Main(string[] args)
{
foreach(var I in FromTo())
{
Console.Write(I);
}
}
}

上記のようなコードがあった場合
yield return1を表示、続きから実行されて
yield return3.14を表示すると思うのですが
そのあと、メソッドが終了した場合の処理がイメージできません

FromTo()メソッドが終了した後は何か値がreturnされるのでしょうか?
FromTo()メソッド終了時の挙動の詳細を教えてほしいです

660 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 00:15:49.41 ID:Fo59HrKfa.net]
CreateProxyをpublicにしないとエラーになるんじゃないかな

661 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 00:20:28.44 ID:dZ7wz90eM.net]
yieldを使ってるメソッドの末尾には
「yield break」が暗黙のうちに挿入される、みたいなイメージをもっておけばいいんじゃないかな

662 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 00:35:37.46 ID:RH/JKl1ia.net]
>>650
そんなページ開いたらダイレクトに書いてあることを指摘されたいわけじゃないんだ
ニュアンス通じれば良いかなって思いながらも一応直したんだけど張るURLを間違えたんだよ

663 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:00:14.09 ID:e/r7AWqZ0.net]
は?

664 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:05:14.25 ID:mkRG7Oi7a.net]
>>649
メソッドのシグネチャのみたまんま
FromToはIEnumerableを返すのであって1とか3.14を返すんじゃない。

何言ってるのか理解できなかったら川俣さんの記事のイテレーターの
説明でも読んでもらった方が早いよ。

665 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:10:18.60 ID:JIhdD5Fq0.net]
>>648
キークラスから派生してリポジトリクラスって構造が変
駄目な継承の使い方だと思う

666 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:25:11.79 ID:z3QAlxXC0.net]
>>655
キー生成クラスだぞ?

本来リポジトリ内部で生成するものなのに基底に置いては駄目とは何ぞ



667 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:43:23.33 ID:JIhdD5Fq0.net]
>>656
この場合は継承(is-a)ではなく包含(has-a)にすべき

668 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 01:57:04.48 ID:mkRG7Oi7a.net]
>>648
VBは確か型Bが型Aの内側で定義されている時、
BのインスタンスをAが握っているとBのprivateメンバーに
アクセスできる裏技があった気がしたんでVBならそれを使う手はあったかも。

試してみたらやはりC#ではできないw

669 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 02:01:13.57 ID:mkRG7Oi7a.net]
まあセキリティー的な目的じゃなく単なる精神衛生の問題なら
単純にKeyのコンストラクタをprivateにして必要な個所ではリフレクションで使えばいいよね

670 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 02:49:41.70 ID:mkRG7Oi7a.net]
「早い者勝ち」にしちゃうのもありかなとか思った。いやねーかw
public class Key
{
  public int Value { get; private set; }
  private static int serial = 0;
  private static Func<Key> func = () => new Key(serial++);

  private Key(int val)
  {
    Value = val;
  }

  public static Func<Key> GetCreator()
  {
    var ret = func; func = null;
    return func;
  }
}

671 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 03:06:56.37 ID:ccrjJyGq0.net]
>>649
関数内にyield returnがあったらイテレータブロック扱いになって普通の関数じゃなくなる

IEnumerable<T>の約束通り、Tの要素を返してって終端がきたらおわり

672 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 11:19:56.44 ID:6qmp/Z4R0.net]
>>649
FromTo()が返すのはIEnumerable

foreachは大雑把に言えば↓に展開される
var iterator = FromTo().GetEnumerator();
while (iterator.MoveNext()){
var I = iterator.Current;
Console.WriteLine(I);
}

イテレータとかイテラブルでググるといい
.NETの型名だとIEnumrator<T>とIEnumerable<T>

673 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 12:29:33.15 ID:mY1vrnaaM.net]
>>651 有能
>>654,662 無能、聞きたいのはお前のチンケな知識じゃねーよ

674 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 13:44:23.87 ID:agiarv77a.net]
>>663
馬鹿だねこいつw
質問した人と別人みたいだけど

675 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 14:20:07.42 ID:XKyr/S8qM.net]
馬鹿としか言えない無能w

676 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 14:24:42.58 ID:6Adwrh4F0.net]
今週のNDワッチョイ
ドコグロ MM4f-KcIn



677 名前:デフォルトの名無しさん [2022/01/15(土) 14:48:33.55 ID:6bjOtxZz0.net]
WindowFormでTimerクラスを使ってlabelのTextを定期的に変更したのですが
「有効ではないスレッド間の操作」ということでエラーになってしまいます。
どのようにすれば実現できるでしょうか?

public Form1()
{
InitializeComponent();

var timer = new System.Timers.Timer();
timer.Elapsed += new ElapsedEventHandler(OnElapsed_TimersTimer);
timer.Interval = 5000;

timer.Start();
}

private void OnElapsed_TimersTimer(object sender, ElapsedEventArgs e)
{
label1.Text = "1";
}

678 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 14:53:57.88 ID:OfoSB/Yx0.net]
>>667
Timerには何種類かあって
WinFormsならSystem.Windows.Forms.Timerクラスを使うのが簡単

679 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 14:56:31.51 ID:2bsBwYtoa.net]
スレッド間の〜は
Invoke((MethodInvoker)delegate{処理});
ってやればわんちゃん

680 名前:デフォルトの名無しさん [2022/01/15(土) 16:08:48.34 ID:6bjOtxZz0.net]
Windows.Forms.Timerクラスでやりたいことができました!
後学のため、Invokeも調べたいと思います
ありがとうございます

681 名前:デフォルトの名無しさん mailto:sage [2022/01/15(土) 20:02:17.15 ID:XKyr/S8qM.net]
>>666
黙ってNGできない無能w

682 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 04:00:49.97 ID:az6Mfsfa0.net]
OpenCVSharp入れたらexeのフォルダがdllだらけになったんですが、
これ全部リリースの時にこのまま一緒に渡さないといけないんですか?
exe1個にまとめられないんですか?

683 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 07:00:20.21 ID:DVPU1vQA0.net]
>>672
単一ファイルの配置と実行可能ファイル
https://docs.microsoft.com/ja-jp/dotnet/core/deploying/single-file

684 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 10:03:18.59 ID:gWCKJdmK0.net]
ネイティブじゃね?

685 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 10:19:22.15 ID:1ZlPRUHva.net]
インストーラーのexeひとつ渡せばおk

686 名前:漆黒の翼 mailto:sage [2022/01/16(日) 20:01:08.59 ID:VfeV/Qg80.net]
教えていただきたいのですがWindowsでc#のプログラムが落ちた時にメモリダンプを吐くようにするにはどうすればいいのでしょうか?

よろしくお願いいたします



687 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:14:28.43 ID:8g0F/aL60.net]
メモリダンプ吐くと何かわかるん?

688 名前:漆黒の翼 mailto:sage [2022/01/16(日) 20:18:34.35 ID:VfeV/Qg80.net]
>>677
メモリダンプをvisual studioに食わせるといろいろ分かります!!

689 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:19:29.37 ID:el47HiNu0.net]
メモリダンプを解析できない人たちのスレですよ、ここは。

690 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:22:15.01 ID:F2RYBHf20.net]
明らかに"初心者用"の範疇を超えているよね

691 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:34:12.82 ID:T486FPBl0.net]
C#でゲロ吐く方法はしらん
Windows Error Reportingで取得するはずなので、呼び出せば行けるかもしれない

692 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:41:28.24 ID:X0X6y0PK0.net]
先輩社員から「まずはメモリダンプとって調べてみろよ」と無理難題言われたとか

693 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 20:47:08.84 ID:el47HiNu0.net]
Drワトソンって解雇されてたのか。

694 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 21:01:51.64 ID:uYZKVP770.net]
メモリダンプを見ると
変数とかスタックとの内容がじかにわかるので
デバグの助けになるかもしれない
そこまで必要になることは珍しいけど

695 名前:デフォルトの名無しさん [2022/01/16(日) 21:18:19.12 ID:VfeV/Qg80.net]
>>677
ダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティング - Grani Engineering Blog
の説明読むとどういうことがわかるかわかります

696 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 21:38:53.48 ID:zIpkfF6j0.net]
>ダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティング

読んでみたけど支離滅裂な記事だった
でもメモリダンプ吐くよう設定する方法はちゃんと書いてたぞ



697 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 21:40:20.63 ID:P0LzLgpAM.net]
>>683
出世して Watson Server として MS で働いてます

698 名前:デフォルトの名無しさん [2022/01/16(日) 21:42:20.27 ID:VfeV/Qg80.net]
https://docs.microsoft.com/ja-jp/dotnet/core/diagnostics/dumps
ここ読むと環境変数だけでいけそうだができませんです

699 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:06:33.35 ID:aMgjkUSV0.net]
C#でメモリダンプが必要って、C#の利点捨てまくったクセの強い作りしてるんちゃうか
UnsafeゴリゴリとかそれC#で作る意味あるのっていう

700 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:08:28.63 ID:8g0F/aL60.net]
>>686
書くやつも書くやつなら読むやつも読むやつってことだな

701 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:17:34.06 ID:8g0F/aL60.net]
まあ、そんなもん調べても結局使ってるライブラリがタコでしたなんて可能性もあるし
それより先にやることあんじゃねーの?
的な

702 名前:デフォルトの名無しさん [2022/01/16(日) 22:20:42.02 ID:VfeV/Qg80.net]
長時間連続運転するプログラムなんだけど、ちょっとずつメモリ使用料が増えていくななんて
時はメモリダンプ一択だと思うんだが・・・

というかID:8g0F/aL60さんはC#のメモリダンプ何回くらい使った経験あるの?
ゴミクズのような経験から導かれた結論は、やっぱりゴ

703 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:24:55.74 ID:el47HiNu0.net]
例外機構が当たり前になった今ではアプリ内でcatchするだけですからね。
仮にテストですり抜けてもcatchしたらエラーログに吐けよと。

今ではWinDbgでカーネルダンプ解析するぐらいかな。

704 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:27:14.39 ID:el47HiNu0.net]
C#はガベコレあるからメモリリーク気にしないでいいって後輩が言ってました!!!

705 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 22:41:54.12 ID:RG8YDX1E0.net]
少しずつメモリ使用料が増えていくとか、

Ruby みたいに、世代別GC を使っていたら、
古世代は閾値を越えるまで実行されないかも知れないし、

さらに、メモリ領域が大きいと、閾値もかなり大きいだろうし、なかなか実行されない

706 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:17:44.09 ID:8g0F/aL60.net]
>>692
正直ないね
無駄だから
c#でリークの対応なんて無駄
精々頑張った挙げ句にウチの会社が組んだところじゃない箇所でリークしてて対応できません
みたいな事実がわかるだけ

まず、c#みたいな
厳密なメモリ管理ができない言語での
組み方を学ぶべき
3日に一度再起動するとか
機能毎にモジュール化して動かすたびに破棄するとかな
廃棄したらガベコレ適当に実行してりゃOSが片付けてくれるだろ



707 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:31:50.74 ID:I0k7QK8La.net]
何のお役にも立てんけど、「メモリ使用料」って結構じわるねwww

まあマネージドなユーザーコードでリークが発生する原因は限られてるし、
ユーザーコードじゃないならどうしようもないし、ブル中野みたいな大鉈振るう必要って
確かにあるのかなという気はする

708 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:40:43.96 ID:zIpkfF6j0.net]
>>692
メモリ使用量が増えるならまずはプロファイラーじゃないか?

709 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:42:20.42 ID:zIpkfF6j0.net]
C#でも断続的に性能が極端に悪化する問題みたいなのが発生したときに
性能悪化したタイミングでダンプ吐かせると糸口がつかめたりする

そういうのはだいたい.NET Frameworkとか下位の部分が原因だけど
原因が明確になれば回避策が取れる

710 名前:デフォルトの名無しさん mailto:sage [2022/01/16(日) 23:44:56.33 ID:8g0F/aL60.net]
>>699
それもうガチでわかんねーときの最後の手段で
まずはデバッガで見てみるべきじゃね?
最近は結構いい機能が付いてる
VC6の時代とは違う

711 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 00:12:14.01 ID:BWxacq0R0.net]
C#でのリークは大抵長寿命のeventに+=してるだけでしょ

712 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 07:41:52.27 ID:MbNkwuBfa.net]
GDIなどのシステムリソースの解放忘れとか

713 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 09:30:07.53 ID:9uEhEVX70.net]
リリースの特殊な(?)解放方法なんて半ば作ったやつの趣味だからな
可能であれば別モジュールにしてキックして終わりがいい
個人製作的な(会社内であっても)ライブラリだとusingのdispose実装忘れはよくある
信じて使うと後ろからバッサリだ

714 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 10:45:22.36 ID:TWhgTM4G0.net]
もう半年以上起動しぱなっしの.NET5で作ったスクレイピンクツールあるけど25mbで安定してるな

715 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 12:44:47.10 ID:DKJy6PH50.net]
>>704
25ミリバールって気圧かよw

716 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 13:14:05.94 ID:U4Fph ]
[ここ壊れてます]



717 名前:VWG0.net mailto: ミリビットだろ、この板なんだから []
[ここ壊れてます]

718 名前:デフォルトの名無しさん [2022/01/17(月) 13:15:12.00 ID:XdTy16+8M.net]
ミリバールって昭和かよ

719 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 13:45:40.07 ID:McAG9Ljja.net]
マネージドな世界で閉じている限り、Disposeの実装ミスや呼び出しの忘れは
リークの原因には普通はならないと思うけどね。
単にリソースの解放が逐次的でなくなるだけ。

720 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 13:52:14.45 ID:NIAK/ICvM.net]
>>708
Disposeが呼ばれたらstaticなイベントからハンドラを削除するような実装は低品質なライブラリなんかだとたまに見かける

721 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 14:02:14.57 ID:s/zLKX0LM.net]
>>708
> GDIなどのシステムリソースの解放忘れとか
の話の流れで
> マネージドな世界で閉じている限り
とか頭おかしいのか?

722 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 14:05:18.68 ID:McAG9Ljja.net]
>>710
頭がおかしいのは君の方

普通のプログラマはマネージドなライブラリを挟んで
間接的にGDIのリソースを利用するんであって直接使ったりしないの

だからライブラリのコードにバグがない限りGDIを間接的に
利用しているからといってリークの原因にはならないんだよ

723 名前:デフォルトの名無しさん [2022/01/17(月) 14:10:54.78 ID:McAG9Ljja.net]
ついでに言えば、俺は別に>>702に反論したわけじゃないw
すごい被害妄想だよねw
ネトウヨさんじゃねえのw

724 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 14:26:56.43 ID:ly062VWjM.net]
普通のプログラマw
無能の言い訳に多用されてて笑う

725 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 14:40:41.16 ID:IUPVmsWca.net]
理想のマネージドだったらdisposeなんて関係ないし、メモリリークなんて起きない
でもc#は理想のマネージドじゃないんだよ・・・

726 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 15:20:30.64 ID:C2NpqJUJM.net]
ゲロみたいな話題で盛り上がってんなあ



727 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 17:33:38.89 ID:0pf4TYua0.net]
っぱRustよ

728 名前:デフォルトの名無しさん mailto:sage [2022/01/17(月) 19:32:54.18 ID:rqpdgGXW0.net]
mb ミリビットもジワるwww

729 名前:デフォルトの名無しさん [2022/01/18(火) 09:23:03.79 ID:HVobsaMl0.net]
低レベルな質問で恐縮です。VisualStudioを使っています。
やりたいことは、定期的に更新されるcsvからデータを取得しDataGridViewに表示させたいです。
(つまり、DataGridViewでリアルタイムに更新されているように見せたい)
取得・更新することはできたのですが、更新時にソート状態が解除されて困っています。
DataTable・DataSet・DataSource・データバインドなどのキーワードを見つけて調べているのですが、理解力が乏しく解決できていません。
こんな方法があるよと、ヒントになる助言をいただけたらありがたいです。
よろしくお願いします。

730 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 10:13:54.13 ID:Tap2eyJjM.net]
>>718
DataGridViewのSort順を復元するだけでは?

731 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 10:18:04.98 ID:jhcMMPao0.net]
・DataGridViewにどうデータをセットしているか、どう更新しているか
・どうソートさせているか
・ソート状態が解除というのは結局どういう状況になっているのか
を具体的に

732 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 11:36:28.39 ID:HVobsaMl0.net]
反応ありがとうございます。
>>719
更新前にソートされている列を取得して、更新後に強制ソートする
という感じですね。試してみます。

>>720
>DataGridViewにどうデータをセットしているか
 今の状態は、あるサイトにのっていたコードをコピペして試しています。
//フォームデザイン
//csvデータ:person_read.csv
//button4のソース
 ソースコードはこちら ttps://dotnetfiddle.net/i89pR3
///////////////////////////////////

733 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 11:37:01.32 ID:HVobsaMl0.net]
>・どう更新しているか
 button4を押すたびにcsvからデータを更新しています(実現したらtimerで自動更新に変更予定)
>・どうソートさせているか
>・ソート状態が解除というのは結局どういう状況になっているのか
 button4クリック→初期状態(csv並び順)
 GUIのdataGridViewの任意の列(

734 名前:痰ヲば年齢)をクリックしソート
  1,山田,25
  3,鈴木,28
  2,佐藤,30
  4,山田,46
 csvに 5,田中,37 が追加される
 button4クリックで更新
 csvの並びに戻る(希望はこの順で表示させたい)
  1,山田,25 → (1,山田,25)
  2,佐藤,30 → (3,鈴木,28)
  3,鈴木,28 → (2,佐藤,30)
  4,山田,46 → (5,田中,37)
  5,田中,37 → (4,山田,46)
以上です。
[]
[ここ壊れてます]

735 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 11:43:01.00 ID:HVobsaMl0.net]
リンクが404になっていたので貼り直しします。
これで大丈夫か心配ですが。
https://dotnetfiddle.net/ulZ3M9

736 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 13:08:53.17 ID:jhcMMPao0.net]
DataTableの場合ソート順は
dataTable.DefaultView.Sort
に文字列で格納されるからこれを使えばいい



737 名前:デフォルトの名無しさん [2022/01/18(火) 13:20:14.01 ID:k1mhP8XB0.net]
C#で正規表現のperlでの「tr」と同じ事をしたいのですが、
Regexクラスにそれっぽいのがありません。
何か方法はありませんでしょうか?

738 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 13:29:49.03 ID:pQS/rHaxa.net]
trは置換なのか?だったらc# regex 置換とかでぐぐりゃ方法出るだろ
痴漢じゃないなら知らない

739 名前:デフォルトの名無しさん [2022/01/18(火) 13:41:14.96 ID:k1mhP8XB0.net]
置換ではあるのですが、
pattern [a-z]
replacement [a-z]
とすると半角英字が全角英字に変換されるといった感じです

740 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 13:52:43.16 ID:pQS/rHaxa.net]
正規表現でマッチした位置とマッチした文字列を取り出すのはできる
正規表現関係なく文字列を全部変換するってならできる
これを組み合わせて自分でやるしかないんじゃない?

741 名前:デフォルトの名無しさん [2022/01/18(火) 13:54:14.42 ID:9szJ9jA+0.net]
Regex.Replace(mojiretsu, "[a-zA-Z]", p => ((char)(p.Value[0] - 'a' + 'a')).ToString());
動確はしてない。

742 名前:デフォルトの名無しさん [2022/01/18(火) 14:04:35.01 ID:k1mhP8XB0.net]
なるほど、やはりないですか
ありがとうございました

743 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 18:17:30.27 ID:UqX3jEvG0.net]
全角半角ならVB.NetのStrConv使えばいいじゃね

744 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 18:27:21.22 ID:80llBYJsr.net]
c#って全角半角変換でまともなメソッド用意してないよな

745 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 18:49:27.58 ID:HVobsaMl0.net]
>>718です。
.SortedColumn で現在のソート選択列を取得
ListSortDirection で昇順・降順の状態を取得
データ更新後、.Sort で更新前のソート状態を復元することができました。

>>719さん>>724さんヒントをありがとうございます。
>>720さん、気にかけていただいてありがとうございます。
また何かあればよろしくお願いします。

746 名前:デフォルトの名無しさん [2022/01/18(火) 19:17:27.38 ID:DZmAMHWt0.net]
>>732
C#の言語仕様にそんなのあるわけないだろうが
頭がおかしいのかな?



747 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 19:30:02.02 ID:uGAsykz90.net]
.NETのことだろ。
あれ本当に不便。

748 名前:デフォルトの名無しさん mailto:sage [2022/01/18(火) 19:44:39.78 ID:g9d5Z42+a.net]
全角無視した比較はあるんだから変換もあればいいのにな
.net6はいたるとこでCultureInfo受け取れるようになってるから、オリジナルCultureInfo作ってやればtolowerなんかはできそう

749 名前:デフォルトの名無しさん mailto:sage [2022/01/19(水) 04:15:15.58 ID:4BL/bkWB0.net]
nuget辺りに.net言語で使える漢字処理モジュールみたいのないの

750 名前:デフォルトの名無しさん [2022/01/19(水) 13:57:55.37 ID:b1tRS/0c0.net]
あの、Asp.netMVCでサイトを作ったんですが、
robots.txtって
Global.asaxと同じ場所もしくはViews\Layout.cshtmlと同じ場所
のどっちに置けばいいんでしょうか?

751 名前:デフォルトの名無しさん [2022/01/19(水) 22:04:21.46 ID:67zDZ4RH0.net]
WebProgという板があるからそっち言ってみれば?

752 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 08:59:26.49 ID:fgAfnzipM.net]
>>738
デプロイしてみればわかる話を

753 名前:、何故聞いてしまうのか? []
[ここ壊れてます]

754 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 10:11:03.18 ID:8HL1zORE0.net]
めんどいじゃん
ネットでクダ巻いてるゴミが代わりに試して教えてくれれば儲けもんだろう?

755 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 12:57:10.80 ID:MJ6I7RR7r.net]
おっ、そうだな

756 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 14:46:47.86 ID:n7chvAG30.net]
>>741
うそを教えられるという可能性は考えないのか?



757 名前:デフォルトの名無しさん mailto:sage [2022/01/20(木) 18:34:05.33 ID:NL1fx3HA0.net]
すでにサイト作ってる段階なら、掲示板で聞くより自分で試すほうが早いと思うんだがなぁ

758 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 00:57:35.59 ID:yyC8EMRk0.net]
共変と反変という言葉がよく分かりません
アップキャスト/ダウンキャストと何が違うんでしょうか?

759 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 02:01:57.32 ID:r2dC59Vr0.net]
class B{}
class C:B{}
class D:C{}
static D Function(B b){ return new D();}

Func<C,C> fp = Function;

Functionの返り値DはCの派生クラスだから返り値CのFunc扱いしても大丈夫だよねってのが共変
Functionの引数BはCのベースクラスだから引数CのFunc扱いしても大丈夫だよねってのが反変

両方ともアップキャスト(asがいらない)が約束されてるから許される

760 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 04:17:33.74 ID:9FYmM/Q0a.net]
ハロウィンの子供にチョコレートを渡せることが反変で
チョコレート工場をお菓子工場とみなせることが共変ってことか

761 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 08:32:03.92 ID:kufT2hajr.net]
よく理解できるね
これを理解したとしても他人がコードを読むの大変だよね
コメントに書いておくものなの?

762 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 10:57:27.37 ID:r8LIAXWEM.net]
c#自体にそういう機能があるので楽だねって感じ
うまくいかない場合は何か思い違いしてる

763 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 22:48:46.71 ID:0wwLw+zrM.net]
>>746-747
めちゃくちゃ分かりやすいです
ありがとうございました

764 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 22:52:58.30 ID:DQ1OUxKV0.net]
なにこれ
もしかしてnullになるかもしれんやつは片っ端から?つけなきゃいけなくなったの??

765 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 23:17:35.13 ID:Yoc43dCB0.net]
そうだぞ

766 名前:デフォルトの名無しさん mailto:sage [2022/01/21(金) 23:37:35.61 ID:DQ1OUxKV0.net]
なんか俺かっぺになった気分だべ・・・



767 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 01:35:08.87 ID:xgyvtLBZ0.net]
nullチェックをコンパイラが管理するやつだから慣れれば神機能

768 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 06:49:46.16 ID:sQZaaq50M.net]
参照前に必ずnullチェックというコーディング規約から解放される?

769 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 07:48:24.01 ID:dpfIrrzB0.net]
なわきゃあない

770 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 08:36:39.06 ID:odBVOzqN0.net]
on/offを行単位で切り替えられるから混乱すると思う

771 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 09:30:40.13 ID:AMYiKIMXM.net]
行単位でそんな事する奴はすでに混乱してるだろw

772 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 09:57:57.24 ID:dGbyTm5r0.net]
何が利点なんだろうネ?(笑)

773 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:16:46.92 ID:z2LDxi9+M.net]
まあ利点がわからないなら君は今のままでいいんじゃね?

774 名前:デフォルトの名無しさん [2022/01/22(土) 10:35:14.93 ID:tP9M/cw30.net]
5年ぶりに.Netで作ることになったんだけど、.Net Frameworkってオワコンなの?
Coreとか出てきてさらに.Netに統合されるとか混沌としてて何が今の最適解なのか解らない。
どうせ作るなら今の最適で作りたいからお聞かせ願いたい。
つかWPFって普及前に死んだ感じ?

775 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 10:40:46.17 ID:om6KWGu40.net]
.NET FrameworkはオワコンだけどWindowsに標準で入ってるのでWindowsユーザー視点だと一番有難い
WPFもWinFormsのWindowsであれば現役

776 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 11:13:26.21 ID:dGbyTm5r0.net]
.netもオワコンだが
WPFもオワコンなので
代わりがない状態
他のはもっと過疎ってて
.netやWPFより更に消えやすい感じ
なので何もオススメできない状態



777 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 11:41:22.99 ID:cBfIrJY2a.net]
オワコンっても単なる流行の話だからな中身はオワコンでもない

.NET Framework 4.8
.NET6
今選ぶならこのどちらか。どっちも長期サポートになってるはず
表面的にはどっち選んでも同じ。昔の記憶が残ってるなら4.8使った方がスムーズに扱える

UIは色々増えてるけどwinだけならWinFormsが無難

778 名前:デフォルトの名無しさん [2022/01/22(土) 11:45:58.45 ID:tP9M/cw30.net]
>なので何もオススメできない状態
調べる限り、今はコレってのが無いんだよね。
WPFも生き腐れしてるみたいなので、
無難なWindowFormsと.Net Framework4.6.Xで良いやって思ってます。
ぬるぬるUIによる快感性はiOSに任せようと。

779 名前:デフォルトの名無しさん [2022/01/22(土) 11:49:15.98 ID:tP9M/cw30.net]
>.NET Framework 4.8
ユーザーのコンピュータには.NET Framework 4.6が入ってるので
5年程度を稼働を目安にすると.NET Framework 4.6のが導入のハードルが
低くて良いなと思うのですが、.NET Framework 4.8のが何か優れてるんですかね?
純粋にサポートの長さかな。

780 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 12:08:19.50 ID:cBfIrJY2a.net]
4.6だと今年でサポート終了かな
サポート気にしないなら・・4.xの差で機能的にはほとんど変わってないから何使っても同じ
ただちょこちょこソースコードの書き方が追加されてる(変更じゃなくて追加だから昔の書き方で問題起きない)
ぐぐってソースコードコピペしたときに新しい書式のソースコードだと思わぬエラーがでて困るかもしれないって程度
わざわざ古いの選ぶ意味もないけど、新しいの入れるのが面倒なら古いままでもいいんじゃないって程度だよ

781 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 12:11:29.47 ID:63g4vstfM.net]
基本的には.NET6を選べばいい
既存システムのメンテナンス・マイグレーションなら資産状況次第だけどFW48の方が低リスクで間違いない
ランタイムのサポート期間は意外にもFW48の方が長い
でも開発環境のサポート期間はわからない

782 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:06:27.03 ID:MOxbGC/+0.net]
最近は4Kとか高解像度ディスプレイ対応(スケーリング対応)が必要になって来たせいか
WPFを使ってる所が前よりは増えた印象
他に良いのが無いから消去法で採用って感じ何だろうけど

783 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:10:19.88 ID:MOxbGC/+0.net]
>>766
スケーリング対応は4.8の方が改良されてる
もっと言えば.NET6の方が進んでるけど

784 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:16:37.15 ID:+eWEN8w/0.net]
WPFでもMVVMを考えなくてもWinFormsと同じように使えるし、スケーリング対応が楽なのはいいよね

あと最近のWindows10は標準で4.8が入ってなかったっけ?

785 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:25:41.09 ID:i+EsaIAtd.net]
サポート期間を気にするなら.NET6は問題外だよ
なんと2024年にサポート切れ

786 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 13:36:54.52 ID:63g4vstfM.net]
十分だよ
.NETは互換性が高いから.NET8への移行も苦労はせんだろう
他の言語と比べたら天国だ



787 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:04:30.15 ID:MOxbGC/+0.net]
>>771
WinFormsの*.Designer.csと*.resxから解放されるのも大きいね
差分を見たりマージするのに問題あり過ぎた

Windows10はMay 2019 Update(1903)から標準で4.8が入ってる
現在サポート中のバージョンは全部4.8が入ってるね

788 名前:デフォルトの名無しさん [2022/01/22(土) 14:08:40.62 ID:gJEoCqwv0.net]
今の最適で作りたいなら.NET 6/WPFだな

789 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:33:41.83 ID:KL4k8E210.net]
.NET Frameworkは最終版の4.8でもC#7.3までの対応
C#8.0は.NET Core 3
C#9.0は.NET 5
C#10.0は.NET 6

C#のバージョンを上げるなら.NETも移行せざるを得ない

790 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:35:53.77 ID:nTnTl9DUr.net]
わかりました、Mauiで頑張る

791 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:44:13.78 ID:Ii2fD9R0a.net]
WPFの方が高DPI(高「解像度」では必ずしもないよね)対応が優れているっていうのは
DPIが異なる複数のディスプレイ間をウィンドウが行ったり来たりするような状況を想定した話?

792 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 14:49:58.72 ID:ARjVXSY1M.net]
WPFってWebみたいに解像度に合わせて画像切り替えるとか標準じゃできないだろ?
HDPI対応が優れているとか片腹痛い

793 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 15:19:51.12 ID:EyuzyEvM0.net]
俺社環だと2012R2なんで4.5.1なんだよな
サポート外だからさっさと4.6移行に切り替えたいけど、不具合出てないから誰もやりたくないという

794 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 16:54:28.58 ID:1FaTcT0G0.net]
>>779
そんなもん解像度は取得できるしなんとでもやりようあるやろ

つうデスクトップGUIアプリに求めることかそれ?
どんなシチュエーションで必要なのかわからん

795 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 18:01:32.84 ID:dpfIrrzB0.net]
想像力が無いだけだなあ

796 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 18:55:07.04 ID:Hnp3kh2k0.net]
>>780
誰もやりたがらないけど、OS のサポート切れが迫ってきて対応中。w
いまさらその上で動いてるオレ様ソフトのインストールの手順とか覚えてないんだけどなあ。



797 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:41:02.79 ID:DSkywrpw0.net]
ドキュメントは残しておけよw

798 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:49:34.26 ID:vcUHcBQYM.net]
昔自分用に作った(家で自分の時間を使って)アプリがあって退職時に無理やり引き継ぎさせられて勝手に使われてる
PC壊れたときに連絡あってアプリを送った思い出…

799 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 19:51:39.05 ID:vcUHcBQYM.net]
毎日使うものなので劇的に工数が減った
あくまでも自分用

それを恨みこそすれ感謝してない元会社がタダでずっと使ってる

800 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:17:29.45 ID:9EvEVFCn0.net]
Main内
Test t = new Test();
t.Num = 1;
t.Add(10);
Console.Write(t.Num);

class Test
{
 public int Num {get; set;}
 public int Add(int p)
 {
  return Num + p;
 }
}

これで出力が1になるのは何故なのでしょう?11になると思うのですが…

801 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:22:02.32 ID:vcUHcBQYM.net]
return Num + p;
これは足したものを返してるだけで
Num自体に変更をかけていないからな

Num = Num + p;
return Num;
ならわかる

802 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 21:37:34.36 ID:9EvEVFCn0.net]
あ、、、確かに。納得しました。
ありがとうございました

803 名前:デフォルトの名無しさん mailto:sage [2022/01/22(土) 23:20:32.09 ID:mmM8IstB0.net]
いえいえ

804 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 14:44:30.58 ID:is+XSiL/0.net]
すみません、初心者で何からしたら良いのか、何をすべきなのか分からなくて助けてください。

計算アプリを作らなければならず、調べてなんとかボタン配置とかはできたのですが、プログラミングが何をどういった順番でするのか分からなくて…

計算は
固定数字÷ボタン入力した数字(+必要に応じて選択した数字)×ドロップダウンで選択した数字

これを出来るようにしたいのですが、やるべきことは
@ボタンとドロップダウンの紐付け?認識?
A入力した数字の表示
B()の条件付け
C計算結果の表示
これで大丈夫でしょうか?

うまく質問できず、申し訳ありません。
今までプログラミングに触れたことが無く、必要情報が不足していましたら追加致します。

805 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:13:55.20 ID:XkFSmW1wd.net]
今期の単位は諦めましょう

806 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:15:05.76 ID:Wu5qqWWYa.net]
ボタン押したらボタンに対応した値を表示する(固定値で割らなくておk)
それができたら、次は固定値で割った結果を表示するように修正
それができたら、次はドロップダウンの選択が変わったことを知る方法と選択された値を取得する方法調べる
それがわかったら、ドロップダウンの値を掛けた結果を表示できるように修正
それができたら、どんな条件でこういう計算するって条件別け
かな?



807 名前:デフォルトの名無しさん [2022/01/23(日) 15:16:44.75 ID:CCpFlBt8M.net]
それを決めたら他の人がコードを書いてくれるのか?

それならマルナゲをオススメ

808 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:20:46.99 ID:is+XSiL/0.net]
>>793
ありがとうございます!

直ぐにやってみます。
やるべきことを分かりやすく教えて頂き、本当にありがとうございます。

809 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 15:30:22.12 ID:is+XSiL/0.net]
>>794
いえ、コードも私が書かなければなりません。
丸投げする相手が居ないです…

810 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:04:59.40 ID:nwzKJ0xW0.net]
ひっでえ課題
そんなもんが何の足しになるんや

811 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:47:07.31 ID:is+XSiL/0.net]
やっと、数字の表示ができました……
何故か一桁しか表示されなくて、次の数字押したら上書きされるけど、表示はできました…


何のたしになるかは分からないです…

曰く『コロナ禍だけど、この機会に家で出来きることをしよう!』って事らしいです。

812 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 19:48:24.39 ID:is+XSiL/0.net]
投稿が重複してしまいました、誠に申し訳ありません。

813 名前:デフォルトの名無しさん mailto:sage [2022/01/23(日) 23:26:33.12 ID:pR5ferbX0.net]
メンバー'hoge' はインスタンスデータにアクセスしないため、static にマークできます

814 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 12:21:02.64 ID:bXxRLmwJ0.net]
四角をグラフィックに描画する場合の座標について
g.DrawRectangle(pen, 始点x座標,始点y座標,幅,高さ);
このようにあります

ならば幅が2,2の場合
g.DrawRectangle(pen, 16, 16, 2, 2);
これで(16,16)-(17,17)で2ドットだけの中抜きがないものを想像するのですが
実際は
(16,16)-(18,18)の中央に穴がある状態の四角が描画されるようです
これは3,3指定なら理解できるんですが
幅指定なのになぜこのようになってしまうのでしょうか?

815 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 12:39:27.95 ID:zeqExr0Ka.net]
g.DrawRectangle(pen, 16, 16, 1, 1);
g.DrawRectangle(pen, 16, 16, 0, 0);
こいつらはどういう挙動をするべきかを考えたら?

816 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 13:27:00.02 ID:VRumLvNTM.net]
GDIは終点は描画領域に「含まない」
だから、幅として成立する。

FORTRAN由来とかで「含む」系
もあるので注意だ



817 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 14:09:38.84 ID:97kNTb42a.net]
>>801
まあこうは言える。

まずユークリッド幾何学的な数学的に抽象化された世界で考えるべき。
その世界では、1対の平行線の距離がペンの幅より大きければ必ず平行線の間に「隙間」が出来る。

GDI+の描画はこういう抽象化された世界をピクセルの世界に写像してるだけ

818 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 18:54:49.46 ID:97kNTb42a.net]
まあたぶんこんな感じだね

(1) 論理座標の原点は(0, 0)のピクセルの中心に設定されている。つまり論理座標とピクセル座標は
0.5ずれている(少なくともペンの幅が奇数ピクセルの時は)

(2) DrawRectangleは論理的な矩形の辺がペンの中心になるように描画する

(3) だから描画された矩形はペンの幅の1/2 * 2だけ指定したサイズより大きくなる

819 名前:デフォルトの名無しさん mailto:sage [2022/01/24(月) 19:46:14.25 ID:ph7NlGryd.net]
小数のない世界なら厚みゼロで隙間がないんだろうけど、塗りつぶすならFillRectngleで明示しろってことかな。

820 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:02:24.84 ID:AwkrZJuk0.net]
独習C#やってるんだけど、これを一通りやれば基本は身に付くと思っていい?

821 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:03:27.85 ID:3T3OgJ8A0.net]
信じるしかないだろ。もう買ってしまったのだから。

822 名前:デフォルトの名無しさん mailto:sage [2022/01/25(火) 22:23:59.29 ID:bPaq+vdr0.net]
>>807
その本なら自信持って良いよ。
record, using var, initなどのC#8以降の機能は別途学習が必要。
LINQや正規表現などは実践でないとなかなか身につかないので、だいたい理解したらどんどん読み進めるのがおすすめ。
ちなみにプログラミング未経験で、全部読むのに3ヶ月かかりました。

823 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 00:57:13.82 ID:TS8Lm52TM.net]
自分だったら3か月かかるならモチベーションが保てそうにないなw
20年前はそんな本がなく手探りだったけど逆に良かったのかな…

824 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 01:14:23.92 ID:TS8Lm52TM.net]
仕様もライブラリも今よりペラペラだったから入門しやすかった

825 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 01:55:09.45 ID:4qIztPSU0.net]
>>809
ありがとう
プログラミング経験はエクセルVBAのみ
C#は簡単な方だと聞いてたけど難しいね、頑張ります

826 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 12:37:45.33 ID:IaxANYMEd.net]
やっつけ仕事するだけなら今も昔も変わらんと思う

C#の便利機能が山ほど増えてて書きやすくはなってるけどどこまでが入門なのかは正直わからん



827 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:20:24.56 ID:S6jLK41vM.net]
Recordとかぜってえ使わねえ

828 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:32:46.48 ID:MBxJE5i40.net]
ともーじゃん?
・・・まあ使わなくても済むよなあ

829 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 13:50:18.74 ID:wOQPCoOZM.net]
DTOだらけの低品質なコードが量産されてTypeScriptみたいになりそうな気はしてる

830 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 14:28:40.80 ID:pfxZ0tMsd.net]
おれも独習で勉強した
分厚いから真ん中ぐらいまでくると最初の方忘れてるわ
んでもう一度戻ってやり直したり、途中で挫折したりで
1年以上うだうだ読んでた

読み終わる前にいろいろ作って遊んでたけど
イベントとか非同期処理とか分からないとまともなの作れないんで
途中すっ飛ばしてその辺読んだり

831 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 19:22:56.75 ID:uxP3YVvMH.net]
>>817
その独習、旧版(ハーバード・シルト)?

832 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 19:59:28.45 ID:zF2HduXmM.net]
シルトは過去の人
昔読んだ時もそういうイメージ

文法ぐらいが得意分野

833 名前:デフォルトの名無しさん mailto:sage [2022/01/26(水) 21:16:01.91 ID:uxP3YVvMH.net]
>>819
では最近の教科書で優れたものは、どなたの著作ですか?

834 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 00:27:57.09 ID:XnQeNwtl0.net]
俺はオライリーの薄いやつで大体把握して、デザパタをjavaの結城さんのやつで学んだな

835 名前:デフォルトの名無しさん mailto:sage [2022/01/27(木) 10:26:45.87 ID:i4V+v3ft0.net]
C++の本で勉強した知識だけでC#の本は買わず、dobonを見ながら書いてる

836 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:37:45.37 ID:UrWQ/KNN0.net]
dobonよく参考にしてるけどもしかして見てるとバカにされる風潮とかあるの?



837 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 00:43:53.93 ID:OmkEpZCo0.net]
昔はよくお世話になったけど、今となっては古い記事が多いので最近はあまり見ないな

838 名前:デフォルトの名無しさん [2022/01/28(金) 05:13:54.08 ID:AmULl7RP0.net]
全ページのヘッダに古い言語仕様の内容であることの明示くらいはしてほしい
あと初心者向けと言いながら
同じ処理でベストプラクティスと非推奨な書き方を同列に載せてるのも印象よくない

839 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 08:13:42.95 ID:MUNMfoCeM.net]
recordはvalueobject作るのに便利
使い捨てのアプリ作るのには不要

840 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 12:18:41.61 ID:g6bFcMDaM.net]
で、あるか

841 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:24:04.65 ID:C+lFkEfx0.net]
お世話になります。
ComboBox.IsReadOnly を使おうとしてエラー(usingまたはアセンブリが不足)が出ました。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.controls.combobox?view=windowsdesktop-6.0
で調べ、
名前空間:System.Windows.Controls
アセンブリ:PresentationFramework.dll
を追加しました。
しかし、現時点でエラーに変化がなく困っています。他に考えられる原因があればお教えてください。

842 名前:デフォルトの名無しさん [2022/01/28(金) 14:32:54.24 ID:QwC8uFzi0.net]
「他」とか言われてもお前以外にゃわからんのよ

843 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 14:38:21.72 ID:S6VsJW6p0.net]
>>828
追加したのはWPF用のアセンブリだけどお前が作ってんのはWPFじゃなくてWinFormsだとか

844 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:20:17.24 ID:D0DTDHxMd.net]
ComboBoxのインスタンス作らずにプロパティ見ようとしてるとか?

プロジェクトのエラー起こしてるコードさえないからわからん

845 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:31:53.40 ID:C+lFkEfx0.net]
>>829>>830
反応ありがとうございます。
はい。WinForms(VisualStudio使用)です。
ソリューションエクスプローラーの参照からアセンブリを探して追加しました。
WPF用ではなかったか確認します。
using System.Windows.Controls と書いて追加した気になっていましたが、
ソリューションエクスプローラーに同名がないのを確認しました。これが原因かもしれないので調べてみます。

>>831
盲点でした。確かにインスタンス化していません。やってみます。

みなさんのアドバイスのおかげで糸口が見えました。あとは自力で頑張ってみます。
また困ったことがあればよろしくお願いします。

846 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:36:53.16 ID:bcAzYVuU0.net]
>>832
横からレスだけど、次からは情報を端折らずに書いてね
場合によるから



847 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:38:40.89 ID:bcAzYVuU0.net]
>>832 833の追記
WinFormsのComboBoxはSystem.Windows.Formsの方だったはず

848 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 15:51:48.62 ID:C+lFkEfx0.net]
>>832
反応ありがとうございます(横レスでも大歓迎です)
情報を端折ってしまったようで今後気を付けます。
必要になる正しい情報とはこちらでよろしいですか?

エラー CS1061 'ComboBox' に 'IsReadOnly' の定義が含まれておらず、型 'ComboBox' の最初の引数を受け付けるアクセス可能な拡張メソッド 'IsReadOnly' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足していないことを確認してください

それとも部分的であってもソースでしょうか?今回の問題では必要ないと判断してしまいましたが、次回以降気を付けます。
次回もぜひお願いします。ありがとうございました。

849 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:04:30.29 ID:AFiLYmq20.net]
単に、WinFormsのComboBoxにはIsReadOnlyプロパティが存在しないだけだな

https://atmarkit.itmedia.co.jp/ait/articles/0711/01/news152.html

850 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:32:10.58 ID:bcAzYVuU0.net]
>>835

エラーメッセージもそうだけど、こっちが言ってたのは「WinFormsかWPFか」の方だね
WinFormsの方のComboBoxにはDropDownStyleプロパティがあるからこれにComboBoxStyle.DropDownListを渡せば選択可能で文字列入力を受け付けないタイプになるよ
(まあ、他の人がすでに提示しているようだけど)

851 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 16:34:15.50 ID:ycXEhqEs0.net]
もしかして Enabled

852 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:05:47.31 ID:C+lFkEfx0.net]
みなさん親切で涙が出てきます。
>>836・837・838 反応ありがとうございます。

・C#にはWinFormsの他にWPFがあったのですね。WPFという言語なのかと思っていました。
今後はエラーメッセージと共にWinFormsであることを最初に宣言します(初心者すぎてすみません)

IsReadOnlyプロパティが存在しない
・はい。通常のプロパティでは見つけられませんでした。
こちらのサイトを参考にさせてもらい挑戦していました。
https://blog.t5o.me/post/20140316/c-sharp-xaml-combobox-read-only.html

・ComboBoxStyle.DropDownListとEnabledも試しに設定しました。
やりたいことは、
コンボボックス横にチェックボックスを設置
チェックボックスが真の時、コンボボックスを規定値にし操作不可能にすることですが、
上記設定でもドロップダウンボタンが反応するので別の方法を探し、上記サイトにたどり着きました。

・第2案として、チェックボックスが真の時、コンボリストを規定値以外を削除し対応しようかと考えています。
(ドロップダウンリストが空白で1行出てきてしまうのがかっこ悪いかなと考えて最善を探していました)

なんとか頑張ってみます。みなさんありがとうございました。

853 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:14:46.64 ID:AFiLYmq20.net]
>>839
System.Windows.Forms.ComboBoxを継承してカスタムコントロールを作るってのが調べると出てくると思うよ
例えばこんなのとか
jeanne.wankuma.com/library/readonlycombobox/

854 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 17:20:12.41 ID:OmkEpZCo0.net]
>>839
839のリンク先もそうだけど、記事にXAMLって単語があったらWinFormsと無関係だと思って良いよ
WinFormsのコンボボックスの操作不能にするのは、comboBox.Enabled = false;

855 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:13:46.87 ID:l6dMzLky0.net]
c# + visual studioでデータブレークポイント使えますか?
c#のクラスは参照型ですが、値のコピー
(int型変数i,jだと、i = jに相当する処理)
するにはどのようにすればよいのでしょうか?

856 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 19:27:11.67 ID:LzvJDC40a.net]
ブレークポイントの上で右クリ→条件



857 名前:デフォルトの名無しさん mailto:sage [2022/01/28(金) 20:10:31.96 ID:LzvJDC40a.net]
コピーはコピー先をnewして作って、メンバー変数の値をそこに一個ずつコピーしてく
クラスによってはそういうnewとコピーをしてくれるClone()を持ってることもある

858 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 16:47:47.80 ID:3whatsSd0.net]
独習C#で学習されている方が多そうですがマルチスレッド難しすぎないですか(泣)
新版を使っておりますが、P530〜の説明が意味不明です
awaitとWait()メソッドの違いがよくわかりません
どちらもタスク(サブスレッド)の処理を待機するという同じような意味という理解ですが、
なぜかサンプルプログラムで両方使われています
試しに片方削除して実行すると、ループが最後まで実行されないので、意味が違うんでしょうが調べてもよくわかりません…
どなたかご教示いただけないでしょうか

859 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 17:25:22.69 ID:xNgrtKWR0.net]
>>845
大別するならawaitは非同期、Task.Wait()は同期的、という所だけど
Task.Wait()は単純にその場でタスクの終了を待つので足踏みする事になる
awaitを使うと内部的にはその後のコードもTask化されてas

860 名前:yncメソッドの返り値になる

awaitまで到達した時点で呼び出し元に処理が戻るので、主にUIスレッド等でよく使われる
後続処理を追加するだけならTask.ContinueWith()も有るんだけど
UIコンポーネントは作成スレッドからしかアクセスしてはならない制約とか
後続処理を担うスケジューラ指定とか煩雑なのを纏めて糖衣構文にしたのがawait
[]
[ここ壊れてます]

861 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:18:28.62 ID:5CdUE0YMa.net]
>>845
助手(他のスレッド)がタマネギを炒め終わるのをジャガイモの皮を剥きながら待つのがawait
手を止めてじっと待つのがWait

awaitが画期的なのは、「助手の仕事が完了するまでは別の仕事をしつつ、完了後に
やりかけの仕事の続きをする」という本来シーケンシャルでない手続きを、あたかも
「助手の仕事が完了したら続きをやる」という単純なシーケンスであるかのように記述できること

862 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:22:38.33 ID:p/SD7W260.net]
async汚染に注意な

863 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 18:50:59.09 ID:wjo4lb340.net]
awaitの正体は「Taskがすぐに終わらなかったらすぐにreturnする特殊構文」ってことを知っておけば理解はしやすいと思う
Taskが終わったらさっきawaitしたところから(途中処理を飛ばして)再開する

関数先頭に特殊構文を使うことを明記(async)しなきゃいけない

(FormとかWPFとかのGUIアプリなら裏で勝手にやってくれるから気にしなくていいが)
Taskが終わった後にawaitから再開できるように呼び出し元のスレッドでDispatcher.Run()しとかなきゃいけない

864 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:19:00.14 ID:7kxnQq4mr.net]
awaitは「あ!まって!」って覚えればいい

865 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:28:39.37 ID:RKF0PElVM.net]
await 〇〇やっといてよろしく。私いったん席外すんで終わったら連絡ちょうだい。続きこっちで引き継ぐから

Wait 〇〇やれや!終わるまで後ろでじっと見とるからな!はよせえよ!

どっちがいい?

866 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 19:41:45.39 ID:S+vKlyc9a.net]
Threadが一番わかりやすいw



867 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 20:51:42.02 ID:kkw3q4n30.net]
たとえが分かりやすいですw
イメージがわきました、みなさんありがとうございます!
もう一点だけ確認なのですが、asyncメソッドのawaitよりあとのプログラムに移るタイミングですが、
メインスレッドでプログラムが実行中のときはどちらが優先になるのでしょうか?

868 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 20:57:28.48 ID:z01vGxpA0.net]
>>853
OSの気分次第

869 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 21:26:41.18 ID:qmqxr6WH0.net]
WinFormという前提でいうと
まず前提としてメインスレッドではずっとメッセージループっていうループが回ってる
でマウスの入力とか再描画要求はメッセージって形でキューに貯められる
メッセージループはキューから1つメッセージを取り出してはアプリの実装に流してくる
ちなみにその辺のシステムメッセージはWinFormだとMouseMoveとかPaintとかのイベントとしてアプリが対応することになる

await以降の処理もこのメッセージを使って実現してるから
メインスレッドの手が空いて次のメッセージを処理できる態勢になるまで待たされる

870 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 22:02:51.88 ID:p/SD7W260.net]
スレッド
注意点一覧

・シングルコアで動くか?
・応答がないときに自決するか?
・失敗時のメモリリークはないか?
・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等)
・生存確認方法はあるか?
・実行中の状態は取得できるか?
・ログは出力できるか?
・最大使用メモリは把握できているか?
・失敗時のリザルトの受け取り方法は適切か?
・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?)
・本体終了時に終了できるか?

871 名前:デフォルトの名無しさん mailto:sage [2022/01/29(土) 23:49:44.87 ID:kkw3q4n30.net]
ありがとうございました!

872 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 01:12:48.99 ID:XLpABEj80.net]
C#のマルチコアなんたらっていう非同期処理のテキスト読んだらいいよ

873 名前:デフォルトの名無しさん [2022/01/30(日) 03:05:22.41 ID:2zm6GvSaa.net]
async/awaitとTask.Runの使い分けが今でもよくわからん。。

874 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 09:00:16.50 ID:F79hzdqmr.net]
>>856
それどこかに書いてあったな
5年くらい前の記憶でそのリストがあった

875 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 11:27:59.00 ID:zEfMsuv9M.net]
それ多分C#じゃなくて組み込みとかの話だから参考にならんよ

876 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 14:20:38.52 ID:6d5Lec+00.net]
>>861
え?どこにC#だと助かる要素があるの?



877 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 15:48:10.14 ID:WELts56MM.net]
>>856
この記事の内容が組み込みc++じゃないのかと

878 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:06:41.10 ID:6d5Lec+00.net]
C++だと駄目でC#だと助かる要素なんて1つもないけど
今まで何やってたん?

879 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:17:33.02 ID:nTSKdiu90.net]
>>856
これスレッドに限らずどのプログラムにも言えることだと思うわ
出典元知りたい

880 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:18:42.01 ID:v/uLxU6j0.net]
>>859
Task.Runとawaitは組み合わせて使うものだし、使い分けって何のことだろうか
(同期する必要が無ければawaitしないことはある)

881 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:21:16.29 ID:cT0our3Wa.net]
助かるってどっかの方言なのかな。まったく意味わからなかったw
ほぼすべてがc#(とVSの組み合わせ)で助かるか、マルチスレッド関係なくそのぐらい考えとけって項目

882 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 17:29:29.52 ID:6d5Lec+00.net]
>>867
は?c#に特別なギミックなんてないが
君はスレッド使わないほうがいいね

883 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 19:59:30.72 ID:XMZDBma3d.net]
またシングルスレッドおじさんの講釈が始まったのか

884 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:10:42.59 ID:Mi/4eGx6M.net]
awaitのおかげで非同期書きまくる現代のプログラミングでこんなチェックリストいちいち考えてたら工数足りん
それに現代の実行環境は優秀なんでほとんど考えなくていいよう出来てる
C#もJavaScriptもそう
C++とはもう時代が違う

・シングルコアで動くか?→普通に書けば当たり前に動く
・応答がないときに自決するか?→普通に書けばライブラリ側からタイムアウト例外出て落ちる
・失敗時のメモリリークはないか?→普通に書けばあり得ない
・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等)→大半のケースで環境に任せるのが正解。制御したいならより上のプロセスレベルで制御する
・生存確認方法はあるか?→死んだら例外でる出てないなら生きてる
・実行中の状態は取得できるか?→大半のケースで取得要件はない
・ログは出力できるか?→出来ないことなんてあるの?
・最大使用メモリは把握できているか?→環境に任せるのが正解。したいならより上のプロセスレベルで制御する
・失敗時のリザルトの受け取り方法は適切か?→例外で標準化されてる
・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?)→例外出たら止めろ。例外出ても進めるならしっかり設計しろ。そしてそれは非同期関係ない
・本体終了時に終了できるか?→普通に書けば猶予期間内に終了する。ロングランニングの時だけ気をつけろ

885 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:27:29.51 ID:MKtsah/wM.net]
各アプリケーションの機能テストで確認すべき項目と
非機能要求のテストで確認すべき項目と
フレームワークの仕様テストで確認すべき項目と
全部ごちゃ混ぜだから分かりにくい

タイムアウトを含め失敗時の振る舞いは一般的な品質レベルなら全部テストする項目

886 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 20:32:44.54 ID:cT0our3Wa.net]
組み込みになるとシングルコアで動くのにマルチコアで動かないとか、通信ライブラリが処理をつかんだままだとほかのスレッドが止まるとか(それマルチスレッドなのか?でも本当に起きる)
そんな感じになっていくからな。特にFreeRTOSは・・・

c#だとlockとかを知らないと色々トラブル。そっちの方が重要だろ
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/statements/lock



887 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 22:57:40.72 ID:aiFnFmm30.net]
doxygenって何処のスレで質問すれば良いですか?

888 名前:デフォルトの名無しさん mailto:sage [2022/01/30(日) 23:50:15.42 ID:cT0our3Wa.net]
スレ立てるまでもない質問はここで 158匹目
https://mevius.5ch.net/test/read.cgi/tech/1635193843/

889 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 00:03:34.26 ID:HAfOA5uC0.net]
>>870
。oO(ああ、こいつダメだ、経験が少なすぎてなんも当たったことねぇのなw)

890 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 01:18:01.43 ID:rap/w09T0.net]
GUIアプリ作るのにシングルスレッド縛りはありえねーって

891 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 01:20:52.56 ID:PXu70Z+W0.net]
(応答なし)

892 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 01:30:02.02 ID:HAfOA5uC0.net]
>>876
うまく行かなかったんだろ?w

893 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 02:43:38.51 ID:rap/w09T0.net]
>>878
GUIアプリでシングルスレッド縛りだと重い処理で画面固まってるように見えてしまうからうまく行かないね

894 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 08:09:11.84 ID:RgoQRIUnM.net]
>>870のどこがダメなのか分からない
スレッド制御を自前で1から書かなきゃいけなかった00年代ならともかく
async/awaitにほぼすべてを任せられて非同期を安全お手軽に書けるようになってる時代なのにさあ

脳みその中もPentium4あたりで進化が止まった老害が
async/awaitを当たり前に使う現在のコーディングスタイルについていけなくて
誰彼かまわずケチをつけてるだけにしか見えない

年取ってこういうゴミみたいなジジイにはなりたくないもんだ

895 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 09:50:16.85 ID:JauXjIS80.net]
何がしたいかによる
await/asyncを使うのは主に外部要因で待たされる時
ダウンロード残り1GBとかSQLサーバーからレスポンスが2秒以上かかってるとか
そういう感じの時クルクル回したりプログレスバーとキャンセルボタンが欲しいわけ
ボタンすら反応しませんだと、クソ重いソフトと因縁つけられちゃうの
一方マルチスレッドでCPU100%がん回しですってのがしたいことだったら
Partitioner.CreateとParallel.ForEachを使うawait/asyncは関係ない

896 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:15:13.28 ID:FSK5xZBqM.net]
大半のケースで考慮不要

この一言でまあそうだよねと納得できないなら開発経験不足としか言えん



897 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 10:47:47.62 ID:F4OTxaxpa.net]
もともとがc#に合わせた話じゃないからどうとでも読み取れちゃうんだよ
分かりやすいとこで言えば例えば
> ログは出力できるか?→出来ないことなんてあるの?

プログラミングの話をしてるのだからきちんと意図通りに動くことを把握するためのDebug.WriteLineのようなログと捉えたらできないことなんてあるの?となる
でもログファイル出力と捉えたら、マルチスレッドから同じファイルに対して書き込もうとして・・・なんてできないこともある

898 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:33:05.16 ID:I+ECkei6M.net]
そんなのはloggerがなんとかしてくれるから気にするな
つか今時はログは全部標準出力でいい
標準出力を拾って何処に吐くかは環境が担当するところ

899 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 11:38:53.86 ID:BNlzdeLSM.net]
>>883
> でもログファイル出力と捉えたら、マルチスレッドから同じファイルに対して書き込もうとして・・・なんてできないこともある
キューに書くなりして排他制御するだけじゃね?

900 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:08:05.50 ID:F4OTxaxpa.net]
そうなんだよ
だからログ取るならこのクラス使え(c#が勝手にスレッドセーフにしてくれたり管理するよ)
マルチスレッドからファイル操作するならlockで排他制御しろ(自分でスレッドセーフにしないとトラブルぞ)
ってチェックシートならいいんだけどな

901 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:13:17.55 ID:a9TU5xJTa.net]
オラオラ交通整理マン仕事しろや早く議論スレに誘導しろよ
まさか交通整理マン自身が議論してるんじゃねえだろうな?ん?

まあ、個人的には議論は結構だけど論点は明確にして欲しいね。
正直何を争ってるのかさっぱり分からんw
こんなあいまいな話で藁人形と戦ってる奴って普段よっぽど邪険にされてるのかねwww

902 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 12:53:42.98 ID:80+F6Vz/M.net]
かわいそうに

903 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 13:04:34.28 ID:dnOSCP4XM.net]
>>886
> マルチスレッドからファイル操作するならlockで排他制御しろ(自分でスレッドセーフにしないとトラブルぞ)
スレッドセーフならいいって話じゃないことぐらいは理解してから議論に参加しようよ…

904 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 15:26:32.90 ID:2TQISd5L0.net]
あ、これ議論なの?

905 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 19:09:11.37 ID:yyWr14dta.net]
凄まじく複雑な相談なんだけど良い?

インスタンスと対になる鍵オブジェクトって
xxxIdかxxxKeyかxxxTokenのどれで名付けるべき?

ちなみに中には格納番号が入っててリポジトリからインスタンスを引き出すのに使う

906 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 21:03:11.17 ID:eqy2NGbAd.net]
初心者スレだぞ

簡単な使い方ならともかく
なんか動かんだのデータ壊れただのデッドロックしただのの対策を一気に詰め込んでも無理でしょ



907 名前:デフォルトの名無しさん mailto:sage [2022/01/31(月) 21:27:15.36 ID:a9TU5xJTa.net]
>>891
そもそも専用クラスにする必要あるの?
っていうかこの板命名スレもあるよ
いや目くじら立てて行くべきと言いたいわけじゃないw

908 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 11:07:54.02 ID:Z6xO941E0.net]
IDを使うときは配列でインデクサがある、とか
Keyを使うときは辞書でKey-Valueの対がある、とか
Tokenを使うときは重複しない文字列(大抵はハッシュ)が入ってる、とか
そういう話なのかな、C#とどう関係するのか知らんけど

909 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 11:19:59.86 ID:Tjw+V3tAM.net]
普通にハンドルパターンじゃないのか

910 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 12:10:52.81 ID:LUb4jo/Ua.net]
object xxxと対になる鍵オブジェクト = new object();

911 名前:デフォルトの名無しさん [2022/02/01(火) 13:48:07.91 ID:1d/yMvRJ0.net]
TextBoxの高さに合わせてFormの高さを調整したいのですが、下記のようにすると、TextChangeのたびに高さが減ってしまいます。
何が原因でしょうか?
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox1.Height = textBox1.Lines.Length * textBox1.Font.Height;
ClientSize = new Size(ClientSize.Width ,textBox1.Height);
}

912 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 18:19:16.26 ID:R62wNw5Va.net]
https://docs.microsoft.com/ja-jp/dotnet/desktop/winforms/advanced/how-to-obtain-font-metrics?view=netframeworkdesktop-4.8

913 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 18:21:14.03 ID:I6aD7b89a.net]
TextBoxの高さに合わせてFormの高さを調整したいだけなのに
textBox1.Height = でテキストボックスの高さまで変更してるからでは?

914 名前:デフォルトの名無しさん mailto:sage [2022/02/01(火) 19:55:39.20 ID:x6m1XFOP0.net]
>>897
一回目の呼び出しで
フォントの高さに合わせてtextBox1.Heightを設定する(小さくなる)
textBox1.Heightの高さに合わせてフォントの高さが変わる(小さくなる)

二回目の呼び出しで
フォントの高さに合わせてtextBox1.Heightを設定する(小さくなる)
textBox1.Heightの高さに合わせてフォントの高さが変わる(小さくなる)

というループだからでわ?
少なくともtextBox1.HeightはtextBox1.Font.Height より少し大きいはずだから
そのまま代入していくとどんどん小さくなるんだと思うわ

915 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 00:39:48.73 ID:TKyxc9mCa.net]
>>897
これで出来た
でも何か気付いてない問題がありそうw
private void textBox1_TextChanged(object sender, EventArgs e)
{
  var delta = textBox1.PreferredSize.Height - textBox1.Height;
  Height += delta;
  textBox1.Height += delta;
}

916 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 01:06:16.73 ID:Xe1+J6sR0.net]
TextChangedのイベントごとにHeight+=deltaの設計自体良くないとは思う

イベントごとにテキスト内容からHeightの再計算させるなら理解できるが



917 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 01:14:48.57 ID:TKyxc9mCa.net]
>>902
言いたいことは分からないでもないが、
恐らくセッター自身にプロパティーの値に変更がなければ何もせず戻る処理が
入っているはずなので考えすぎ。

実際問題動かしてみてそれに起因する問題があるようには見えない

918 名前:デフォルトの名無しさん [2022/02/02(水) 09:11:06.71 ID:RlffTed50.net]
WinFormsのListViewで、仮想モード、LargeIcon表示にしたとき
Shift+マウスクリックでの項目の範囲選択がクリック位置より広く選択されてしまいます。

以下は2008年の古い情報ですがWindowsXPの不具合のため回避困難とあります。
https://social.msdn.microsoft.com/Forums/ja-JP/484c578a-df46-4624-a4e7-99ceaa0588ef/2020624819212701237512383listview12391389173044612398350792596836?forum=vsgeneralja

Windows10でも解消していないようなのですが、
検索しても有用な情報が見つからずどなたか回避できてる方いないでしょうか。

919 名前:デフォルトの名無しさん [2022/02/02(水) 09:12:35.95 ID:4XyzPXmZ0.net]
スクリーンロックを抑止したくてネットで調べて下のようなプログラムを書きました。

static async void Test(){
for(;;){
SendKeys.Send("Break");
await Task.Delay(10000);
}
}

目的は達成したのですが、Test()メソッドを終了するにはどう書けば良いでしょうか?
よろしくお願いします。

920 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 10:25:26.24 ID:qrF7Vqa00.net]
static bool _stopTest;


public void StartTest()
{
 _stopTest = false;
 Test();
}

public void StopTest()
{
 _stopTest = true;
}

static async void Test()
{
 while( !_stopTest )
 {
  SendKeys.Send("Break");
  await Task.Delay(10000);
 }
}

止めたいところでStopTestを呼ぶ

921 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 11:00:41.80 ID:tkuApL0q0.net]
CancellationToken使おう

private CancellationTokenSource cts = new CancellationTokenSource();
private Task task;

public void Start()
{
this.cts = new CancellationTokenSource();
this.task = Test( cts.Token );
}

public void Stop()
{
this.cts.Cancel();
this.task.Wait(); // 必要があれば
}

static async Task Test( CancellationToken ct )
{
while ( ! ct.IsCancellationRequested )
{
SendKeys.Send( "Break" );
try
{
await Task.Delay( 10000, ct );
}
catch ( TaskCanceledException )
{
}
}
}

922 名前:デフォルトの名無しさん [2022/02/02(水) 12:33:54.15 ID:2OSrRGw90.net]
>>842
>> c# + visual studioでデータブレークポイント使えますか?

これひょっとして使えな

923 名前:デフォルトの名無しさん [2022/02/02(水) 12:47:34.78 ID:2OSrRGw90.net]
c#でAddressSanitizerみたいなツールはありますか?

>>これひょっとして使えな

これは「これひょっとして使えないのでは?」です

924 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 12:49:24.20 ID:5pRqnuwX0.net]
>>908
https://docs.microsoft.com/ja-jp/visualstudio/debugger/using-breakpoints?view=vs-2022#set-data-breakpoints-net-core-3x-or-net-5

925 名前:デフォルトの名無しさん [2022/02/02(水) 15:01:03.10 ID:MolDdSgsa.net]
https://stackoverflow.com/questions/209281/c-sharp-equivalent-to-javas-wait-and-notify

l

foo.notify() => Monitor.Pulse(foo)
foo.notifyAll() => Monitor.PulseAll(foo)
foo.wait() => Monitor.Wait(foo)

926 名前:デフォルトの名無しさん [2022/02/02(水) 15:06:00.81 ID:MolDdSgsa.net]
>>907だと、クリティカルタスクの最中に例外が起きたら壊れそうだなw
>>906は、Pulseが抜けてる



927 名前:デフォルトの名無しさん [2022/02/02(水) 22:04:43.57 ID:GVJKCJUY0.net]
ピクチャーボックスに直線を実寸(o)で引きたいんですけど、どうすればよいですか?

928 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 22:13:43.42 ID:NhKBMVet0.net]
GraphicsオブジェクトのPageUnitプロパティを変更する

929 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 22:49:06.74 ID:p1re6OTba.net]
>>913
GDI+はたぶん常にdpiを96dpiと仮定しているので
モニターのdpiが96dpiなら>>914で上手く行くがそれ以外の場合は
自分でページ変換を設定しないとだめだと思うよ

930 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 23:21:53.08 ID:vNzv2HbB0.net]
GDI+のDPIは可変だよ 印刷にも使うんだから
描画先がモニタの場合WindowsのDPI設定に依存して変わる
例えば125%なら120dpiだな
まあDPI設定に従うだけでモニタのDPIは恐らく別だからモニタ上で正しく表現できるわけではないけど

931 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 23:29:58.32 ID:30BhQoQ30.net]
>>916
それってやっぱりモニターの解像度は96dpi固定ってことだろ
32インチ4Kスケーリング100%なら138dpiが取得できる方法を示さないと

932 名前:デフォルトの名無しさん mailto:sage [2022/02/02(水) 23:31:34.80 ID:p1re6OTba.net]
>>916
印刷時に物理単位(mmやインチ)を選択できるのは
プリンタの場合はdpiを報告する仕組みが最初から確立してるからで
ディスプレーの場合は残念ながらそうじゃないんでいろいろややこしいよw

933 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 09:28:12.33 ID:Nd7AcXHS0.net]
質問させてください。
起動すると適当な番号でhttpポートを開くアプリがあります(仮にaaaa.exe)
このaaaa.exeのパスが分っている状態で、アプリが使用しているポート番号を取得したいのですが、どのように処理したら良いでしょうか?

934 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 09:46:56.82 ID:X/mng9aEM.net]
>>919
netstat

935 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 13:48:25.19 ID:EdZmqiFt0.net]
>>919
対象プロセスのプロセスIDを取得してGetExtendedTcpTable/GetExtendedUdpTableで取得できるデータと突き合わせる

936 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 14:20:51.83 ID:Nd7AcXHS0.net]
>>920
>>921
ありがとう。今日の夜試してみる。



937 名前:デフォルトの名無しさん mailto:sage [2022/02/03(木) 15:09:05.58 ID:1AlNHnvf0.net]
いえいえ

938 名前:デフォルトの名無しさん [2022/02/04(金) 07:20:32.62 ID:34mLDZGV0.net]
スクリーンロック抑止の者ですが、遅れながらメカニズムを理解できました!
ありがとうございます!
SendKeysで"Break"を定期的に押すと文章書いてる時に
ガッツリ消えるので、何のキーが良いかは探求したいと思います。

939 名前:デフォルトの名無しさん [2022/02/04(金) 07:42:03.31 ID:QVbyni0c0.net]
似たようなソフト作ったことあるけど、キーを押下するよりマウスを現在位置から現在位置に移動するほうが普通に使ってるときの影響なくていいよ

940 名前:デフォルトの名無しさん [2022/02/04(金) 17:23:13.30 ID:34mLDZGV0.net]
>似たようなソフト作ったことあるけど、キーを押下するよりマウスを現在位置から現在位置に移動するほうが普通に使ってるときの影響なくていいよ

キーインする限り、どんなに使わないキーでも影響は避けられないと気が付きました。
マウス操作をトライしたいと思います。ありがとうございます。

941 名前:デフォルトの名無しさん mailto:sage [2022/02/04(金) 21:42:43.56 ID:+ZxkHXQpd.net]
画面ロックというのが具体的になんなのかだけど
Windowsシステムのスリープとか退席モードのことならAPIで抑制した方がいいのでは

942 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 15:50:35.16 ID:qLntA6C8M.net]
powertoysのawakeでいいだろ

943 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 16:19:11.63 ID:yLNqj27S0.net]
>>928
それはどうやって実装してるの?

944 名前:デフォルトの名無しさん mailto:sage [2022/02/05(土) 23:38:56.22 ID:x0YbOETD0.net]
そりゃSetThreadExecutionState呼んでるやろなあ

945 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 00:11:20.36 ID:66j2bw9/0.net]
あとはキーボードフックでWin+Lを握りつぶせるかだな

946 名前:デフォルトの名無しさん mailto:sage [2022/02/06(日) 04:20:06.01 ID:D8jWL7f30.net]
Win+Lとかまで対応する気ならOSの設定いじった方がいいのでは
https://i-bitzedge.com/tips/how-to-lock-screen-enable-or-disable-on-windows-10



947 名前:デフォルトの名無しさん [2022/02/07(月) 12:45:48.73 ID:eA8tvD7r0.net]
>Windowsシステムのスリープとか退席モードのことならAPIで抑制した方がいいのでは

SetThreadExecutionStateを使うことでやりたい事がダイレクトに出来ました。
ありがとうございます!

キーイン、マウスカーソルぷるぷるも、非同期処理の使い方を知れたので、
実り多かったと感謝しております。

948 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 21:03:15.86 ID:yNoTcSOm0.net]
質問させてください
EntityFrameworkを使用して自PC内(localhost)のPostgreSQLを操作しています
普段正常に参照や更新といった処理は出来ているのですが、極々まれにデータベースとの接続がタイムアウトするケースがあります
データベースのログにもエラー等が無く、なぜタイムアウトになるのか根本の原因が掴めていないのですが、試しにタイムアウト設定の秒数を伸ばしている状態です

お聞きしたい事は、EFは接続に失敗した場合、タイムアウトの秒数になるまで何度もリトライしているのでしょうか?
また、失敗したクエリを再試行する事は可能なのでしょうか?

直接C#とは関係のない質問かもしれませんが、アドバイス頂きたいです

949 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 22:00:16.47 ID:kx+AzsPB0.net]
ほんとにタイムアウトなのかい?
どこか閉じ忘れて接続数上限まで使い切ってるとかは?

950 名前:デフォルトの名無しさん mailto:sage [2022/02/07(月) 22:46:47.42 ID:0I88UVsz0.net]
PostgreSQLだと割とあるみたいね、接続数の上限というの

951 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 04:32:53.12 ID:fYph1ArX0.net]
>>935
ありがとうございます
接続する際はusingブロックで囲って使用しているので解放漏れは大丈夫だと思ってはいます…
(こういう接続の仕方です:https://qiita.com/Nossa/items/b6d84aeb134abc85f027)

接続数に関してもpg_stat_activityを使用すると、タイムアウト発生時は見れていないのですが、正常時は15程度でした(デフォルトはMax100)

952 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 07:37:47.00 ID:2OtTL/zKM.net]
ログに出すようにしたの?

953 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 09:23:52.16 ID:Ki5uCpbuM.net]
>>938
System.TimeoutExceptionとSystem.Data.Entity.Core.EntityExceptionが発生している事は確認出来ました。
ただ、例外処理を書いていなかったので「ハンドルされていない例外が発生しました」以上の情報は得られませんでした…

これらを調べても接続文字列が正しいか確認をするなどの記載が多いのですが、基本的に処理が正常に行われているのでここは問題ないのではかと考えてます…

954 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 12:22:11.88 ID:MACKR5LXd.net]
接続上限を疑って再現を目指すなら接続数をデフォルトから100→10に変えてもいいと思う

ありうるシナリオは接続上限→接続空き待ち→待っても開かないからタイムアウト

955 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 12:30:36.89 ID:QQmTWHSUM.net]
>>934に便乗して
NpgsqlでDB接続するコンソールアプリを1分おきに起動するタスクがあるんだけど、
それなりの頻度でStsyem.TimeoutExceptionで接続失敗しちゃう
どこに問題があると疑うべきなのかなあ

と思っていまログを確認したら
半年くらい前までは2〜3日に1回(=1/1000〜1/5000位の確率)でTimeoutしてたのが
最近だと月1回くらいしか起こらなくなってた・・・
環境というかPostgreSQLサーバの負荷等の問題だったのかな・・・・・・?

956 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 12:38:00.12 ID:Vzn ]
[ここ壊れてます]



957 名前:qt3iZa.net mailto: 同時に書き込アクセスできず待たされるのはよくある
書き込んでる奴が時間かかってたらタイムアウト
プログラミング分かりやすくするなら、DBアクセスは排他処理して同時に複数接続しない。それで失敗はなくなるだろ
[]
[ここ壊れてます]

958 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 12:44:07.19 ID:m2Ico1fWM.net]
>>939
TimeoutExceptionのエラーメッセージに何をした時にタイムアウトが発生したのかが書いてあるから
まずそれを確認したら?

959 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 12:59:02.44 ID:nLjBt9+k0.net]
一概にタイムアウトと言っても、「接続タイムアウト」と「コマンドタイムアウト」があるからどっちが発生しているかをよく確認しないとね。
接続文字列のTimeout、CommandTimeout
(もしくはコード上でef経由で個別設定しているとか)

>>939
npgsqlが吐いてる例外をInnerExceptionで見れません?

960 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 14:08:23.98 ID:TsBQQX8fM.net]
- 詳細エラーメッセージ
- npgsqlとpostgresのバージョン
- 再現コード
この3点セットがあれば誰か調べてくれるよ
.NETやOSの情報もあればなお良い

961 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 14:33:47.63 ID:Ki5uCpbuM.net]
>>940
ありがとうございます
なるほど、確かに下げてみれば再現が出来るかもしれません
早速試してみます
これで同じエラーが出てくれれば良いのですが…


>>944
タイムアウト設定に関して、Timeout、CommandTimeout共にデフォルトで運用していました
現在試しにそれぞれ60に伸ばしています
InnerExceptionは例外の詳細ですよね?
お恥ずかしい話ですが、例外処理を書いていなかったため、今回このエラーが分かったのもwindowsのイベントビューアで発見しました
急遽例外処理を入れたのですが、エラーが再現せず…

962 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 14:42:17.36 ID:Ki5uCpbuM.net]
>>945
ありがとうございます

現在分かるエラー内容
@System.TimeoutException
ASystem.Data.Entity.Core.EntityException

各種バージョン
Npgsql:ver.4.1.3.0(ランタイムver.v4.0.30319)
PostgreSQL:PostgreSQL 13.3, compiled by Visual C++ build 1914, 64-bit
.NetFramework:4.6.1
OS:Windows10pro

エラー発生箇所コード

static void GetStartProcessTime()
{
using (var context = new DbContext())
{
var processingTimeTable = context.CheckprocessingTimeTable.First(x => x.id== 1);
processingTimeTable.CreateDate = DateTime.Now;

context.SaveChanges();
}
}

963 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 15:07:00.89 ID:Ki5uCpbuM.net]
>>947
すいません言葉足らずでした
エラーはその2つの例外情報は分かるのですが説明は「ハンドルされない例外のため、プロセスが中止されました。」となっており、それ以外はエラーに至るまでの内部的な関数?が呼ばれた場所が記載されている状態です
その呼ばれた場所の最後が、エラー発生箇所コードとして記載させて頂いた部分です

964 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 15:35:11.95 ID:4pbgYgTcM.net]
>>856
これをありがたいと思うのは変な人
分からないでありがたがってる

>>870が正解

965 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 15:42:07.62 ID:2+2aacXwr.net]
まずは作成日みたいなフィールドを後で更新するなと。

966 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 18:40:08.93 ID:11RalhgJ0.net]
>>947
これ同じ処理が複数同時に走る?

複数同時に走る場合でread committedならデッドロックになるケースじゃない?
それが原因かどうかはわからないけどlog_lock_waitsがoffならonにしてしておくといいかも



967 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 18:50:37.00 ID:u9WL3yPq0.net]
>>949
ちゃんとチェックするとこに行ったら全弾被弾して
○○さんって大したことないよねって評価をいただくわけですね

968 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 18:53:19.11 ID:u9WL3yPq0.net]
スタイリッシュなつもりでいるようだけど自分の処理の状態も把握できないもん作って悦に浸ってるのがダセェ
お前がよく見るのはあくまでサンプルだからな

969 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 20:10:07.63 ID:pmS2YoNl0.net]
>>951
デッドロックやDB上のロックタイムアウトなら、普通はDBサーバ上で確認できるだろ
まず何がエラーになったのかちゃんと確認すべきじゃね

DB側で何の(接続要求すらの)感知もできてないなら、おれならまずはネットワーク系の問題を疑うがな
ソケットの枯渇とか名前解決の不具合とかファイアウォール関係とか、その辺があやしい

970 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 20:26:14.86 ID:fYph1ArX0.net]
>>951
ありがとうございます
このGetStartProcessTimeが複数の箇所で同時に呼ばれる事はありません
教えて頂いた設定等は私の知識不足で全然触れたことがないので一度調べてみます

>>954
ありがとうございます
postgresのログも見てみましたが、タイムアウト発生時にはエラーや何らかの処理をしているログ自体ありませんでした
データベースがEntityFrameworkから接続を要求されているというのは後からでも見ることが出来るのでしょうか?

971 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 21:45:24.55 ID:11RalhgJ0.net]
>>954
>まず何がエラーになったのかちゃんと確認すべきじゃね
そりゃそうよ
ただ本当に詳細が確認できない状態で再現もできないのなら
次に発生した時に情報を取れるようにしておくのは重要

DB側のログで何が確認できるかは設定次第
https://www.postgresql.org/docs/current/runtime-config-logging.html

972 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:06:08.66 ID:u9WL3yPq0.net]
そもそもタイムアウトが起きるぐらいの処理時間かかってるの?

973 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:25:24.63 ID:RReR8OJiM.net]
>>952
c#のwindows環境でシングルコアで動くか?ってやってるところどこにあるんだよ
脳みそ何のために使ってんだ?

974 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:34:34.58 ID:11RalhgJ0.net]
>>955
自PC内ってことだったからnpgsqlのtraceレベルのログも仕掛けといたら?

NpgsqlLogManager.Provider = new ConsoleLoggingProvider(NpgsqlLogLevel.Trace, true, true);
https://www.npgsql.org/doc/diagnostics/logging.html

975 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:47:06.84 ID:fYph1ArX0.net]
>>957
各クエリの時間を測った事は無いのですが、アプリケーション自体の一連の処理が0.5〜0.7秒程度で終わっているので、今回のDBへの接続がタイムアウトになるほど長くかかる事は通常は無いと考えています…


テンプレートにあったサイトを使ってエラーを記載してみました
上手く出来ているか分かりませんが、以下が現在確認出来ているエラー内容です

https://ideone.com/rIerhm

976 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 22:48:14.55 ID:u9WL3yPq0.net]
>>958
っていうかそういう自分の思い込みでしか物事を判断できないから
バグまみれのスレッド立てても気にもならないんだろうな

シングルコアで動かしたログがあればマルチコアで並列で動作してるか
どうかチェックになんだろ
得にオメーのはどうせ並列でなんか動いてねぇからシングルでもマルチでもログかわんねーだろw



977 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:01:38.91 ID:RReR8OJiM.net]
>>961
シングルコアが分からないなら口出ししなければいいのに

978 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:07:43.01 ID:RReR8OJiM.net]
あなたの会社ではどのシングルコアCPUを搭載したwindowsPCでスレッドの動作確認を行っているんですか?
そんなことしてる会社などないだろ

979 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:18:00.69 ID:NUxQNPK7a.net]
初代ラズパイ+monoかな
脳みそ何のために使ってんだ? ← 妄想

980 名前:デフォルトの名無しさん mailto:sage [2022/02/08(火) 23:18:39.86 ID:QQmTWHSUM.net]
>>963
わざわざ相手するなよ
その人ろくに有益なこと言えないのにひたすらマウント取ろうと粘着するから
無駄にレス流れて迷惑なんだよ

981 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 02:29:49.81 ID:6+/OHix60.net]
脳みそはマルチコアでも容量が1bitしかないようだなハハハ

982 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 03:04:14.67 ID:w+huDBHz0.net]
またシングルスレッドおじさん帰ってきたのか

983 名前:デフォルトの名無しさん [2022/02/09(水) 10:25:30.10 ID:FQOg5JO/0.net]
Windowsフォームのプログラムをタブレットでも使いたいという要望があったのですが
comboboxのスクロールバーを大きくすることはWindowsフォームで出来るでしょうか?
というかタブレットかつ高解像度のPCが出てくると
いよいよWindowsフォームがキツくなってきた気がします。

984 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 10:27:52.18 ID:tI59uOap0.net]
>>968
プロパティでどうこうみたいなお手軽な方法は無くって、カスタムコントロールを作るとかしないとダメだった気がする

985 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 11:46:02.13 ID:kunTT2/DM.net]
OwnerDrawは全てを解決します

986 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 13:55:19.52 ID:nVoy06Fa0.net]
つーかAndroidタブのコンボボックスにスクロールバーなんかないよね
指で操作するためのUIに変える必要があるってことよね
オーナードローなんかで解決するかな



987 名前:デフォルトの名無しさん [2022/02/09(水) 14:17:49.58 ID:P+Dycpf60.net]
>指で操作するためのUIに変える必要があるってことよね
フォームアプリがタッチパネルに反応するだけでも御の字と思っている状況なので、
出来るなら是非とも欲しい動作です。

988 名前:デフォルトの名無しさん [2022/02/09(水) 14:17:49.99 ID:P+Dycpf60.net]
>指で操作するためのUIに変える必要があるってことよね
フォームアプリがタッチパネルに反応するだけでも御の字と思っている状況なので、
出来るなら是非とも欲しい動作です。

989 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:19:08.14 ID:5WmGk4RQ0.net]
スクロールバーを出ないぐらいコンボボックスの範囲を大きくしておけばいいのでは?
オーナードローとかしだしたら大変だからやらない方が身のためかもしれない

990 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 14:35:48.89 ID:gJYxYm5Ia.net]
コピペで一発とはいかないけどこれでできるな
スクロールバー二重になったりちょっとおかしいとこ変えるだけだからすぐだろ
https://www.codeproject.com/Questions/552065/Customizepluswindowsplusscrollplusbarplusinpluscom

991 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 15:24:21.38 ID:lp//LDU1a.net]
WPFのコンボもフリックしてタップで止めるとかできないんだっけ?

まあWPFの方が不十分とはいえ一応タッチパネル系のイベントに対応してるんで
できるならWPFで作り直した方がいいんだろうねたぶん

992 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 16:41:51.90 ID:iS0fYVVpa.net]
>>975
これできないな。メッセージ飛ばせば終わりだろと思ったけどまったくだった

993 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 21:31:08.51 ID:nVoy06Fa0.net]
コンボボックスやめてパネルにでかいボタンを並べてスクロールさせるかリストボックスだな
そうなるとやっぱオーナードローか

994 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:39:05.34 ID:HRI/vJyh0.net]
.Net6.0にしようとしたらSJIS削られてて焦った

995 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 22:43:02.03 ID:1A90hyai0.net]
>>979
まじかよ、俺社一生使えないじゃん・・・

996 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:04:40.19 ID:7kRrx8rI0.net]
EXCEL用のCSV出力できなくなるの?



997 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:05:53.89 ID:a7Kiiaid0.net]
>>980
次スレよろぴく

998 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:06:30.96 ID:gW34M8HF0.net]
それは BOM を付けたげたら済む話じゃないの?

999 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:12:22.58 ID:iS0fYVVpa.net]
CodePageEncodingProvider.Instance.GetEncoding("shift-jis")
こんな感じで取得できたはず

1000 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:14:43.66 ID:1A90hyai0.net]
>>982
はい次スレ

ふらっと C#,C♯,C#(初心者用) Part154
https://mevius.5ch.net/test/read.cgi/tech/1644416019/

1001 名前:デフォルトの名無しさん mailto:sage [2022/02/09(水) 23:25:51.66 ID:FxI6XKVTM.net]
CP932とshift-jisは実は別物と2chブラウザを作ったときに理解した
大体20年近く前の話

1002 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 00:27:38.90 ID:WTxAQl/h0.net]
>>981
UnicodeのTSVで出せばいい

1003 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 04:11:44.10 ID:Bfsj9FyQ0.net]
会社で新しくC++MFCからC#に移行しそうなのですが、結構違いますか?

1004 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 04:41:11.49 ID:8GgErYEHa.net]
むしろ共通点はほぼないと思いますよ。
UIにWindows Formを使うならWin32の知識が無駄にはならない程度

1005 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 04:51:25.43 ID:nU5m13/Jd.net]
>>988
MFCのDocument/View構造とWPFのMVVMは考え方がほんのちょっと似てるかも

1006 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 05:16:17.86 ID:Bfsj9FyQ0.net]
ありがとうございます
やっぱり違うところもそれなりにあるんですね
本格以降の前に勉強しないと…



1007 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 09:10:07.63 ID:0HR3aWgk0.net]
フレームワークのバージョンに右往左往

1008 名前:デフォルトの名無しさん [2022/02/10(木) 18:20:37.30 ID:hh6EUNrwa.net]
Javaと同じ人が作っただけあって
Javaのが似てると思います

1009 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 19:31:29.55 ID:G6G2NR290.net]
MFCとC#のWPFなら基本的にまるで別物だよなぁ
WinFormsも別物だけど、C++よりはC#の方が簡単だと思うけど
ラムダ式やらその辺の書き方に付いていけない奴は結構いるらしい
staticおじさんにはC#は辛いかも知れないw

1010 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 19:33:58.19 ID:vwYTLp7Ia.net]
JAVAじゃなくてDelphiでしょw
JAVAやC++はむしろ反面教師として否定的継承をしてるのがC#

1011 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 19:37:23.72 ID:vwYTLp7Ia.net]
MFCのカオスに耐えられた人がC#は理解できないとかないと思うよw
ラムダ式なんてむしろC++やってた人には馴染みやすいでしょ

1012 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 19:57:50.08 ID:y+gM+mODa.net]
mfcを初めて触ったときはなんて簡単にwindowsアプリが作れるんだって感動したものだけど、c#はそれより数十倍簡単だからな
mfcとc#はまったく違うけど、mfcできるなら一瞬で使えるようになるよ

1013 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 21:50:11.16 ID:Wm6mdcT10.net]
MFC今も現役なの?

1014 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 22:05:49.13 ID:WTxAQl/h0.net]
今のC++はラムダ式も型推論もあるもんね

1015 名前:デフォルトの名無しさん mailto:sage [2022/02/10(木) 22:41:54.23 ID:VfTItntg0.net]
拡張子がcppってだけのC言語使い方だときついでしょ

1016 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 58日 23時間 48分 33秒



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






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

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

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