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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0fe3-wadS)
垢版 |
2022/02/09(水) 23:13:39.45ID:1A90hyai0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part153
https://mevius.5ch.net/test/read.cgi/tech/1639403601/
■関連スレ
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
■コードを貼る場合は↓を使いましょう。
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
2022/02/13(日) 00:08:15.38ID:FGdWJXDS0
何でシャープなのにフラットなんですか?
2022/02/13(日) 03:05:32.20ID:VSC7OudY0
何でだと思いますか?
2022/02/15(火) 23:10:38.63ID:cOFK9ujT0
多次元配列とジャグ配列ってメモリ使用量は同じですか?
(例えばint[3,3]とint[3][3])
2022/02/15(火) 23:16:22.58ID:V26FO7wsa
>>4
意地悪な言い方をすれば、配列のメモリ使用量 = 要素数だと考えると
ジャグ配列の方が要素数が少ないのでメモリ使用量も小さいことになる。
2022/02/16(水) 00:42:55.65ID:zdbyhmola
c#の実装がどうなってるのかは知らないけど普通に考えて
多次元より配列の配列の方がメモリ効率悪くなるからメモリ使用量も多いはず
2022/02/16(水) 09:24:38.60ID:9PrGaEWW0
シャグ配列は配列の配列のためのヒープ+配列それぞれのヒープ、つまりint[3][3]だと4つのオブジェクトからなる
メモリ的にも連続してない上に4つのオブジェクトヘッダ分(32bitだと8byte?64bitだと16byte?)余計に要する
int[3,3]の多次元配列は実体はint[9]の1オブジェクトとしてレイアウトされてそうだけど実際どうなってるかはunsafeで確かめてみないと分からない
Console.WriteLine(Unsafe.AsPointer(ref array[0,0]));とかでアドレスを調べてみると良い
2022/02/16(水) 10:02:32.42ID:xaORQRwj0
小細工せずにシンプルに富豪的プログラミングすりゃええやん
2022/02/16(水) 10:20:29.58ID:FqYQ+dJNM
ソース忘れたけどジャグ配列の方がアクセス速いらしい
2022/02/16(水) 11:20:29.58ID:FqYQ+dJNM
すまん嘘ついたわ
シーケンシャルはジャグのが速いけど、ランダムだと逆らしい
普通に考えると >>7 の言うようにジャグは配列のヘッダ分余分に使うと思うけど、プリミティブ型の配列は最適化で何か消し飛びそうな気もするから、正直あんま変わらなさそうな気がする
2022/02/16(水) 14:03:09.07ID:RtFWZL7LM
全部詰め込むならジャグ配列のほうが容量は食う
多次元配列はint[M x N]で確保されて計算経由でアクセス
速度は環境や使い方によって違うので自分の使い方で計測したほうがいい
2022/02/16(水) 15:12:12.97ID:t9owAYRA0
もっと楽観的に取り組もうぜ
2022/02/17(木) 10:51:36.86ID:GVuWfQald
正直いって、メモリや速度より組みやすさで選びたいよね。
性能を求めるなら、Rustとかの方が良いんでしょ?
2022/02/17(木) 12:14:06.04ID:JwXvZXiU0
え?それ、実際に計測していってんの?
2022/02/17(木) 12:26:13.49ID:eZZ7a2UPM
後々の保守考えると、実際のとこ見やすさと組みやすさが最重要だと思う
16デフォルトの名無しさん (ワッチョイ bfbd-oz1W)
垢版 |
2022/02/21(月) 21:06:11.37ID:8NF9kOJ70
VBAからのC ♯に挑戦中です。
visual studio使ってるんですが、予測変換やらその他諸々便利な事が多く感動しております。。
質問なんですが、VBAでやる場合は印刷=Excel sheetでみたいな固定概念なんですがこっちの場合って印刷出力は物によるとは思うんですが、どんな感じですか?調べると、print document??なるもので頭でイメージして印刷用のベースを自作して作るのですか?
印刷内容は至ってシンプルな文字列やら数値です。
2022/02/21(月) 21:40:50.41ID:dmBIFY6O0
そもそもプリンタから紙を出すということ自体発想がなかったわ

ライブラリ使うにしても
入力の文字列やら数値から印刷用のレイアウトを起こさなきゃいけないし、
プリンタに印刷データを投げなきゃいけない

簡単に印刷と言うけど結構やることは多い
2022/02/21(月) 21:44:55.46ID:i5JttRhRa
プリンタは画像描画みたいなもの
縦横ピクセルサイズ決めて、そこのxy座標どこにどのくらいの大きさで文字を描く〜ってイメージ
印刷プレビューも使えるから適当にググって試せばすぐわかるよ
2022/02/21(月) 21:51:01.85ID:Gf4lGfIx0
>>16
イメージは1ページの白紙に自分でしこしこテキストとか図形を書く感じ
(数値は自分で文字列にして書く)
とりあえずこのあたりのサンプルをビルドしてみては?
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.printing.printdocument.print
20デフォルトの名無しさん (ワッチョイ bfbd-oz1W)
垢版 |
2022/02/21(月) 23:35:22.77ID:8NF9kOJ70
なるほど、やはりしこしこ描いてくんですね。やる事多そうですね。
勉強も兼ねてやってみます。
ありがとうございます!
2022/02/22(火) 10:46:16.00ID:vNlU0s1vM
会社で買えるならアクレポが楽だけどな
PDFでいいなら他の手もあるけど
2022/02/22(火) 10:54:46.02ID:Q9cfD2FD0
Crystal Reports for VSは未だに.Net Frameworkのみの対応なんだっけ?
2022/02/23(水) 06:06:54.77ID:8XUT1BDs0
そんなん使ってる環境で.net core対応かどうかとか気にするの?
2022/02/23(水) 10:26:26.53ID:EjF360bu0
現時点で .NET core に対応する必要あるの?
2022/02/23(水) 10:52:19.37ID:IFX4MVN+0
「現時点でES6に対応する必要あるの?」
って言ってたJavaScripterの末路を知らんのか
2022/02/23(水) 11:02:58.12ID:rcGZ+xyY0
対応する必要が出てきてから移行したよ
2022/02/23(水) 11:37:00.39ID:6huhQPG70
今から対応を考えるなら.NETの方にしとけ
2022/02/23(水) 11:53:14.46ID:pfP6MzJI0
未だに.NET Framework2.0が動き続けている俺社には耳が痛い
あと6年もサポート残っているんだからいい加減移行考えろよと
2022/02/23(水) 12:31:01.73ID:n4QLtIZ70
XPでも使ってるのか

現行のOSで2.0はかえって難しいだろ
2022/02/23(水) 13:00:38.62ID:a6rWCkrR0
WPFで帳票もいけるみたいだぞ
https://qiita.com/cyberCatvb/items/1bf86e75b8e5738d432f
2022/02/23(水) 13:46:28.74ID:mlk9UOBoa
今の.netと数年前の.net coreは別物になってる
それに引き換えframeworkは変化が少ない。c++のmfcみたいに細々と生きて切り捨てられることもないだろ
どっちが保守楽かって考えたら・・・
2022/02/23(水) 14:00:40.20ID:a6rWCkrR0
規模がでかい社内システムだと、中々移行に踏み切るのも難しい場合はあるな
部分部分で少しづつ置き換えられるならいいんだが、色々連動してたりすると下手に手が出せん
2022/02/23(水) 14:44:30.90ID:EjF360bu0
.NET6への移行(移植)はライブラリの対応待ちだな
2022/02/26(土) 20:05:44.30ID:UUNvHcAJ0
いやWindows標準搭載待ちだろ
.NET6ですら標準化予定なしって聞いてからはC#自体書く気なくなったわ
2022/02/26(土) 20:41:04.47ID:e5W/1zqv0
COMコンポーネントが作れなくなってるので移行しづらい
2022/02/27(日) 10:04:44.98ID:VN1UC9sN0
>>34
まずそれな
2022/02/27(日) 10:20:11.38ID:FLYW632f0
>>35
まだ作る事ってある?
使うのは偶に必要になるけど
2022/02/27(日) 17:20:47.20ID:hLXeworC0
WinFormsのTextBoxでKeyPressイベントが発生した時、キャレットの位置が行頭なのかどうかを判定したいのですが、

if(TextBox1.Text[TextBox1.SelectionStart].ToString() == Environment.NewLine)

では判定出来ないようです。
判定する方法を教えてください。
2022/02/27(日) 17:33:25.94ID:6fl1teDTa
[TextBox1.SelectionStart]だと行頭だから
[TextBox1.SelectionStart-1]になるんじゃない?
2022/02/27(日) 17:59:32.72ID:hLXeworC0
>>39
ダメでした・・・。
2022/02/27(日) 18:07:12.14ID:6fl1teDTa
一文字しかとってないからNewlineじゃなくて"\n"かな
2022/02/27(日) 19:11:31.38ID:ZUZKwXZL0
DOBONみたいに地道にやったほうがよくね?
https://dobon.net/vb/dotnet/control/tbgetcaretposition.html
43デフォルトの名無しさん (ワッチョイ 06e9-jC74)
垢版 |
2022/02/28(月) 09:21:55.74ID:+yCudJYj0
下記のOBJListの並びを「I,N,P,P」から「P,P,I,N」のようにPが先頭に来るよう入れ替えしたく。
OBJListの要素をforeachで回してPを見つけたら先頭に移動する等試したのですが、
処理中にOBJListの順番を変えるなと怒られてしまいました。どのようにすれば実現できるでしょうか?
よろしくお願いします。

class OBJ
{
public string Name { get; set; }
public int No { get; set; }
}

private void narabekae()
{
List<OBJ> OBJList = new List<OBJ>();
OBJList.Add(new OBJ { Name = "I", No = 1 });
OBJList.Add(new OBJ { Name = "N", No = 1 });
OBJList.Add(new OBJ { Name = "P", No = 1 });
OBJList.Add(new OBJ { Name = "P", No = 2 });
}
2022/02/28(月) 09:39:44.52ID:+7QZaSxQd
OBJListを使いまわさずに新規のListを作る
Enumerable.OrderByとか
2022/02/28(月) 13:06:35.56ID:UX0HcLa3a
そういうのはforで後ろから回して、削除、挿入
2022/02/28(月) 17:42:35.91ID:XSUMuMfaM
>>43
そもそもがなんで順番変えるな!って怒られるかわかる?

分かったら対応もわかるはず
47デフォルトの名無しさん (ワッチョイ 06e9-jC74)
垢版 |
2022/02/28(月) 19:07:11.88ID:Dbx5MQPW0
>>46
foreach中に順番変えられたらforeachが成り立たないのだろうなとは思いました。
頂いたアドバイスからPを別のリストに移動してドッキングしても
邪道では無さそうなので、そうしようと考えています。
2022/03/01(火) 11:27:38.32ID:Dq7cA1DN0
それだけのために一時バッファとしてもう一個リスト作るのはスマートじゃない
Remove&先頭挿入をペアで行う場合は後方の順番は狂わないので原始的にforで回せばいい

for (int i = 0, end = obj_list.Count; i < end; ++i) {
var obj = obj_list[i];
if (obj.Name != "P") continue;
obj_list.RemoveAt(i);
obj_list.Insert(0, obj);
}
2022/03/01(火) 11:38:43.21ID:Dq7cA1DN0
>>48
そういえばint i = 1からでよかったな
2022/03/01(火) 12:59:14.06ID:haFp+aqn0
>>48
RemoveAtもInsertもO(n)だから
そのやり方なら新規にリストを作るほういいんじゃない?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況