22/01/05 07:38:49.44 t5pkfnoc0.net
JSなんて使いたくて使ってるやつはいないって事だよ
ほかに選択肢がないから仕方なく使ってるだけで
そもそも本来TSのようなトランスパイラはこの世に存在し得ない存在
401:デフォルトの名無しさん
22/01/05 09:23:21.76 bvaGXVet0.net
なんでc#スレで一生懸命TSの悪口言ってるの?
402:デフォルトの名無しさん
22/01/05 09:53:21.58 SNzZltS0M.net
欠陥指摘できる俺すげー君だろw
スルーしとけ
403:デフォルトの名無しさん
22/01/05 09:57:56.22 5ORhcVX2D.net
WinFormのlistViewをタブレットで使いたいのですがlist部分を指で上下してlistをスクロールする事は出来るでしょうか
スクロールバーで上下出来るのですがスマホのように出来ないかなと
404:デフォルトの名無しさん
22/01/05
405:10:15:33.57 ID:Zzh6nSy3M.net
406:デフォルトの名無しさん
22/01/05 10:17:21.15 Zzh6nSy3M.net
>>396
しつこく返してくる奴がいるから仕方なく付き合ってやってる
そいつがTSの型は安全でないという当たり前の事実を素直に受け入れれば俺もこんなレスバしなくても済むんだが
407:デフォルトの名無しさん
22/01/05 10:34:58.47 TbL+VltAd.net
TypeScriptなしではJS開発やってられなくなってしまったな
特にチーム開発
408:デフォルトの名無しさん
22/01/05 11:00:24.24 dUhlmVC50.net
>>398
一応標準でサポートされてるはずだけど
なんかスクロール遅いし慣性の扱いが下手糞だけど…
409:デフォルトの名無しさん
22/01/05 11:06:50.05 llHLsWPPp.net
>>400
おまえは相手がうんと言うまでスレチ議論続けるつもりか
410:デフォルトの名無しさん
22/01/05 11:43:03.34 93Qk8F8ua.net
例えばリストビューを作るときにアイテムのTagに日時を代入しとく
そうしたら選択したアイテムの日時がすぐにわかるから。こんなのはよくやる手法だよね
で、実際にアイテムがクリックされたときにTagを読んで日時を取得しようとしたらstringだったりDateTimeだったりして型エラー。バリデーションwが必要になる
こんなの(アホがプログラミングしたら)c#でも日常茶飯事だからな
tsでも同じ。アホがプログラミングしたらバリデーションwは必須だし、普通にプログラミングしたら不要
411:デフォルトの名無しさん
22/01/05 11:54:44.06 ZRZErZAVM.net
>>404
君は議論の焦点を全く理解してないようだね
412:デフォルトの名無しさん
22/01/05 12:07:48.08 2gwkfiFL0.net
すまんが、昔、Linux + LLDBでのC#のデバッグ方法が公式サイトに書かれていたようが気がするんだけどさ
そんなようなページってどこにあるのか、誰か知ってたら教えて!!!
413:デフォルトの名無しさん
22/01/05 14:47:28.15 kRupjksVa.net
昔OSも乗ってない小規模組み込みをアセンブリでずっと書いてたけど、
アセンブリには当然型なんて概念そのものが存在しないが、
だからintとBCDを間違えたり、構造体のポインタを別の構造体のポインタと勘違いする
ミスが多いかと言うと、そこは意外とそうでもなかったりする。
それより生産性に対する影響の方が大きい印象だね。
まあこれは小規模かつ基本1人の開発だったからそうだっただけで、大規模かつチーム開発だと
話が変わってくるのかもしれない。
この辺はゲーム業界の人が詳しそうだね。
あの世界は下手したら90年代の終わり頃までアセンブリでやってたはず
414:デフォルトの名無しさん
22/01/05 15:04:40.06 XpPjLRYm0.net
バグには様々な要因があるから、不正な型が代入された場合だけを過度に心配してもね
415:デフォルトの名無しさん
22/01/05 15:08:39.22 C1Xb8B3u0.net
型を気にしない馬鹿はテストも当然にしないから
416:デフォルトの名無しさん
22/01/05 15:14:15.12 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:デフォルトの名無しさん
22/01/05 15:54:13.43 qaVNdYDmM.net
参照型の変数にnullが入ってるかもしれないし、C#の場合は例外の型もドキュメントの記載を信じるしかないよね
結局は程度問題なんだよ
前者のnullの問題についてはnull許容参照型を使えば型として区別できるけど、null非許容だからといって絶対にnullが入らないわけではなく簡単にnullを混入させることができる
彼の大嫌いなTSと同じく、特にランタイムチェックのない紳士協定だ
419:デフォルトの名無しさん
22/01/05 16:24:00.16 kRupjksVa.net
っていうかこれたしか元はvarの話だよね。
繰り返しになるけど、元々の問題提起、つまり
「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」は正しいよ完全にw
匿名型を受ける場合以外のvarの目的は、「見れば分かる」冗長な繰り返しを避けて
シンプルにすること。
「かっこ悪い」みたいな中二病的動機で意地でも型を明示しないことに固執する奴はアホだが、
困ったことに現実にはそういうアホが結構いる。
この辺LINQの乱用が嫌われるのと同じなんだろうねw
シンプルにするための道具を使ってわざわざ難解にするバカw
たぶん彼はシンプルとは文字数が少ないことだと倒錯している
420:デフォルトの名無しさん
22/01/05 17:12:39.57 x9hFTlB3d.net
varの型が分からん分からんってこいつメモ帳で開発してんのか?
421:デフォルトの名無しさん
22/01/05 17:24:59.67 5TZJeeZKa.net
IDEだけでしかソース見ない奴は問題ないんだよ
ぐぐってブラウザ上で見るソースなんてマウスあてても型表示してくれないからな
422:デフォルトの名無しさん
22/01/05 17:28:23.80 C1Xb8B3u0.net
どんだけ小さなプロジェクトしか関わったことないのか知らないが
code reviewするときに数百、数千というvarをおまえはいちいちマウス乗せてチェックしてるのか?
型を気にしないならオープンソースもコードを確認せずビルドして使うタイプだろう。
OSS品質=誰かがチェックしてくれるはず=テストしてない=今のMSのコード品質
423:デフォルトの名無しさん
22/01/05 17:32:31.52 5TZJeeZKa.net
var使ってるぐらいで崩壊するようなとこは大きいの作れないから気にする必要ないよw
424:デフォルトの名無しさん
22/01/05 17:43:11.47 t5pkfnoc0.net
varなんて大抵は右辺見たら型わかるやろ?
何が分からんのだ?
425:デフォルトの名無しさん
22/01/05 17:48:48.78 C1Xb8B3u0.net
実験結果は分かった気になって実は全然分かってないでした。
でも分かった気になってるのでいつまでもなぜ分からないのだ?と問い続ける。
426:デフォルトの名無しさん
22/01/05 17:52:58.23 t5pkfnoc0.net
いやマジで何が分からんの?アホの子なの?
427:デフォルトの名無しさん
22/01/05 17:58:12.21 bWjicXEh0.net
つか、変数名見ればクラス名も分かる程度にしておくのが普通だから
マウスで調べなくてもだいたい分かる
428:デフォルトの名無しさん
22/01/05 17:58:55.28 C1Xb8B3u0.net
自演じゃないよ、彼はそう信じてるんだ。笑わないでほしい。
429:デフォルトの名無しさん
22/01/05 18:09:44.71 R56PdZ5+0.net
>>421
このスレの住人はお前のことを笑っているぞ
430:デフォルトの名無しさん
22/01/05 18:09:55.54 t5pkfnoc0.net
staticおじさんみたいなもんだな
431:デフォルトの名無しさん
22/01/05 18:21:06.82 C1Xb8B3u0.net
そして彼は笑いながら未テスト納品を繰り返す。そしてまたスパコンのデータを吹き飛ばす。
432:デフォルトの名無しさん
22/01/05 18:39:16.92 w42D9Ab/0.net
コードレビュー時にローカル変数の型をいちいち調べる意味がよくわからん
必要になるのってバグの原因調査する時だけでしょ
433:デフォルトの名無しさん
22/01/05 18:41:30.05 jje+EFiu0.net
TS、JSの型がゴミなのはわかる
c#のvarも俺は嫌い
普通に読みにくい
最近は派遣先会社のVSに仕込まれた強制変換スクリプト?で保存すると勝手にvarが明示的な型に置き換えられて
久しく見ない問題だったが
434:デフォルトの名無しさん
22/01/05 18:42:19.84 C1Xb8B3u0.net
何も知らないなら喋らなきゃ無知はバレない。
435:デフォルトの名無しさん
22/01/05 19:07:10.79 5TZJeeZKa.net
>>425
人のソース読むのにvarで省略されてるよりも、型が使われてる方が理解しやすい
もちろん>>420のようにしてくれればvarでも変わりゃしないけど、世の中そういうソースばかりじゃないし酷いのになると名前で型を騙されることあるからな
整数型にn、floatにfついてるからdがついてたらdoubleかと思ったらそれも整数だったり。そりゃないだろ・・・
436:デフォルトの名無しさん
22/01/05 19:19:51.10 fuEg19Cq0.net
限度の問題では?
MSの規約にあわせれば良いでしょ。
IEnumerable<T>で受けるべきなのにList<T>で受けてるとかそういう不適切な状態になってない限りvarで良いと思うけどな。
varは省略の為に使うのではなくて推論の為に使うんよ。
437:デフォルトの名無しさん
22/01/05 19:53:56.06 jje+EFiu0.net
varなんて右クリックメニューで元に戻せるから書くだけ書いたら明示的な記述に直しちゃった方がいいよ
438:デフォルトの名無しさん
22/01/05 19:57:59.86 kRupjksVa.net
>>429
推論はするよりしない方が脳への負担が低いはずなので、
君の説を採るとvarは全面禁止すべきという結論になってしまうよw
少なくともコードの読み手(書き手ではなく)にとってのvarのメリットは
右辺の型が分かりきっている時に左辺の方でもくどくどそれを繰り返される冗長さが回避されることだ。
439:デフォルトの名無しさん
22/01/05 20:04:49.66 lXYh5E9eM.net
型推論
URLリンク(ja.wikipedia.org)
440:デフォルトの名無しさん
22/01/05 20:09:49.34 34fypwCFM.net
書くやつは楽
コピペ盗作するやつは脳味噌が必要
var大勝利じゃん
441:デフォルトの名無しさん
22/01/05 20:11:27.06 jje+EFiu0.net
>>432
そもそもこれがゴミなのか有効なのか?
って議論がなされないまま突然導入されてほら使えだからな
VSの右クリックメニューにもvarを元に戻す機能が付いたってことはあんまり評判よくないだろコレ
442:デフォルトの名無しさん
22/01/05 20:16:51.17 eampx4mf0.net
議論に参加できるぐらい出世しろ
443:デフォルトの名無しさん
22/01/05 20:20:48.72 jje+EFiu0.net
>>435
お前の会社は社長が1番技術力高いのか?
444:デフォルトの名無しさん
22/01/05 20:41:21.39 P9kF/5N50.net
varで推論しないほうが脳への負担が低いというのはどういうことですか?
445:デフォルトの名無しさん
22/01/05 20:42:40.80 C1Xb8B3u0.net
>>437
型が分からなくてもイライラしない人はそもそも負担がありません。
446:デフォルトの名無しさん
22/01/05 21:00:44.67 jje+EFiu0.net
アホが作った無意味なマトリョーシカクラス追わなくて済むからな
447:デフォルトの名無しさん
22/01/05 21:16:57.60 w42D9Ab/0.net
15年近く前から導入されてるものに対して
いまだに文句を言い続ける「熱量」には感心する
448:デフォルトの名無しさん
22/01/05 21:20:57.24 jje+EFiu0.net
>>440
正直、クラスから嫌いです
構造体以上のメリットを全く感じたことない
449:デフォルトの名無しさん
22/01/05 21:56:49.45 LjEcMnXra.net
>>441
そこは「しっくりこないんです」、と書いて欲しかったw
450:デフォルトの名無しさん
22/01/05 22:09:26.64 R56PdZ5+0.net
staticおじさん生きてたのかw
451:デフォルトの名無しさん
22/01/05 23:32:21.89 9KUuQ3bM0.net
わかってる奴がvar使うのはOK
馬鹿がvar使うのはNG
452:デフォルトの名無しさん
22/01/05 23:33:33.69 HyMzvNe00.net
じゃあdynamicつかうね
453:デフォルトの名無しさん
22/01/06 02:10:11.97 jegOl+WX0.net
>>431
推論させる方が脳への負担は低いよね?
型がわからなくてイライラすると言うけど、解る必要ある部分ではないのでは?
極端な�
454:bメソッドの入口と出口は型が決まってんだから。
455:デフォルトの名無しさん
22/01/06 02:36:29.67 Vr7+jyV40.net
そのメソッド追っ掛けるのが面倒だって話ではないのか
456:デフォルトの名無しさん
22/01/06 02:50:36.77 ChZ1cCgVa.net
>>446
推論の主語が変わってるよw
あなたの言ってる推論の主はコンパイラ(開発環境)だよね?w
ついでに言うと、あなたがたぶん言いたいことは「書く時の負担が減らせる」ということ。
だからそうじゃなくてコードの読み手にとってのメリットが重要なのよw
そう書いてるよね?>>431
だってそうでしょ。
コードを書いてる時の書き手にとってはどの変数がどの型かなんて
当然自明なんだからvarにはメリットしかないよ。そんなの当たり前でしょw
結局varについても意見が割れるのは前にも書いた(>255)こういう意識の差があるからだろうね。
世の中KISSなんてただのお題目だと思っててなぜ重要か体感レベルで実感できない人が結構いる。
457:デフォルトの名無しさん
22/01/06 03:46:43.08 Jy6L3sVt0.net
>>448
>コードを書いてる時の書き手にとってはどの変数がどの型かなんて当然自明なんだから
馬鹿はvarを使えばエラーが出ないという理由でvarを使っているだけで型なんか理解もしとらんのだよ
458:デフォルトの名無しさん
22/01/06 06:07:27.91 WSidiaMA0.net
>>449
その発想はなかったわ
バカの考えは馬鹿にしかわからないのだな
459:デフォルトの名無しさん
22/01/06 08:30:02.04 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:デフォルトの名無しさん
22/01/06 09:18:51.63 BMV6DlOj0.net
全く論点が不明
コードレビューでは全てのvar変数をマウスオーバーして型を確認しなければならないと言うのもシチュエーションとして理解不能、猿が働いてる企業なのか?
そもそもそんな使用の是非の議論が必要な話なら世の中にvar禁止の組織はさぞかしあるんだろ?
御託並べる前にgithubでvar禁止にしてるC#プロジェクトでも持ってこいよw
461:デフォルトの名無しさん
22/01/06 09:23:52.72 BMV6DlOj0.net
この手の「一人のstaticおじさんに大勢が説教する図」はさまざまなスレで見かけるけどまったく生産性ゼロで不毛だよな
ほかに同調する奴いない時点で自分が間違ってる可能性か考えろよ
まず自分を疑うのはエンジニアの基本やろ
462:デフォルトの名無しさん
22/01/06 09:37:12.69 VWdkYx+r0.net
>>440
また低能馬鹿論理でましたね。WPFでも同じ馬鹿なこと言ってる人がいました。
463:デフォルトの名無しさん
22/01/06 10:00:08.90 WPmMIBV7M.net
>>451
C#だとresultの型は推論できないんだっけ?
464:デフォルトの名無しさん
22/01/06 10:02:24.36 VWdkYx+r0.net
>>ID:BMV6DlOj0
論点すら分からない馬鹿でも喋らなきゃ無知はバレない。
465:デフォルトの名無しさん
22/01/06 10:07:20.21 sIABQ4ka0.net
初心者スレで無知晒しても別に構わんだろ
ちゃんと教えてやれよ
466:デフォルトの名無しさん
22/01/06 10:10:39.02 jegOl+WX0.net
>>455
resultというか、メソッドの宣言的には省略不可。
なので、returnしているということはvarでも良いかもしれんな。
467:デフォルトの名無しさん
22/01/06 10:11:51.45 VWdkYx+r0.net
>>ID:BMV6DlOj0
いちいち捏造してはマウンティングしてきて
相手を猿だの罵倒してくるクソ野郎にはクソレス返しで十分。
468:デフォルトの名無しさん
22/01/06 10:36:42.54 cm3DDwaa0.net
議論用でやれば
凄い流れるんだけど
469:デフォルトの名無しさん
22/01/06 10:38:33.11 BMV6DlOj0.net
数千のvarをマウスオーバーして型を調べるってんだからそんなもん猿以外の何者でもないだろw
それでカネ貰えるんだからいい仕事だなあ
で、var禁止のC#プロジェクトは見つかったのか?
さっさと探してこいよ
470:デフォルトの名無しさん
22/01/06 10:42:17.16 VWdkYx+r0.net
ID:BMV6DlOj0 ←無職のクソ野郎が仕事を語る
471:デフォルトの名無しさん
22/01/06 10:52:01.70 XJZjWgUBd.net
戦犯は>>323
472:デフォルトの名無しさん
22/01/06 10:58:22.55 VWdkYx+r0.net
>>463
馬鹿の壁の社会実験。参加してくれた馬鹿に感謝する。
473:デフォルトの名無しさん
22/01/06 11:41:47.82 CKbwlJU4M.net
>>458
メソッドの宣言?
ここの話だろ
> IQueryable<Bar> result = xxxx.Where(predicate).Take(10);
xxxx の定義によるけど普通は var で良くね?
474:デフォルトの名無しさん
22/01/06 12:18:50.36 +o9sIybza.net
IQueryable<Bar> result = xxxx.Where(predicate).Take(10);
↑だとこの一行でBarとってるとわかる
var result = xxxx.Where(predicate).Take(10);
これだとなにかを取ってるとしかわからない。たった数文字の差だけど受け取れる情報が多くなって読みやすい
俺みたいなエスパー能力低い人間にとっては普通に書いてくれた方がありがたい
475:デフォルトの名無しさん
22/01/06 12:34:17.18 B4j0C8aZM.net
試してみたけどpredicateの型を明示的にExpression<Func<T>>にしてないと
WhereがIEnumelableで解釈されてだめやね
resultの型をIQueryable指定しててもコンパイルエラー
Whereにlambdaのリテラル入れた場合は varでOk
476:デフォルトの名無しさん
22/01/06 12:57:35.75 jegOl+WX0.net
>>465
すまん、そこ間違えた。varで良い。
言語によってはTask<IQuerable<Bar>>が要らない言語があるんよ。
確かにBar取ってるとわかるが、Barを取っているとわかる必要はある?
>>467
スマホで書いたらダメだな、すまん。
477:デフォルトの名無しさん
22/01/06 13:20:28.91 +o9sIybza.net
Barだと分かる必要はないけど分かったほうがありがたい
無地のジグソーパズルでも問題なく完成できるけど、絵柄があったほうがありがたいのと同じ
478:デフォルトの名無しさん
22/01/06 13:50:37.41 A4g6fK0TM.net
わかる必要はないのわかったほうがありがたい?
初心者にありがちな必要ないのにやけに細部にこだわるタイプなのかな?
479:デフォルトの名無しさん
22/01/06 14:04:18.23 +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:デフォルトの名無しさん
22/01/06 14:08:45.09 t38juXmg0.net
class HogeBase
{
・・・
}
class Hoge : HogeBase
{
・・・
}
static Hoge GetHoge()
{
return new Hoge();
}
の場合
HogeBase hoge = GetHoge();
だと右辺の型確認しない主義の人はhogeの実態がHogeBase型だと勘違いしたまま作業することになるからまずいんじゃないの?
481:デフォルトの名無しさん
22/01/06 14:13:52.71 HsEWm91X0.net
それは勘違いじゃないんじゃないの?
482:デフォルトの名無しさん
22/01/06 14:15:52.97 +o9sIybza.net
それはHogeBaseとして扱いたいからHogeBaseに入れてるんでしょ
中身はHoge2やHoge3かもしれない。Hogeと知らなくてもいいよ
483:デフォルトの名無しさん
22/01/06 14:19:47.84 t38juXmg0.net
virtualメソッドがHogeとHogeBaseで違う動きするよ?
virtualがHogeBaseの動きする前提でレビューしていいのかい?
>>473
>>474
484:デフォルトの名無しさん
22/01/06 14:29:24.20 HsEWm91X0.net
何か問題が?
それで困るなら派生させちゃ駄目
485:デフォルトの名無しさん
22/01/06 14:33:13.09 +o9sIybza.net
HogeBaseがさらにIBaseってインターフェース派生だったらどうするよ
IBase hoge = GetHoge();
hogeは何も実装できないInterfaceだから何の動作もしないはずなんて思うやつはいない
そもそも型に対して前提としてる考え方が違う
GetがHogeじゃなくてHogeBase返してきたら右辺見ても区別つかないよ
static HogeBase GetHoge()
{
return new Hoge();
}
486:デフォルトの名無しさん
22/01/06 14:33:43.94 t38juXmg0.net
>>476
へー、呼ばれるメソッドを間違えて認識しててもレビューできるんだ
すげーな
487:デフォルトの名無しさん
22/01/06 14:37:00.03 t38juXmg0.net
>>477
うん、だからレビューするなら真面目に右辺のメソッドの中身まで確認しろってこと
488:デフォルトの名無しさん
22/01/06 14:41:37.87 A4g6fK0TM.net
>>478
えっ?
多態使ったことないんか?
489:デフォルトの名無しさん
22/01/06 14:54:39.91 t38juXmg0.net
使ってるからこの話題持ち出したんだけど
>>480
490:デフォルトの名無しさん
22/01/06 15:15:22.51 FKeKEAH4M.net
hoge.fuga();
って言うコードをレビューする時に実際に呼ばれるメソッドがまだ作られてないケースもあるんだけどどうやってレビューしてるの?
491:デフォルトの名無しさん
22/01/06 15:19:14.44 Rudq/m5Ya.net
>>451
人の話聞かない人?何が言いたいのかさっぱり分からん。
恐らく誰も、少なくとも俺は
「varを使うと自動的に左辺の変数が不明瞭になるからvarは一切使うな」
などとは言ってないの。
例えば>>431
むしろ現実的にはほとんどの場合varでいいんだよ。
それはコードの書き手にも読み手にもメリットがある。
論点は>>412に書いた通り、「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」だ。
492:デフォルトの名無しさん
22/01/06 15:20:25.57 77VqpiEwM.net
var嫌がってるのってもしかしてテストコードを書かない種族の人?
493:デフォルトの名無しさん
22/01/06 16:21:47.64 7whnQ4QD0.net
ワイはvarのほうが効率あがる
うちはそこはレビューよりも書き手優先でvar推奨(c#)
レビューも気にするならその段階でIDE起動してる
その現場でいちいち書かせたいんなら型明示を強制すればいいんでね
うちのとこはそんなとこまでちまちま言い合うほど暇じゃないし、それ以上にテスト充実してほしい勢
まあvarにわざわざ書き直させたりもしないねw
494:デフォルトの名無しさん
22/01/06 16:35:03.08 +o9sIybza.net
俺はvarが嫌なんじゃなくて読みにくいコードが嫌
で、読みにくい要因の一つがvarだということな
さらに自分がvar使うのが嫌なんじゃなくて他人が使ってるのが嫌。自分のコードだったらそんなこと気にしなくても読めるし
自分に優しく他人に厳しくがモットーなんだよ
495:デフォルトの名無しさん
22/01/06 16:36:42.04 OeKJG00I0.net
私C#良く分からないのですが、
そんな私がC#の説明することになりました。
クラスが参照型なのですが、どういう理由でこうなっているのか、
どういう意図でこうなっているのか、何と言って説明すればいいの?
本読んでも「参照型はポインタ的な雰囲気の何か」的な説明しかなくて
なんでこうなっているのか全く書いてなかった。
ちなみに、参照型=ポインタと言い切っちゃってもいいのかな??
よろしくお願いいたします。
496:デフォルトの名無しさん
22/01/06 16:38:59.36 OeKJG00I0.net
コード書くときはvarで書いて、
それをintとかlongに変換してくれるツールを作ればいいだけなのでは??
497:デフォルトの名無しさん
22/01/06 17:01:20.10 WCTWOnks0.net
>>487
書籍に例えるとどちらも目次に該当する
ポインターがページ数だとすると参照型ってのはタイトル
498:デフォルトの名無しさん
22/01/06 17:31:36.72 ae3RunliM.net
>>487
参照型はデータそのものじゃなくデータへの参照を持ってる型
C言語しか知らない人にC#を説明するんじゃなければわざわざポインタとの対比で説明する必要ないよ
499:デフォルトの名無しさん
22/01/06 17:35:14.31 WCTWOnks0.net
Varでも何でもいいけど読みながらその都度型を類推するよりは読む前に何をしてるか理解してから読む
大まかな流れを理解してから読むのとメクラ滅法に読むのじゃ時間が100倍も1000倍も異なるからね
書く時だってそう
500:デフォルトの名無しさん
22/01/06 17:50:32.30 rL+VifTwM.net
>>483
> 論点は>>412に書いた通り、「右辺の型が推測しづらいケースでもvarを使うのは不適切じゃないのか?」だ。
具体的にどういうケースを言ってるの?
501:デフォルトの名無しさん
22/01/06 17:51:43.10 VWdkYx+r0.net
>>492
型が分からなくてスルーできる脳みそが羨ましいわ~
502:デフォルトの名無しさん
22/01/06 17:55:43.01 h7LPoqLqM.net
そもそもvarがいいのって書くときだけじゃん
戻り値なんかでやられると最悪じゃん
503:デフォルトの名無しさん
22/01/06 17:58:59.73 XJZjWgUBd.net
結局宣言行まで戻って型見る面倒
ショートカットでいいような
504:デフォルトの名無しさん
22/01/06 18:41:32.37 6bRgcWdcM.net
>>493
そういうレスしかできない時点でなにも困ってないのがバレバレやん
505:デフォルトの名無しさん
22/01/06 19:04:48.00 VWdkYx+r0.net
>>496
トラが檻に戻ってないのに確認しないで施錠できる脳みそみたいな
506:sage
22/01/06 19:25:09.72 OeKJG00I0.net
>>489 >>490 返答ありがとうございます。
「参照型とは何か」を問うているのではなくて、
クラスが参照型なのは、どういう理由でこうなっているのか、
どういう意図でこうなっているのかを問うています。
クラスを参照型にしている思想は何かということです。
507:デフォルトの名無しさん
22/01/06 19:27:13.03 6bRgcWdcM.net
単なるアホかよ、NGしとくわ
508:デフォルトの名無しさん
22/01/06 19:34:15.72 VWdkYx+r0.net
>>499
推測しづらいケースが一つも思い浮かばない→推測をしたことがない→馬鹿の壁
509:デフォルトの名無しさん
22/01/06 19:34:56.89 jNRDp0FJa.net
>>498
逆に参照型じゃないならどうする?
多くのデータを抱えたクラスを毎度毎度コピーして渡すコピー型にでもする?
510:デフォルトの名無しさん
22/01/06 19:35:48.42 Bcw/lb7Z0.net
>>498
C# クラス 参照型
でググれば一番上にお前が望んでいる答えがあるぞ
511:デフォルトの名無しさん
22/01/06 19:38:04.42 OeKJG00I0.net
var addFunc(var a, var b){ return (a + b); }
とかはありですか??
512:デフォルトの名無しさん
22/01/06 19:42:33.04 Z0ROnAB1M.net
>>503
その宣言内容だけでどうやって型推論するのか
いくら何でもコンパイラに与える情報が足りなさすぎる
513:デフォルトの名無しさん
22/01/06 20:15:49.57 pGhYWD4M0.net
>>499
気付くのが遅いぞ
コレいつもの人だわ
514:デフォルトの名無しさん
22/01/06 20:27:11.92 VWdkYx+r0.net
>>505
おまえの型推論はバグってるな。
515:デフォルトの名無しさん
22/01/06 20:53:48.44 2nit6p8q0.net
>>471
これ、古より嫌われているシステムハンガリアンだから結構嫌がる人多いと思うよ
516:デフォルトの名無しさん
22/01/06 20:55:39.69 WSidiaMA0.net
winapiのクソキャストにはハンガリアンぐらいが丁度いい
517:デフォルトの名無しさん
22/01/06 20:59:03.64 snULIxlRa.net
>>487
問題設定自体を変えた方がいいかもね。
なぜ値型ではだめなのか?と。
値型だと少なくとも「フールドを増やしたサブクラスの値を
ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。
というか、こういう禅問答みたいな話は(たぶん重要なんだろうとは思うけど)
初心者は後回しにした方が絶対にいいと思う。
518:デフォルトの名無しさん
22/01/06 21:28:53.73 TiVU33P2M.net
>>498
参照型を理解してないんだからそれを理解するのが先
クラスが参照型なのはポインタ型や値型だと困るから
文字列が値型だとどうなるか考えてみれば?
ポインタを理解してるならすぐわかる
519:デフォルトの名無しさん
22/01/06 23:17:09.17 mv8eR6oh0.net
C#のスレでメソッド名の先頭が小文字から始まってる時点で、
・意識が低い
・まともに調べたり勉強していない
どちらかであることを認識すべき。
520:デフォルトの名無しさん
22/01/06 23:20:50.62 VWdkYx+r0.net
varがある時点でやっつけ専用言語なのに
521:デフォルトの名無しさん
22/01/06 23:32:25.27 8QDluGwV0.net
>>512
???
522:デフォルトの名無しさん
22/01/06 23:51:42.25 t38juXmg0.net
>>512
今時C++でさえ型推論付いてるというのに
523:デフォルトの名無しさん
22/01/06 23:53:35.71 VWdkYx+r0.net
どうしてもc++でやっつけコード書きたいから追加した仕様だろ
524:デフォルトの名無しさん
22/01/07 00:03:01.88 IK3vjsT30.net
今時型推論ないほうが珍しいだろ
525:デフォルトの名無しさん
22/01/07 00:09:41.99 qow9t6Ky0.net
やっつけコードしか書かないプログラマだらけの時代に何言ってんだ
昔はOSの無償サポートは10年とかだったのに今はすぐサポート切れの切り捨て。
なぜならやっつけコードで保守する気ないからだ。Win8とかEdgeとかWPFとかぜーんぶやっつけで作ってたからすぐ捨てられた。
526:デフォルトの名無しさん
22/01/07 00:23:20.23 bs4RpyaW0.net
型推論はやっつけなのか。
古き良きなのか、時代についてこれないのか
考え方は人それぞれよね
527:デフォルトの名無しさん
22/01/07 00:30:28.71 uWMJJK3h0.net
型推論だめってチームいやだわ
ギスギスしてそうw
528:デフォルトの名無しさん
22/01/07 00:32:56.56 IK3vjsT30.net
型推論付きの言語はやっつけ専用か
普段この人は何言語でやっつけじゃない開発してんだろう
529:デフォルトの名無しさん
22/01/07 00:40:49.40 YgufRjXg0.net
最近は「int key = 0」でなく「Key key = new(0)」みたいに書いてるからvarは使わんな
530:デフォルトの名無しさん
22/01/07 06:45:05.41 j4Wq+RBJM.net
>>520
・老害のCOBOLer
・自称スーパープログラマーな組込C使い
・Javascriptのvarと混同してるボンクラPG
531:デフォルトの名無しさん
22/01/07 08:15:52.34 y6x0s+uzd.net
var一切使わない人ってラムダの引数型もクソ真面目に書いてそう
532:デフォルトの名無しさん
22/01/07 09:50:10.76 qow9t6Ky0.net
スップw 初心者スレでラムダw
533:デフォルトの名無しさん
22/01/07 10:00:38.21 qow9t6Ky0.net
知らないうちにLINQスレもなくなってる。過疎なム板で落ちるとかよほど人気ないのか。
>>523 そうやってガキみたいに初心者相手にマウンティグして全部追い出したんじゃないのか。
534:デフォルトの名無しさん
22/01/07 11:42:40.26 yxixByMw0.net
おーっとここでガキマウントです
535:デフォルトの名無しさん
22/01/07 11:50:35.85 FRwoYiaWM.net
>>524
初心者のくせにラムダなんて生意気だ!
ってマウントですね
536:デフォルトの名無しさん
22/01/07 12:38:03.65 6zNCaZbD0.net
>>509
>> 値型だと少なくとも「フールドを増やしたサブクラスの値を
>> ベースクラスの型の変数に入れる」なんて芸当は難しくなるね。
すみません。良く分かりません。クラスが値型のC++で
「フールドを増やしたサブクラスの値をベースクラスの型の変数に入れる」
なんて芸当、なんの問題もなくできると思うのですが
>>510
>>文字列が値型だとどうなるか考えてみれば?
文字列は内部実装は参照ですが、ユーザ見えは値型と同じだと思うんですが・・・
内部でどう実装されているのかは、そんなに説明するつもりもないし・・・
537:デフォルトの名無しさん
22/01/07 13:00:57.38 y6x0s+uzd.net
>>528
ベースクラスの変数に入れることはなんの問題もないけど逆の操作派生クラスに戻せなくなる
C++でもそうだけどnewされた時の型をベースクラスが覚えておかないとvirtualとかasが使えない
538:デフォルトの名無しさん
22/01/07 13:01:07.20 6zNCaZbD0.net
返答ありがとうございます。
>>501
>>逆に参照型じゃないならどうする?
c++ではクラスは参照型ではないですよね?
c#では構造体は参照型ではないですよね?
>>502
>> C# クラス 参照型
>> でググれば一番上にお前が望んでいる答えがあるぞ
配列が参照型なのを考慮すると、高速化・・・・
いや、そのサイト見てると高速化よりも
ポインタを無理やり追い出した弊害に思えてきました・・
539:デフォルトの名無しさん
22/01/07 13:03:35.17 qow9t6Ky0.net
c++に参照あるのに
540:デフォルトの名無しさん
22/01/07 13:03:54.16 y6x0s+uzd.net
>>528
型ってのはコンパイル時に大きさ(byte数と配置)が決まってないといけないという縛りがCのときからある
長さがいくつになるか分からんstringは参照型にするしかない
541:デフォルトの名無しさん
22/01/07 13:06:18.93 qow9t6Ky0.net
クラスや構造体の中にポインタもって動的にメモリを確保するだけである。型のサイズは変わらない。
542:デフォルトの名無しさん
22/01/07 13:08:54.79 6zNCaZbD0.net
>>529
>>C++でもそうだけど
まことに申し訳ないけど、何を言いたいのか全く理解できません。
クラスが値型のC++でも通用する話を出してきても???と思うんですが
543:デフォルトの名無しさん
22/01/07 13:09:35.44 IAj8vN+S0.net
>>530
生のポインタだとオブジェクトを移動して断片化したメモリの整理が出来ない
544:デフォルトの名無しさん
22/01/07 13:12:31.36 6zNCaZbD0.net
>>532
それだとクラスは値型でOKという話になっちゃいます。
545:デフォルトの名無しさん
22/01/07 13:17:33.66 6zNCaZbD0.net
>>535
ひょっとして私根本的な所を理解していないのかな?
class clsA { class clsB { class clsC { xxx }}}
みたいなクラスの内部にクラスを含んだクラスであっても
GCでガンガン割り当てられているメモリアドレスを
動かされると言いたいのでしょうか??
546:デフォルトの名無しさん
22/01/07 13:18:48.25 qow9t6Ky0.net
で参照の何を議論してるんだ?
c#のクラスが参照型なのが許せない!!って言いたいのか? キミがそういうのならそうだろう。キミの中ではな。
547:デフォルトの名無しさん
22/01/07 13:26:11.81 FRwoYiaWM.net
参照のほうが便利だからじゃね?
548:デフォルトの名無しさん
22/01/07 13:28:12.36 6zNCaZbD0.net
>>538
>> c#のクラスが参照型なのが許せない!!って言いたいのか?
質問を読んでそういう理解なのでしょうか?
質問を読まずにそういう理解なのでしょうか?
549:デフォルトの名無しさん
22/01/07 13:34:18.44 qow9t6Ky0.net
>>540
誰が質問をしたかすら知らないが、質問を質問で返す。つまりそれは構ってちゃんだ。
550:デフォルトの名無しさん
22/01/07 13:45:30.30 BJs69ghP0.net
流れを読まず、適当なところに突っかかる
つまりそれは荒らしだ
551:デフォルトの名無しさん
22/01/07 13:51:09.32 qow9t6Ky0.net
話題が分散しすぎて流れが分からないから聞いただけなのに酷い言い掛かりだ。
C#のクラスがなぜ参照型かだって?
C#は関係ないよ。.net側の仕様だから。vb.netでも同じ。で終わりの話。
552:デフォルトの名無しさん
22/01/07 13:54:19.71 FRwoYiaWM.net
>>543
その仕様をなぜ決めたかを聞いているんでしょ
こんなところで
553:デフォルトの名無しさん
22/01/07 14:01:57.02 IAj8vN+S0.net
>>537
そう頻繁では無いにしろ移動されない保証は無いね
554:デフォルトの名無しさん
22/01/07 14:24:42.02 qow9t6Ky0.net
>>544
え? コピーのコストが違うから分けたという単純な話だが。
Cだって配列のコピーは重いから引数で参照渡しされるだろう?
555:デフォルトの名無しさん
22/01/07 14:55:19.17 FRwoYiaWM.net
だからみんな単純な回答してるじゃん
あ、俺はどちてぼうやじゃないよ
556:デフォルトの名無しさん
22/01/07 15:17:14.00 6zNCaZbD0.net
>>546
>> コピーのコストが違うから分けたという単純な話
確かにそんな感じですね。
クラスが値型のc++が遅くて
クラスが参照型のc#が早いなんて
全く聞いたことないのですが、
MSがトチ狂って高速化を優先(それ以外を犠牲)したようですね。
557:デフォルトの名無しさん
22/01/07 15:54:45.54 FRwoYiaWM.net
トチ狂っててワロタ
558:デフォルトの名無しさん
22/01/07 16:20:24.15 EZdfrZXhM.net
>>548
C++ は値型のクラスを作れるけどそれをそのま他の関数に渡すなんてことはほぼやらんぞ
そもそもCでも構造体をそのまま渡したらコピーされるからコピーコストを言うなら参照型にしてるだろ
要はC/C++はそういう制御もプログラマに開放してるがC#は開放してない(コピーはそれなりのメソッドを呼び出す)ってだけの話
559:デフォルトの名無しさん
22/01/07 17:18:23.04 0zyZKkps0.net
牛乳飲んで落ち着いて
560:デフォルトの名無しさん
22/01/07 17:50:23.82 7Nc+xMj80.net
>C++ は値型のクラスを作れるけど
なんかもう、松永パソコン大先生みたいな話だな
561:デフォルトの名無しさん
22/01/07 18:17:48.54 EoqFVcXVr.net
割りきればいいものを、どうでもよく無駄にこだわるやついるよな
562:デフォルトの名無しさん
22/01/07 19:02:16.87 NAsC2Vwba.net
>>528
正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね
URLリンク(www.cloverfield.co.jp)
だから他の人が指摘しているstringのようなケースを無視するとしても、
値型で無理に継承を実現しようとすると、
(1) >>509に書いたように多態を諦めるか
(2) メモリ効率を犠牲にして、ベースクラスの変数のメモリ上のサイズは全ての派生クラスの
「共用体」のサイズとする。当然全ての型はinternalとして定義する必要もある。
こういうありがたくない制約が出来ちゃうでしょ
563:デフォルトの名無しさん
22/01/07 19:37:25.76 6zNCaZbD0.net
>>546 >>Cだって配列のコピーは重いから引数で参照渡しされるだろう? つ【std::vectorは参照ではない】
565:デフォルトの名無しさん
22/01/07 19:39:06.67 46kMC38t0.net
Unityの座標系って左下起点がデフォなの?
WindowsのGUIとのやり取りが凄い大変なんだけどなぜこういう仕様になってるのか教えてもらいたい
566:デフォルトの名無しさん
22/01/07 19:41:19.72 6zNCaZbD0.net
>>554
>> 正直C++よく知らんので調べてみたけど、だから↓にあるような「問題」があるわけだよね
菱形継承はいろいろと問題あるからね。菱形継承問題でググってみな
それにc#は多重継承できないからね・・・
567:デフォルトの名無しさん
22/01/07 19:42:11.75 46kMC38t0.net
>>555
push_backでコピーorムーブが発生するってことを言いたいん?
そのコピーコストを無視できないくらい大きなもの扱ってるときは正にC#の参照型Listのようにポインタ型のvectorを作るか、resize+インデクサアクセスで直埋め込みするじゃん
568:デフォルトの名無しさん
22/01/07 19:44:39.54 6zNCaZbD0.net
>>554
>> ベースクラスの変数のメモリ上のサイズは
いや、ベースクラスの変数のメモリ上のサイズは
ベースクラスが持っている変数のメモリ上のサイズの合計
(パディング考慮)でしょうが・・・
569:デフォルトの名無しさん
22/01/07 19:46:03.22 NAsC2Vwba.net
>>556
Unity知らんけど、印刷考えなきゃ最初から普通のデカルト座標採用してくれた方が
自然ではあるね。
むしろCRTなんていう前世紀の遺物の仕様をいまだに引きずってる方が「なぜ」のような気が
570:デフォルトの名無しさん
22/01/07 19:47:36.10 NAsC2Vwba.net
>>559
だから、そうだとしてそれにフィールドを追加した派生クラスの値を入れられるんですかと
571:デフォルトの名無しさん
22/01/07 19:48:35.26 6zNCaZbD0.net
>>558
引数で参照渡しされるだろう?
と言ってるので『std::vectorを引数にする時は参照渡しではない』という意味で言ってるが
572:デフォルトの名無しさん
22/01/07 19:54:08.11 46kMC38t0.net
>>562
C/C++には参照型も糞なく全部値型だからvectorそのままだと当然値渡しになるから言葉そのまま受け取ればそういうことになるけど
std::vectorって配列へのポインタを持ってるだけだから疑似参照型みたいなもんってことを言いたいんだろ
sizeof(std::vector<T>)のTが何であろうと固定で16byteくらいだし
573:デフォルトの名無しさん
22/01/07 19:54:17.18 6zNCaZbD0.net
>>561
つまり『ポインタを無理やり追い出した弊害に』だよなぁ
574:デフォルトの名無しさん
22/01/07 19:58:27.54 46kMC38t0.net
>>560
WindowsGUIの方がレアだったのか
C#でもSIMD命令呼べるようになったから_mm_add_psとかで一気にやりたいのにxとyで加算減算分けないといけないから出来ないのが�
575:c念すぎる
576:デフォルトの名無しさん
22/01/07 20:02:45.79 qow9t6Ky0.net
>>555
それC++やないか。しかもそれはC++でも配列やない、classや。
しかもC++はclassの参照渡しできるねん。
577:デフォルトの名無しさん
22/01/07 20:49:57.04 NAsC2Vwba.net
>>564
いや何でそうなるw
意味が分からん。
問題設定は「なぜクラスの変数はポインタなのか?」
だからポインタを使わないとどうなるかを示しているわけで、
実際はC#はポインタを追放なんかしてないよ
578:デフォルトの名無しさん
22/01/07 20:56:58.30 0Qlm+FNra.net
他人の話を聞かないタイプだから相手するだけ無駄よ
相手するならMSはトチ狂ってるってのに同意する方向じゃないと
579:デフォルトの名無しさん
22/01/07 21:12:41.39 qow9t6Ky0.net
だから.netの仕様だと。
言葉を借りるならポインタを追い出したのが値型だ。値型と参照型の機能の違いを仕様書で確認しなさい。
つまるところガベジコレクションからの分離。値型はスタックに乗せれる。確保も開放も高速。
つまり型が分からなくてもスルーできる奴は元から何も考えてないということだ。
580:デフォルトの名無しさん
22/01/08 00:48:49.28 T5N54j6i0.net
手動でメモリ確保して解放すんのめんどくせぇなぁって流れから、
全自動でメモリ確保と解放するC#が生まれたってだけの話じゃないの?
581:デフォルトの名無しさん
22/01/08 01:01:47.02 PQBT4Nc/0.net
>>570
Delphiを知らない馬鹿
582:デフォルトの名無しさん
22/01/08 01:03:56.61 IGpBQzM50.net
その後10時間もマウンティングゴリラしてたのかw
583:デフォルトの名無しさん
22/01/08 02:44:00.27 1bILROxT0.net
大昔にVBで作られた社内業務アプリをC#で作り直す事になったけど、
GUIはWinForms?WPF?WinUI?どれが一番メジャーなの?
WPFは死んでるとか言われてるようだし、WinUIは出たばかりで情報少ないっぽいし、古いけどWinFormsがいいの?
584:デフォルトの名無しさん
22/01/08 03:02:40.46 35B5Rb5B0.net
>>573
一番メジャーなのはWinFormsだけど
社内でよく使われているモニターが高解像度で
スケーリング表示をきれいにしたいなら
WPFかWinUIの方がいいよ
585:デフォルトの名無しさん
22/01/08 03:13:30.02 IEuXTu700.net
WinFormsって2番目だぞ
1番使われているのはWPF
社内アプリならとりあえず.NETのバージョンは6にしたほうがいいな
以前のとパフォーマンスが段違いなので
586:デフォルトの名無しさん
22/01/08 04:22:41.48 BHQyctLJa.net
>>573
何がベストかは結局何を重視するのかの関数だよね。
だからたぶん各選択肢のいわゆるpros and consを挙げてもらった方がよい気がする
コスト重視ならVBにもっとも近いFormがベストだ。
視覚効果や高DPI対応が重要ならWPFがベストだけど、学習コストが高いし、
はっきり言ってパフォーマンス的にまったく使えない分野もある。
WinUIは知らんw
587:デフォルトの名無しさん
22/01/08 06:02:52.91 35B5Rb5B0.net
一番楽チンなのはVS2008のコンバーター使ってVB6→VB.netにコンバートし、コンパイルエラーが発生する部分をちょいと修正する事
複雑な計算式使ってる場合に計算式の移植間違いを防げる
588:デフォルトの名無しさん
22/01/08 09:09:54.52 LhcZsKvbM.net
>>571
Delphi に GC あったっけ?
589:デフォルトの名無しさん
22/01/08 09:30:56.43 qvdwzZse0.net
>>578
ないと思う
590:デフォルトの名無しさん
22/01/08 09:56:39.05 PHIkImNk0.net
関係ないけど、こういう案件て段々広がって収拾つかなくなるか、
客がビビりはじめて結局ほぼ何もしてない変わらないみたいになるか、
ってなりがちよね
客にも腰据えてもらわないとぐだぐだになる
591:デフォルトの名無しさん
22/01/08 10:52:45.90 76ewE+lX0.net
Webで作るという選択肢はないのかな?
ある程度の規模があるところなら配布やサポートコストまで考えるとWebのほうが安上がり
592:デフォルトの名無しさん
22/01/08 11:16:30.10 6MOJW9HWM.net
社内業務アプリの内容によるけど今どきならWebだろうね
サーバーやDBMSの構築すらままならんとかならしゃーないけど
593:デフォルトの名無しさん
22/01/08 11:21:14.11 eHBvCcl00.net
クラサバとかの業務システムをWeb化するのはよくある話だが、スタンドアロンで済む
ただのGUIアプリをわざわざWeb化するのは割に合わんと思うがな。
それを上回るなにかメリットがないと。
594:デフォルトの名無しさん
22/01/08 11:32:33.07 Sgj71hWsa.net
データをサーバー管理するようなのならまだしも、普通のアプリなら普通に作ったほうが圧倒的に楽
595:デフォルトの名無しさん
22/01/08 12:01:38.53 6MOJW9HWM.net
今どき社内業務システムでローカルに閉じてるやつなんてある?
596:デフォルトの名無しさん
22/01/08 12:13:29.45 qVp9qlx6r.net
ローカルアプリから直接DB見に行くとかならあるんじゃね
ストアで更新配賦とか夢見たこともあったなあ
597:デフォルトの名無しさん
22/01/08 12:18:21.83 eHBvCcl00.net
>>573の業務アプリというのがどういうものかは>>573に聞いてみなけりゃわからんが、
業務で使う内製アプリがスタンドアロンだって例はいくらでもあると思うが。
逆に、なんで無いと思ったの?
598:デフォルトの名無しさん
22/01/08 12:18:22.15 Sgj71hWsa.net
社内業務アプリって言ってもいわゆる業務管理システムだけじゃないからな
ローカル完結なんていくらでもある
ちょっとしたツール類なんて全部そうだろ
599:デフォルトの名無しさん
22/01/08 12:45:29.08 +n5rVMIfd.net
Web化すべき案件なら最初からそっちで検討してるんだから余計なお世話やで
600:デフォルトの名無しさん
22/01/08 12:47:06.13 v0nm/uLMM.net
ツール類って具体的には?
そりや業務端末でも一般的なフリーソフトとか使ってることはあるけど、
業務用に作られたスタンドアロンなツールなんて機器制御関連以外では滅多に見かけないわ
システム連携が不完全なためにローカルなアプリやVBAで局所的な自動化をやってるケースはあるけど、結局その入出力は手動で他と連携するわけで、スタンドアロンとは違うでしょ
601:デフォルトの名無しさん
22/01/08 12:48:22.96 35B5Rb5B0.net
スタンドアロンで作るって言ってるのにしつこいな
602:デフォルトの名無しさん
22/01/08 12:50:35.22 VCGpsaaV0.net
VisualStudioでデバッグ中に変数やらクラスの中身を追っていくとき
大量にプロパティがあるとアルファベットの後半追うのに
▼で下まで流すのがかなりまどろっこしいんですが
スクロールバーもでないし・・・
もうちょっとスムーズにする方法ってあるんですかね
603:デフォルトの名無しさん
22/01/08 13:01:28.24 Sgj71hWsa.net
>>590
テキストファイルの文字数や段落数カウントするだけ
指定したウインドウのスクリーンショットを取るだけ
画像をpngにするだけ
ファイルをリネームするだけ
動画からフレームや動画を切り出すだけ
こういうの実際に作ったツールだな。フリーソフトでもできるけどそういうのも開発することあるんだよ
604:デフォルトの名無しさん
22/01/08 13:24:30.41 a4nwkm/0M.net
デスクトップアプリじゃなきゃダメな強い理由がなければ
WinFormならともかく今からWPFとかやるのは無駄だよね
605:デフォルトの名無しさん
22/01/08 13:25:51.14 a4nwkm/0M.net
>>592
ウォッチ式?
606:デフォルトの名無しさん
22/01/08 13:29:23.33 Rc/Af6wIM.net
>>593
そう言うのを社内業務アプリって言うの?
607:デフォルトの名無しさん
22/01/08 13:37:12.89 Kbht7+jO0.net
やっつけアプリ、やっつけツールと言います
608:デフォルトの名無しさん
22/01/08 13:38:58.06 OnpKeph7a.net
>>596
仕事に使うなら全部業務アプリだろ
区別する意味はないと思うが
609:デフォルトの名無しさん
22/01/08 14:16:08.90 sJWr1x2I0.net
業務といっても何を指すかで見当違いなことを言い合ってたりするからな
ちなみに俺は追記式で容量が10メガ超えるログファイルを待ち時間なしに検索&色分けフィルターするビューアー
が必要だったので作った
610:デフォルトの名無しさん
22/01/08 14:19:48.42 QfvG5fL40.net
プロパティの値についてなんですが
値が変わらないプロパティに関しては
Visual Studioの右側のプロパティから変更するのか
それともForm1.csのなかで変更するのどっちが王道でしょうか?
611:デフォルトの名無しさん
22/01/08 14:22:07.76 LyVlYLKR0.net
>>600
Visual Studio
612:デフォルトの名無しさん
22/01/08 14:45:55.87 Sgj71hWsa.net
変更したってことを把握しにくいからできるだけForm1.csだな
613:デフォルトの名無しさん
22/01/08 18:25:53.14 W7HGPhnA0.net
>>595
変数にカーソル合わせてポップアップででてくるクラスや変数の中身がでますよね
デバッグ中にそれで実際に入っている値を追っていくことがよくあるんですが
大量にあるとアルファベット順に並んでいるせいで
たとえば コンボボックスでいうと Selected~まで見に行くのに
Sまで下りてこなければならないですよね
ポップアップにはスクロールバーもでないから毎回スクロールしないとならなくて
それが面倒で・・・
614:デフォルトの名無しさん
22/01/08 19:02:53.17 9AShM9M8a.net
デバッグで実行止めてるときに、デバッグ->ウインドウ->ウォッチでウォッチ1開いて、そこに見たい変数をドラッグ&ドロップ
配列の一部だけ見たいなら.Skip(100).Take(20)みたいに適当なlinqでもつけて
615:デフォルトの名無しさん
22/01/08 21:28:00.33 WWAiwq7Z0.net
ArrayクラスのResizeメソッドの引数が参照渡しなのは何故ですか?
他のReverseやSortメソッドが値渡しなので統一されていないと感じてしまうのですが
616:デフォルトの名無しさん
22/01/08 21:31:36.72 7PajA1910.net
ReverseやSortは要素を置き換えるだけで済むけど
配列は固定長である以上Resizeするには新しく配列を作り直すしかない
617:デフォルトの名無しさん
22/01/08 22:55:18.70 W7HGPhnA0.net
>>604
レスありがとうございます
ウォッチ、使ったことがなくて知らなかったです
クイックウォッチでも簡単に見渡せるんですごく楽になりました
感謝です
618:デフォルトの名無しさん
22/01/08 23:12:33.36 WWAiwq7Z0.net
>>606
ありがとうございました
納得しました
619:デフォルトの名無しさん
22/01/10 02:13:23.67 LmDP/A0i0.net
.net6だとプロジェクト作成時にいつものusing systemとかが無かったんですけど暗黙的に使えるようになったか、あるいはどっかに記述を引っ越したんですかね?
620:デフォルトの名無しさん
22/01/10 03:14:56.13 t77ZMTfv0.net
global usingとかいう迷走の果てみたいなものがあったような覚えがある
621:デフォルトの名無しさん
22/01/10 16:59:27.76 9R5shyc4d.net
>>609
.csproj見てみ
622:デフォルトの名無しさん
22/01/10 18:05:28.98 LmDP/A0i0.net
>>611
Implicitusingsってやつですか
このglobal usingってのはユーザが任意に追加できるんですかね?.net標準分だけ?標準だけだと有り難みがイマイチ・・・
623:デフォルトの名無しさん
22/01/10 18:14:37.58 Fbfc1ztE0.net
implicitなのはSDKで固定のはず
global using自体は.csprojに自由に書けるよ
URLリンク(ufcpp.net)
624:デフォルトの名無しさん
22/01/10 18:32:28.44 Fbfc1ztE0.net
というか.csにも普通に書けるよ
625:デフォルトの名無しさん
22/01/10 19:26:41.39 mJ9SvVvR0.net
というか.txtにも.hogeにも普通に書けるよ
626:デフォルトの名無しさん
22/01/10 19:32:53.98 Yn6t3tioM.net
>>614
書けるけど1つに書くと全ファイルに影響するのは怖くね?
なんかやりすぎ感ハンパない
627:デフォルトの名無しさん
22/01/10 20:21:18.79 mJ9SvVvR0.net
>>615
悪ふざけじゃなくて、書いたらちゃんと認識されるよって意味ね。
628:デフォルトの名無しさん
22/01/10 21:15:40.34 zf/OU/S30.net
え、readme.txtとかに書いてても影響しちゃうの?
629:デフォルトの名無しさん
22/01/10 22:20:21.82 pzAlxVbU0.net
何度も同じことを書かせる仕組みはプログラムの基本的な考えと違うと考えればglobal usingは妥当
630:デフォルトの名無しさん
22/01/10 22:45:07.71 zjcR70ev0.net
global usingもあれば楽だけど書ける場所は限定された方が良かったような
631:デフォルトの名無しさん
22/01/11 06:33:56.47 TdDX7t/9M.net
>>619
それなら.csprojとかでいいでしょ
どこかに書いたら全体に影響するのはなんか違う
632:デフォルトの名無しさん
22/01/11 07:14:14.80 qLFRpNWYM.net
もうあっちゃう時点でキモいから書けるなら制限なしでいいでしょ
633:デフォルトの名無しさん
22/01/11 08:18:04.81 34v9AEL90.net
VS2022からC#やる人は結構わかりにくいやろなぁ。
なぜimportもusingもなにも書いてないのに、Console.Writel...
みたいにいきなり書けるのみたいな。
グローバルにいきなり書いてるがクラスに属さないグローバル変数はあるのないのとか。
634:デフォルトの名無しさん
22/01/11 09:25:26.02 7v4JZSk/0.net
えーーーんTT
Console Programつくろうとしたらmain()がないよー><
なにこれ、こわい><
たすけてー
635:デフォルトの名無しさん
22/01/11 09:36:34.63 qBZtvv4T0.net
従来のようなプロジェクトテンプレートでもプロジェクトを作れるようなオプションなりテンプレートなりあればいいのにね
テンプレートぐらい自分で作れって?面倒じゃん
636:デフォルトの名無しさん
22/01/11 11:21:28.14 MvizqUHc0.net
>>625
.NET 5.0をターゲットにプロジェクト作成してから.NET 6.0にターゲット変更する
URLリンク(docs.microsoft.com)
637:デフォルトの名無しさん
22/01/11 11:57:17.32 7v4JZSk/0.net
C#作ってる人たちはC#をスクリプトにしたいの??
何を目指してるのかよくわからない
638:デフォルトの名無しさん
22/01/11 12:22:25.87 4qGoqi+ca.net
なんでもできることを目指してるんだよ
もちろんスクリプトとしても使えるぞ。アプリの拡張プラグインをc#スクリプトにするとか簡単にできる
639:デフォルトの名無しさん
22/01/11 13:10:40.24 Grp1ZbCtM.net
>>627
IDEによるコード生成を完全に排除しようとしている、と考えると理解しやすい
最近の内製系の開発では、コードの自動生成は避けてソースを極力コンパクトに保とう、という考え方が主流になっているんだよ
640:デフォルトの名無しさん
22/01/11 13:50:01.49 luTEChNva.net
何で自動生成やめたらコードがコンパクトになるの?
そんなわけないと思うんだけどw
641:デフォルトの名無しさん
22/01/11 13:58:30.81 /T2lNEPNM.net
コードの自動生成と言うか簡便さを求めてるのだろう
他の簡易な言語と比べると不必要な部分があるからそれを簡略化する
ボイラープレート(決まり切った特定のコードの記述 )やおまじないのような入門者にとって敷居の高いものを減らす
それ自体は問題ないはず
C#は言語的に無駄な記述が多すぎたから一気に来たんだろうな
642:デフォルトの名無しさん
22/01/11 14:02:02.73 /T2lNEPNM.net
ファイル内のnamespaceは一個なのにそのためにインデントが一つ増えてエディタでのコードが見通しが悪くなる
こんなの早くから導入してくれと思ってた
643:デフォルトの名無しさん
22/01/11 14:14:24.58 Jt6jcb4u0.net
てかusingみたいに冒頭宣言みたくできればよかったのにな
644:デフォルトの名無しさん
22/01/11 14:35:22.28 8rbbEYvA0.net
>>629
コードの自動生成はむしろ最近より進んでるやろ
gRPC周りやソースジェネレーターなんてその最たるもの
645:デフォルトの名無しさん
22/01/11 14:56:40.93 luTEChNva.net
>>631
それってVBの思想だよねw
ただしい選択とは思えんな
646:デフォルトの名無しさん
22/01/12 00:03:33.81 3DcpczOy0.net
スクリプトとしては異常に使いにくいよ、
特にアプリのプラグインとしては致命的。
やったことあるひとならわかるよね。
スクリプトだろうと1回実行したら、そのクラス型は解放されないから。
.netは型生成してしまうと、そのクラス型は基本的にアプリ終わるまで解放されない、
間違ったと思ってクラス型の部分のスクリプト変更して再実行しても反映できないのよ、アプリ終了しないと
クラス型が解放されないから。
647:デフォルトの名無しさん
22/01/12 04:14:45.93 qMg3RrrS0.net
コンパクトに書けるようになっていくのはいいと思う
元のC#は長く書くことを是としていたようで他の言語と比べると見栄えが悪い
648:デフォルトの名無しさん
22/01/12 10:32:03.61 2Wvp4VJl0.net
C#はいいんだけど、ASP他諸々がなあ
Authorize入れるのも一苦労
649:デフォルトの名無しさん
22/01/12 13:15:42.75 ++K/dCbX0.net
何に比べてどう苦労するの?
650:デフォルトの名無しさん
22/01/12 15:39:18.51 BLJCWDpKa.net
>>636
作り方しだいだけどアプリ終了しなくても
スクリプト実行&終了→スクリプトファイル書き換え→スクリプト実行で書き換えた編集が反映されるよ
開放されないってのと反映されないってのは別問題でしょ
651:デフォルトの名無しさん
22/01/12 18:17:31.66 C1xp3kdWM.net
おれはC#とASP.NET Core WebAPIが最もやりやすい
フロントは流石にReactとか使ったほうが楽だがJSもAltJSも罠だらけで洗練されてないね
652:デフォルトの名無しさん
22/01/12 22:52:04.20 JXqJfbQh0.net
>>636
まさにクラスを書き換えて実行するのをやってるけど
そんな現象に出くわしたことがないぞ?
653:デフォルトの名無しさん
22/01/13 06:18:56.80 hEm3mWj0M.net
>>642
糞アプリの名前も書けない無能の相手すんなよ
654:デフォルトの名無しさん
22/01/13 18:48:22.57 OK31jUfcd.net
質問です。
ピクチャーボックスに描画された物をボタン投下で色を印刷用に変更したいです。
元は背景色黒。線は水色。文字は黄色。四角は緑色塗りされてる物を
背景色白、四角は外枠黒線白塗り、他黒に変更したいです。
これを参考に弄って、背景色は直変更し、線は無事変更、文字は滲んだ感じになり、ほかはそのままでした。
URLリンク(dobon.net)
こんなのやるなら色を再設定して再描画した方が早いですかね?
イメージ的にはCADで書いてる物を印刷時に白黒反転するみたいな感じなんですが。
655:デフォルトの名無しさん
22/01/13 19:01:26.19 Lka/sttda.net
>>644
印刷の品質の観点から言っても「ビットマップを流用する」
という発想自体が不適切で、「描画処理を流用する」べきでしょうね。
656:デフォルトの名無しさん
22/01/14 07:06:02.10 uASM5+QH0.net
.net 6の Windows Forms の TreeView のサブクラスを作ったのですが、
サブクラスでOnMouseDownをオーバーライドすると動くのに、OnMouseClickをオーバーライドしても動きません。
何が原因でしょうか?
657:デフォルトの名無しさん
22/01/14 09:52:38.44 Wn0kK1te0.net
そもそもTreeViewのMouseClickはノードのある行の部分しか発生しないけど
ノード上でクリックしても反応しないの?
658:デフォルトの名無しさん
22/01/14 23:45:25.88 8g6TvuWW0.net
こういう実装の隠蔽ってありだと思う?
URLリンク(ideone.com)
リポジトリクラスでしか使わないキークラスを外部から勝手に生成されたくないっていう着想なんだが、
特定のクラスからのみメソッド叩かせたいときとかにも使えそうな気はする
雁字搦め感は出てるし、将来の健忘症になった俺が手を付けてしまう恐れも減るしでメリットはある
ただぶっちゃけちまうとinternalで十分では?と他でもない俺自身が思ってしまった
659:デフォルトの名無しさん
22/01/15 00:11:45.90 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:デフォルトの名無しさん
22/01/15 00:15:49.41 Fo59HrKfa.net
CreateProxyをpublicにしないとエラーになるんじゃないかな
661:デフォルトの名無しさん
22/01/15 00:20:28.44 dZ7wz90eM.net
yieldを使ってるメソッドの末尾には
「yield break」が暗黙のうちに挿入される、みたいなイメージをもっておけばいいんじゃないかな
662:デフォルトの名無しさん
22/01/15 00:35:37.46 RH/JKl1ia.net
>>650
そんなページ開いたらダイレクトに書いてあることを指摘されたいわけじゃないんだ
ニュアンス通じれば良いかなって思いながらも一応直したんだけど張るURLを間違えたんだよ
663:デフォルトの名無しさん
22/01/15 01:00:14.09 e/r7AWqZ0.net
は?
664:デフォルトの名無しさん
22/01/15 01:05:14.25 mkRG7Oi7a.net
>>649
メソッドのシグネチャのみたまんま
FromToはIEnumerableを返すのであって1とか3.14を返すんじゃない。
何言ってるのか理解できなかったら川俣さんの記事のイテレーターの
説明でも読んでもらった方が早いよ。
665:デフォルトの名無しさん
22/01/15 01:10:18.60 JIhdD5Fq0.net
>>648
キークラスから派生してリポジトリクラスって構造が変
駄目な継承の使い方だと思う
666:デフォルトの名無しさん
22/01/15 01:25:11.79 z3QAlxXC0.net
>>655
キー生成クラスだぞ?
本来リポジトリ内部で生成するものなのに基底に置いては駄目とは何ぞ
667:デフォルトの名無しさん
22/01/15 01:43:23.33 JIhdD5Fq0.net
>>656
この場合は継承(is-a)ではなく包含(has-a)にすべき
668:デフォルトの名無しさん
22/01/15 01:57:04.48 mkRG7Oi7a.net
>>648
VBは確か型Bが型Aの内側で定義されている時、
BのインスタンスをAが握っているとBのprivateメンバーに
アクセスできる裏技があった気がしたんでVBならそれを使う手はあったかも。
試してみたらやはりC#ではできないw
669:デフォルトの名無しさん
22/01/15 02:01:13.57 mkRG7Oi7a.net
まあセキリティー的な目的じゃなく単なる精神衛生の問題なら
単純にKeyのコンストラクタをprivateにして必要な個所ではリフレクションで使えばいいよね
670:デフォルトの名無しさん
22/01/15 02:49:41.70 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:デフォルトの名無しさん
22/01/15 03:06:56.37 ccrjJyGq0.net
>>649
関数内にyield returnがあったらイテレータブロック扱いになって普通の関数じゃなくなる
IEnumerable<T>の約束通り、Tの要素を返してって終端がきたらおわり
672:デフォルトの名無しさん
22/01/15 11:19:56.44 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:デフォルトの名無しさん
22/01/15 12:29:33.15 mY1vrnaaM.net
>>651 有能
>>654,662 無能、聞きたいのはお前のチンケな知識じゃねーよ
674:デフォルトの名無しさん
22/01/15 13:44:23.87 agiarv77a.net
>>663
馬鹿だねこいつw
質問した人と別人みたいだけど
675:デフォルトの名無しさん
22/01/15 14:20:07.42 XKyr/S8qM.net
馬鹿としか言えない無能w
676:デフォルトの名無しさん
22/01/15 14:24:42.58 6Adwrh4F0.net
今週のNDワッチョイ
ドコグロ MM4f-KcIn
677:デフォルトの名無しさん
22/01/15 14:48:33.55 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:デフォルトの名無しさん
22/01/15 14:53:57.88 OfoSB/Yx0.net
>>667
Timerには何種類かあって
WinFormsならSystem.Windows.Forms.Timerクラスを使うのが簡単
679:デフォルトの名無しさん
22/01/15 14:56:31.51 2bsBwYtoa.net
スレッド間の~は
Invoke((MethodInvoker)delegate{処理});
ってやればわんちゃん
680:デフォルトの名無しさん
22/01/15 16:08:48.34 6bjOtxZz0.net
Windows.Forms.Timerクラスでやりたいことができました!
後学のため、Invokeも調べたいと思います
ありがとうございます
681:デフォルトの名無しさん
22/01/15 20:02:17.15 XKyr/S8qM.net
>>666
黙ってNGできない無能w
682:デフォルトの名無しさん
22/01/16 04:00:49.97 az6Mfsfa0.net
OpenCVSharp入れたらexeのフォルダがdllだらけになったんですが、
これ全部リリースの時にこのまま一緒に渡さないといけないんですか?
exe1個にまとめられないんですか?
683:デフォルトの名無しさん
22/01/16 07:00:20.21 DVPU1vQA0.net
>>672
単一ファイルの配置と実行可能ファイル
URLリンク(docs.microsoft.com)
684:デフォルトの名無しさん
22/01/16 10:03:18.59 gWCKJdmK0.net
ネイティブじゃね?
685:デフォルトの名無しさん
22/01/16 10:19:22.15 1ZlPRUHva.net
インストーラーのexeひとつ渡せばおk
686:漆黒の翼
22/01/16 20:01:08.59 VfeV/Qg80.net
教えていただきたいのですがWindowsでc#のプログラムが落ちた時にメモリダンプを吐くようにするにはどうすればいいのでしょうか?
よろしくお願いいたします
687:デフォルトの名無しさん
22/01/16 20:14:28.43 8g0F/aL60.net
メモリダンプ吐くと何かわかるん?
688:漆黒の翼
22/01/16 20:18:34.35 VfeV/Qg80.net
>>677
メモリダンプをvisual studioに食わせるといろいろ分かります!!
689:デフォルトの名無しさん
22/01/16 20:19:29.37 el47HiNu0.net
メモリダンプを解析できない人たちのスレですよ、ここは。
690:デフォルトの名無しさん
22/01/16 20:22:15.01 F2RYBHf20.net
明らかに"初心者用"の範疇を超えているよね
691:デフォルトの名無しさん
22/01/16 20:34:12.82 T486FPBl0.net
C#でゲロ吐く方法はしらん
Windows Error Reportingで取得するはずなので、呼び出せば行けるかもしれない
692:デフォルトの名無しさん
22/01/16 20:41:28.24 X0X6y0PK0.net
先輩社員から「まずはメモリダンプとって調べてみろよ」と無理難題言われたとか
693:デフォルトの名無しさん
22/01/16 20:47:08.84 el47HiNu0.net
Drワトソンって解雇されてたのか。
694:デフォルトの名無しさん
22/01/16 21:01:51.64 uYZKVP770.net
メモリダンプを見ると
変数とかスタックとの内容がじかにわかるので
デバグの助けになるかもしれない
そこまで必要になることは珍しいけど
695:デフォルトの名無しさん
22/01/16 21:18:19.12 VfeV/Qg80.net
>>677
ダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティング - Grani Engineering Blog
の説明読むとどういうことがわかるかわかります
696:デフォルトの名無しさん
22/01/16 21:38:53.48 zIpkfF6j0.net
>ダンプ解析入門 - Visual Studioでの可視化によるC#トラブルシューティング
読んでみたけど支離滅裂な記事だった
でもメモリダンプ吐くよう設定する方法はちゃんと書いてたぞ
697:デフォルトの名無しさん
22/01/16 21:40:20.63 P0LzLgpAM.net
>>683
出世して Watson Server として MS で働いてます
698:デフォルトの名無しさん
22/01/16 21:42:20.27 VfeV/Qg80.net
URLリンク(docs.microsoft.com)
ここ読むと環境変数だけでいけそうだができませんです
699:デフォルトの名無しさん
22/01/16 22:06:33.35 aMgjkUSV0.net
C#でメモリダンプが必要って、C#の利点捨てまくったクセの強い作りしてるんちゃうか
UnsafeゴリゴリとかそれC#で作る意味あるのっていう
700:デフォルトの名無しさん
22/01/16 22:08:28.63 8g0F/aL60.net
>>686
書くやつも書くやつなら読むやつも読むやつってことだな
701:デフォルトの名無しさん
22/01/16 22:17:34.06 8g0F/aL60.net
まあ、そんなもん調べても結局使ってるライブラリがタコでしたなんて可能性もあるし
それより先にやることあんじゃねーの?
的な
702:デフォルトの名無しさん
22/01/16 22:20:42.02 VfeV/Qg80.net
長時間連続運転するプログラムなんだけど、ちょっとずつメモリ使用料が増えていくななんて
時はメモリダンプ一択だと思うんだが・・・
というかID:8g0F/aL60さんはC#のメモリダンプ何回くらい使った経験あるの?
ゴミクズのような経験から導かれた結論は、やっぱりゴ
703:デフォルトの名無しさん
22/01/16 22:24:55.74 el47HiNu0.net
例外機構が当たり前になった今ではアプリ内でcatchするだけですからね。
仮にテストですり抜けてもcatchしたらエラーログに吐けよと。
今ではWinDbgでカーネルダンプ解析するぐらいかな。
704:デフォルトの名無しさん
22/01/16 22:27:14.39 el47HiNu0.net
C#はガベコレあるからメモリリーク気にしないでいいって後輩が言ってました!!!
705:デフォルトの名無しさん
22/01/16 22:41:54.12 RG8YDX1E0.net
少しずつメモリ使用料が増えていくとか、
Ruby みたいに、世代別GC を使っていたら、
古世代は閾値を越えるまで実行されないかも知れないし、
さらに、メモリ領域が大きいと、閾値もかなり大きいだろうし、なかなか実行されない
706:デフォルトの名無しさん
22/01/16 23:17:44.09 8g0F/aL60.net
>>692
正直ないね
無駄だから
c#でリークの対応なんて無駄
精々頑張った挙げ句にウチの会社が組んだところじゃない箇所でリークしてて対応できません
みたいな事実がわかるだけ
まず、c#みたいな
厳密なメモリ管理ができない言語での
組み方を学ぶべき
3日に一度再起動するとか
機能毎にモジュール化して動かすたびに破棄するとかな
廃棄したらガベコレ適当に実行してりゃOSが片付けてくれるだろ
707:デフォルトの名無しさん
22/01/16 23:31:50.74 I0k7QK8La.net
何のお役にも立てんけど、「メモリ使用料」って結構じわるねwww
まあマネージドなユーザーコードでリークが発生する原因は限られてるし、
ユーザーコードじゃないならどうしようもないし、ブル中野みたいな大鉈振るう必要って
確かにあるのかなという気はする
708:デフォルトの名無しさん
22/01/16 23:40:43.96 zIpkfF6j0.net
>>692
メモリ使用量が増えるならまずはプロファイラーじゃないか?
709:デフォルトの名無しさん
22/01/16 23:42:20.42 zIpkfF6j0.net
C#でも断続的に性能が極端に悪化する問題みたいなのが発生したときに
性能悪化したタイミングでダンプ吐かせると糸口がつかめたりする
そういうのはだいたい.NET Frameworkとか下位の部分が原因だけど
原因が明確になれば回避策が取れる
710:デフォルトの名無しさん
22/01/16 23:44:56.33 8g0F/aL60.net
>>699
それもうガチでわかんねーときの最後の手段で
まずはデバッガで見てみるべきじゃね?
最近は結構いい機能が付いてる
VC6の時代とは違う
711:デフォルトの名無しさん
22/01/17 00:12:14.01 BWxacq0R0.net
C#でのリークは大抵長寿命のeventに+=してるだけでしょ
712:デフォルトの名無しさん
22/01/17 07:41:52.27 MbNkwuBfa.net
GDIなどのシステムリソースの解放忘れとか
713:デフォルトの名無しさん
22/01/17 09:30:07.53 9uEhEVX70.net
リリースの特殊な(?)解放方法なんて半ば作ったやつの趣味だからな
可能であれば別モジュールにしてキックして終わりがいい
個人製作的な(会社内であっても)ライブラリだとusingのdispose実装忘れはよくある
信じて使うと後ろからバッサリだ
714:デフォルトの名無しさん
22/01/17 10:45:22.36 TWhgTM4G0.net
もう半年以上起動しぱなっしの.NET5で作ったスクレイピンクツールあるけど25mbで安定してるな
715:デフォルトの名無しさん
22/01/17 12:44:47.10 DKJy6PH50.net
>>704
25ミリバールって気圧かよw
716:デフォルトの名無しさん
22/01/17 13:14:05.94 U4Fph
717:VWG0.net
718:デフォルトの名無しさん
22/01/17 13:15:12.00 XdTy16+8M.net
ミリバールって昭和かよ
719:デフォルトの名無しさん
22/01/17 13:45:40.07 McAG9Ljja.net
マネージドな世界で閉じている限り、Disposeの実装ミスや呼び出しの忘れは
リークの原因には普通はならないと思うけどね。
単にリソースの解放が逐次的でなくなるだけ。
720:デフォルトの名無しさん
22/01/17 13:52:14.45 NIAK/ICvM.net
>>708
Disposeが呼ばれたらstaticなイベントからハンドラを削除するような実装は低品質なライブラリなんかだとたまに見かける
721:デフォルトの名無しさん
22/01/17 14:02:14.57 s/zLKX0LM.net
>>708
> GDIなどのシステムリソースの解放忘れとか
の話の流れで
> マネージドな世界で閉じている限り
とか頭おかしいのか?
722:デフォルトの名無しさん
22/01/17 14:05:18.68 McAG9Ljja.net
>>710
頭がおかしいのは君の方
普通のプログラマはマネージドなライブラリを挟んで
間接的にGDIのリソースを利用するんであって直接使ったりしないの
だからライブラリのコードにバグがない限りGDIを間接的に
利用しているからといってリークの原因にはならないんだよ
723:デフォルトの名無しさん
22/01/17 14:10:54.78 McAG9Ljja.net
ついでに言えば、俺は別に>>702に反論したわけじゃないw
すごい被害妄想だよねw
ネトウヨさんじゃねえのw
724:デフォルトの名無しさん
22/01/17 14:26:56.43 ly062VWjM.net
普通のプログラマw
無能の言い訳に多用されてて笑う
725:デフォルトの名無しさん
22/01/17 14:40:41.16 IUPVmsWca.net
理想のマネージドだったらdisposeなんて関係ないし、メモリリークなんて起きない
でもc#は理想のマネージドじゃないんだよ・・・
726:デフォルトの名無しさん
22/01/17 15:20:30.64 C2NpqJUJM.net
ゲロみたいな話題で盛り上がってんなあ
727:デフォルトの名無しさん
22/01/17 17:33:38.89 0pf4TYua0.net
っぱRustよ
728:デフォルトの名無しさん
22/01/17 19:32:54.18 rqpdgGXW0.net
mb ミリビットもジワるwww
729:デフォルトの名無しさん
22/01/18 09:23:03.79 HVobsaMl0.net
低レベルな質問で恐縮です。VisualStudioを使っています。
やりたいことは、定期的に更新されるcsvからデータを取得しDataGridViewに表示させたいです。
(つまり、DataGridViewでリアルタイムに更新されているように見せたい)
取得・更新することはできたのですが、更新時にソート状態が解除されて困っています。
DataTable・DataSet・DataSource・データバインドなどのキーワードを見つけて調べているのですが、理解力が乏しく解決できていません。
こんな方法があるよと、ヒントになる助言をいただけたらありがたいです。
よろしくお願いします。
730:デフォルトの名無しさん
22/01/18 10:13:54.13 Tap2eyJjM.net
>>718
DataGridViewのSort順を復元するだけでは?
731:デフォルトの名無しさん
22/01/18 10:18:04.98 jhcMMPao0.net
・DataGridViewにどうデータをセットしているか、どう更新しているか
・どうソートさせているか
・ソート状態が解除というのは結局どういう状況になっているのか
を具体的に
732:デフォルトの名無しさん
22/01/18 11:36:28.39 HVobsaMl0.net
反応ありがとうございます。
>>719
更新前にソートされている列を取得して、更新後に強制ソートする
という感じですね。試してみます。
>>720
>DataGridViewにどうデータをセットしているか
今の状態は、あるサイトにのっていたコードをコピペして試しています。
//フォームデザイン
//csvデータ:person_read.csv
//button4のソース
ソースコードはこちら URLリンク(dotnetfiddle.net)
///////////////////////////////////
733:デフォルトの名無しさん
22/01/18 11:37:01.32 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:デフォルトの名無しさん
22/01/18 11:43:01.00 HVobsaMl0.net
リンクが404になっていたので貼り直しします。
これで大丈夫か心配ですが。
URLリンク(dotnetfiddle.net)
736:デフォルトの名無しさん
22/01/18 13:08:53.17 jhcMMPao0.net
DataTableの場合ソート順は
dataTable.DefaultView.Sort
に文字列で格納されるからこれを使えばいい
737:デフォルトの名無しさん
22/01/18 13:20:14.01 k1mhP8XB0.net
C#で正規表現のperlでの「tr」と同じ事をしたいのですが、
Regexクラスにそれっぽいのがありません。
何か方法はありませんでしょうか?
738:デフォルトの名無しさん
22/01/18 13:29:49.03 pQS/rHaxa.net
trは置換なのか?だったらc# regex 置換とかでぐぐりゃ方法出るだろ
痴漢じゃないなら知らない
739:デフォルトの名無しさん
22/01/18 13:41:14.96 k1mhP8XB0.net
置換ではあるのですが、
pattern [a-z]
replacement [a-z]
とすると半角英字が全角英字に変換されるといった感じです
740:デフォルトの名無しさん
22/01/18 13:52:43.16 pQS/rHaxa.net
正規表現でマッチした位置とマッチした文字列を取り出すのはできる
正規表現関係なく文字列を全部変換するってならできる
これを組み合わせて自分でやるしかないんじゃない?
741:デフォルトの名無しさん
22/01/18 13:54:14.42 9szJ9jA+0.net
Regex.Replace(mojiretsu, "[a-zA-Z]", p => ((char)(p.Value[0] - 'a' + 'a')).ToString());
動確はしてない。
742:デフォルトの名無しさん
22/01/18 14:04:35.01 k1mhP8XB0.net
なるほど、やはりないですか
ありがとうございました
743:デフォルトの名無しさん
22/01/18 18:17:30.27 UqX3jEvG0.net
全角半角ならVB.NetのStrConv使えばいいじゃね
744:デフォルトの名無しさん
22/01/18 18:27:21.22 80llBYJsr.net
c#って全角半角変換でまともなメソッド用意してないよな
745:デフォルトの名無しさん
22/01/18 18:49:27.58 HVobsaMl0.net
>>718です。
.SortedColumn で現在のソート選択列を取得
ListSortDirection で昇順・降順の状態を取得
データ更新後、.Sort で更新前のソート状態を復元することができました。
>>719さん>>724さんヒントをありがとうございます。
>>720さん、気にかけていただいてありがとうございます。
また何かあればよろしくお願いします。