X



ふらっと C#,C♯,C#(初心者用) Part148
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ワッチョイ df89-moxv)
垢版 |
2020/05/27(水) 20:28:41.27ID:Pggemlyq0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part147
http://mevius.5ch.net/test/read.cgi/tech/1582100741/
■関連スレ
C#, C♯, C#相談室 Part94
http://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
・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
0323デフォルトの名無しさん (ワッチョイ ca4a-E04M)
垢版 |
2020/10/10(土) 10:58:06.91ID:RvE6O+PE0
.NET Coreでコンソール画面に
「こんにちは、WORLD!」と表示させようとすると
なぜか「こんにちは、WORL!」のように表示されます

コンソール画面のメニューからフォントを変更すると正しく表示されますが原因が分かりません
0329323 326 (ワッチョイ ca4a-E04M)
垢版 |
2020/10/10(土) 19:40:42.12ID:RvE6O+PE0
>>327 >> 328
試してみましたが改善しません

出力をコピーしてメモ帳にペーストしてみると正常なので
どうも文字化けではないようです

文字の表示位置がずれて重なっているような感じです
0335デフォルトの名無しさん (アウアウウー Sa2f-DH51)
垢版 |
2020/10/10(土) 21:17:43.96ID:RlZbVDXEa
何にもアドバイスできないのに恐縮だけど、

>コンソール画面のメニューからフォントを変更すると正しく表示されますが
だったら具体的にどのフォントで問題が発生してどのフォントで発生しないか
確認した範囲で書いた方がいいのでは

あと、普通テキスト変えていろいろ試さないか?
0337デフォルトの名無しさん (ワッチョイ 1b02-tHo0)
垢版 |
2020/10/10(土) 23:23:35.42ID:wgBcrtZd0
>>320
Typeで事足りそうなものだが…

あるいは設計の問題かも。
どんな設計なのかも書き込んでみたら?
0338デフォルトの名無しさん (ワッチョイ 5b49-fMdf)
垢版 |
2020/10/20(火) 10:49:57.27ID:N2Y7+9Dy0
ローカルでiTextSharpを利用して、
Json形式のデータからPDF帳票を作る・・てのつくったんだが、
(サーバ上で、APIコールとかファイル読込でPDFファイルを返したかった。
 イメージ的にはページごとにTextとかLineを指定したJsonデータ)
いざ業務に転用できるかなってフェーズにきて
iTextSharpのライセンス(AGPL)がやだなあ、って思ってる。
PDFSharpは日本語がなんかうまくいかない。

今のC#で、PDFを作るの、皆さんはどうやってる?
0340デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
垢版 |
2020/10/20(火) 10:59:00.80ID:pHiz9StDF
PDFSharp使ってるけど問題無し
0342デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
垢版 |
2020/10/20(火) 11:13:59.21ID:pHiz9StDF
日本語不安ならグラフィック直接PDFに張り付けろ
0344デフォルトの名無しさん (ワイーワ2 FF3f-Vszw)
垢版 |
2020/10/20(火) 12:50:06.87ID:pHiz9StDF
>Json形式のデータからPDF帳票を作る

これが折り返しするかどうかだな
0345デフォルトの名無しさん (ワッチョイ 5b49-fMdf)
垢版 |
2020/10/20(火) 13:46:22.13ID:N2Y7+9Dy0
皆さんありがとうございました・・・
方針としてはPDFSharpをもっかいいじくり倒して、他にもいろいろ試してみます・・・
プレプリント紙への印刷やめたい

>>339
そんなソフトあるんですね!サーバ版たけぇ・・

>>341
クライアントサイドのレンダリングはちょっときついです、環境バラバラなんで

>>342
自分にはグラフィックをちょうどよくテンプレにはめる設計力がなさげ

>>344
折り返しするんですよね。。
まあそれ以前使うフォントが特殊でつまずいたっていうのがありましたが
0349デフォルトの名無しさん (ワッチョイ ef02-pZTf)
垢版 |
2020/10/20(火) 16:09:37.19ID:CqCKSidt0
C♯が現在最強言語らしいので勉強したいのですが
マイクロソフトはVB6の開発を打ち切ってプログラマを裏切った過去があるそうで
なかなか踏み切れずにいます。。。
C♯は20年後も開発が続いてると思いますか?
教えてエロい人
0350デフォルトの名無しさん (スップ Sdbf-H+yj)
垢版 |
2020/10/20(火) 16:14:23.52ID:Nb9oJ8Mwd
そんな先のことなんざわからん
確実に言えるのは今勉強している技術を20年後も変わらずに使い続ける前提でいるような技術者は居ない(と信じたい)
生き残ってるなら初期学習がない分少し楽かもしれないけど、新しいのが台頭してくりゃそちらを新たに学習するだけ
0356デフォルトの名無しさん (アウアウウー Sacf-0T0S)
垢版 |
2020/10/20(火) 17:16:01.37ID:nipGGPAZa
>>353
勉強が1ヶ月続くかどうかも怪しい奴が20年後の心配をするのは馬鹿げているぞ。
そんなことじゃ、何かを勉強し始めたとしてもことあるごとに足踏みして前進できない未来しか見えない。
0361デフォルトの名無しさん (ワッチョイ ab5f-UsEC)
垢版 |
2020/10/20(火) 21:29:38.81ID:j1S9Ds0j0
それIronPythonと何が違うの?
0366デフォルトの名無しさん (ワッチョイ 65e4-xMNm)
垢版 |
2020/10/21(水) 00:36:52.32ID:0KDGF23Y0
なんかうろ覚えなんだが
こういう非同期処理の書き方ってちゃんと動いたっけ?

if(!locked){
 locked = true;
 await xxx.Task;
 locked = false;
}

async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無いって昔判断したような記憶はある
0369デフォルトの名無しさん (JP 0H22-pYMh)
垢版 |
2020/10/21(水) 09:43:40.30ID:eNSg6QZpH
四捨五入の結果がおかしいのって自分だけかな・・・

decimal v = -0.0195m;
decimal rounded = Math.Round(v, 2, MidpointRounding.ToPositiveInfinity);
Console.WriteLine(rounded);
ってすると、小数点2桁までになるよう(小数点3桁目を)四捨五入するので
-0.02になるはずなのに、結果が-0.01になっちゃうんですけど・・・
0371デフォルトの名無しさん (ワッチョイ 1d1a-8DiG)
垢版 |
2020/10/21(水) 12:02:28.19ID:sg7OOy0L0
>>366-368
awaitで同期取ってるから問題ない

>>369
To Positive Infinityだから正数寄りになる
ゼロを基準にしたければMidpointRounding.AwayFromZeroを指定する

await(待つ)もそうだが、変な日本語のリファレンスよりも明快な解説が変数名に詰まってるんだからお前らはまずその単語をGoogle翻訳に掛けるべきだと思うわ
0373デフォルトの名無しさん (JP 0H22-pYMh)
垢版 |
2020/10/21(水) 13:03:41.62ID:eNSg6QZpH
>>371
-0.01と-0.02の中間(MidPoint)である-0.015のときの丸め方(Rounding)として
「MidpointRounding.ToPositiveInfinity」を指定したつもりだったのですが・・・
MidPointじゃないときにも「ToPositiveInfinity」が適用されちゃうんですね・・・

JavaScriptのMath.Round()とおなじような(四捨五入される桁の数字が5の場合に
正の無限大の方向で丸める)四捨五入をしたかっただけなのですが、
関数を自作しないとだめみたいなので自作します。
お騒がせしました。
0377デフォルトの名無しさん (ワッチョイ 1d1a-8DiG)
垢版 |
2020/10/21(水) 14:15:10.32ID:sg7OOy0L0
>>373
それならこんな感じで簡単に作れるから頑張れ

static decimal[] table = new decimal[]{1E0m, 1E1m, 1E2m, 1E3m, 1E4m};
static decimal Round(decimal num, int pow) => Decimal.Floor((num * table[pow]) + 0.5m) / table[pow];

decimal num = Round(-0.015m, 2); // -0.01

>>372
普通にメインスレッドから叩いていればこうなるからな

if(!locked){ // thread 1
 locked = true; // thread 1
 await xxx.Task; // thread 2
 locked = false; // thread 1
}
0386デフォルトの名無しさん (ワッチョイ 1d1a-LA9s)
垢版 |
2020/10/21(水) 17:36:18.89ID:sg7OOy0L0
>>385
つまりこういうのを危惧してるのか?

Task.Run(() => {
 if(!locked){
  locked = true;
  await xxx.Task;
  locked = false;
 }
});

だとしたらこんなのは仮定に持ち出すのがそもそも間違い
それ言い出したらフィールド操作するあらゆるメソッドで「並列で呼び出される可能性がある」とlock()で括らなきゃいけなくなってしまう
0388デフォルトの名無しさん (ワッチョイ 022f-MACq)
垢版 |
2020/10/21(水) 17:55:56.87ID:5E7rZ8hS0
元の質問がマルチスレッドでのロックに関する質問だと思うのだがな

このコードはスレッドセーフですか?
いいえ危険です

みんなが回答してるのはそういう事
このスレの趣旨や質問者のレベルを考えると妥当な仮定と回答だと思うぞ
0390デフォルトの名無しさん (ワッチョイ 1d1a-LA9s)
垢版 |
2020/10/21(水) 18:02:52.19ID:sg7OOy0L0
元の質問って>>366だろ?

> async/awaitは同じスレッドに戻るからこんな単純なロックでも問題無い

「同じスレッドに戻る」を認識してるなら疑いなくtrueやん
ここで「でも別スレッドで動かしたら危険」と言うのは質問の前提を崩してる
0392デフォルトの名無しさん (ワッチョイ 022f-MACq)
垢版 |
2020/10/21(水) 18:19:06.78ID:5E7rZ8hS0
そのawaitしてるのはasyncメソッドだから、メインスレッドからのみ呼ばれるとは限らん
つまりもどるのがメインスレッドだとは限らん

というの理解しているのならまあ大きなお世話だと言えなくもないが
あとフォームアプリじゃなければ、もとのスレッドに戻るも保障されないけどな
0393デフォルトの名無しさん (ワッチョイ c201-45kF)
垢版 |
2020/10/21(水) 19:06:44.50ID:lxmGvu010
>>389
なるほど
ロックって言葉でちょっと意図を勘違いしてた
タスクが実行中ならもう1回呼ばれても実行しないようにしたいってことだったのか

タスクの中には他のスレッドと競合する処理はなく
ifブロックはUIスレッドでのみ実行されるという前提ならいいんじゃねって気がする
0394デフォルトの名無しさん (ワッチョイ 895f-ojc3)
垢版 |
2020/10/21(水) 19:15:16.66ID:/GjtxlMb0
そもそも呼ばれないようにしろ
0400デフォルトの名無しさん (ワッチョイ c201-45kF)
垢版 |
2020/10/24(土) 21:50:33.27ID:878uww5f0
MoreLinqのIndex()がKeyValuePair<int, TSource>を返してくれる
簡単だから自分で実装してもいいけどライブラリ使うほうが管理含めて楽

foreach (var (i, x) in foo.Index()) {
Console.WriteLine($"{i}: {x}");
}
0407デフォルトの名無しさん (ワッチョイ eea7-qdaq)
垢版 |
2020/10/25(日) 00:24:48.70ID:lDlwJ32m0
そもそもforeachなんて作ったやつの脳みそ腐ってんだから仕方ない
何回回すのかもコードからわかんねーし
どう回したいのか変わると一気に産廃
そもそもforeachなんて産廃コード使うなよ
変更に激弱だろ

あ、インデックスN番目は処理したくない
→産廃
あ、後から処理しないと
→産廃
あ、奇数と偶数で処理変えないと
→産廃
あ、こっちの配列もみながらいっしょに処理しないと
→産廃

もうあれね
コードレビューでforeachを見つけたら
修正させるぐらいでいい
0408デフォルトの名無しさん (ワッチョイ e1ad-gqeA)
垢版 |
2020/10/25(日) 07:44:18.56ID:yVRP623B0
インデックスを考えるような用途でforeach使うほうが悪いだろ。
偶数と奇数で処理変えるのも意味わからんし、イテーレタを一つずつって変更に強いと思うけど。
全部Linqでなんとかなることだけどさ。
0410デフォルトの名無しさん (アウアウクー MMd1-AKl2)
垢版 |
2020/10/25(日) 09:10:32.90ID:WAUUQolqM
偶数の場合こう処理します!
プログラム解説サイトとかでありがち。
実務でそういうのに出くわしたことほぼない。
0414デフォルトの名無しさん (スフッ Sda2-gqeA)
垢版 |
2020/10/25(日) 09:36:22.60ID:w//Xf3xfd
>>411
それはデータ行に対してやることじゃない。
行に対して表示非表示の制御加えるだけで破綻する。
表示中の画面の描画関数でやることであって、行をイテレートしてやることじゃない。

>>412
2行1セットなら、そのクラスを作って、1インスタンスごとに制御するのが王道でしょ。

どんだけ空想上の「組んだこと」で話してんの?それともボンクラなの?
0416デフォルトの名無しさん (スフッ Sda2-gqeA)
垢版 |
2020/10/25(日) 09:40:44.86ID:w//Xf3xfd
>>415
必要じゃないし、パース時点ではパーサ使うし、中では極力foreach使うよ。
2行で1アイテムが3行で1アイテムになったときにModulo全部変えてくの?
頭悪すぎるコーディングでしょ。
■ このスレッドは過去ログ倉庫に格納されています

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