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

■ このスレッドは過去ログ倉庫に格納されています
2021/08/25(水) 19:44:16.81ID:tgvUkE6r0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part151
https://mevius.5ch.net/test/read.cgi/tech/1621129559/
■関連スレ
C#, C♯, C#相談室 Part94
https://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/
・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
2021/09/16(木) 13:41:21.65ID:l6vfv8u30
>>139
>>140
わかりました先生!
2021/09/17(金) 02:16:35.15ID:C7hZqBxt0
ttps://www.youtube.com/watch?v=6pF07zSHVjA
さっきまで見てたのはこれ
2021/09/18(土) 11:42:46.32ID:hxUth2PJ0
いい動画見つけてくるやん
2021/09/20(月) 10:51:22.93ID:nPFDN3tP0
C#での非同期処理のキモがハマりどころも含めてわかりまくりの決定版みたいな記事どっかにない?
2021/09/20(月) 11:07:36.88ID:V39ohWuW0
あるよ
2021/09/20(月) 12:46:14.36ID:+AHvFjk8M
>>144
気軽に建てたスレッドの99%はバグってるので安心して欲しい
2021/09/20(月) 15:03:43.99ID:qjcSqOKx0
c#の非同期処理の解説書あったべ オレンジ色の
148デフォルトの名無しさん (ワッチョイ f72f-fBlf)
垢版 |
2021/09/20(月) 18:11:02.65ID:IjMClDHV0
>>146
でもわたしはあなたの頭がハゲってるのが心配なんですよ
2021/09/20(月) 18:32:52.96ID:aa1o0gq5a
毛はあるよ
2021/09/20(月) 18:33:29.97ID:gtjvoIz80
>>148
年齢と髪の毛が非同期
2021/09/20(月) 19:33:21.44ID:ikLxeDh90
>>144
https://www.kekyo.net/async
俺はこれが参考になった記憶あるな
調べたのって何年も前だから、もっと良い記事あるかもだけど
2021/09/20(月) 20:53:43.86ID:gtjvoIz80
>>144
スレッド
注意点一覧

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

決めるのが面倒なら使うべきでないと思う
2021/09/20(月) 20:55:06.48ID:gtjvoIz80
・本体終了時に終了できるか?

もあった
2021/09/20(月) 23:39:01.96ID:nPFDN3tP0
>>151
おお、これは素晴らしい
ありがとうありがとう
2021/09/21(火) 00:20:00.53ID:wZ9Exopu0
c# プログラマの書いたコードは美しい音楽のようだった。

タリバンは音楽家を処刑してるので、c# プログラマを対象に加えるべき。

c# って普通に考えたら音楽の符号だし、c# プログラマがすすめてくる「リーダブルコード」って本はどう見ても音楽関連。

https://i.imgur.com/nmlX1tw.jpg
2021/09/21(火) 00:36:08.07ID:Rfyn90AC0
※個人の感想です
2021/09/21(火) 05:45:16.61ID:Ke/ADbP50
率直な質問です
C#と.NETを一通り習得するのにどれくらい時間がかかりますか?
2021/09/21(火) 08:28:39.59ID:Tfcqtuvs0
>>157
自分の場合プログラム経験無しから「独習c#」を概ね理解しながら独学で読み進めるのに3ヶ月かかった。
LINQ やTaskなどは実践や実務でないと本だけでは習得は難しいと思う。
2021/09/21(火) 09:50:09.14ID:CRn+9siHD
>>152
一般的なスレッド生存確認方法ってどんなの?
2021/09/21(火) 10:40:19.83ID:iEeiy+NhM
>>158
それな
実際どういうコード組んでるかとか不文律の部分がてんでわからん
型の宣言にしたって最初にまとめておいたほうが良いのか、なら使い捨て変数なら使うところで良いのかとか
2021/09/21(火) 11:30:25.65ID:tDmaS64ca
まあ3か月である程度モノにできる人なんているとは思うけど
特別な才能の持ち主だけだと思うからそこは真に受けない方がいいと思う
2021/09/21(火) 12:21:47.37ID:Tfcqtuvs0
>>161
まあ不安が無くなってきたのは、2周目の読破が2ヶ月、3周目が1ヶ月で、合計半年過ぎた頃ですけどね。
c#もバージョンが上がって機能が増えて、初見さんには段々難しくなってきてると思う。
2021/09/21(火) 14:33:26.01ID:MozgKoB30
先生質問です。Bitmapの保存でエラーです
問題を単純化するために空のBitmapを保存して試して見たところ再現したので貼ってみます
デスクトップを始めとして特定のフォルダにだけ保存できません!
新規に作ったフォルダは大丈夫です。以前からあるフォルダでも保存出来るものもあります
セキュリティの関係かと思い、フォルダ右クリ→プロパティ→セキュリティのタブ で
比較したのですが全く同じであるにも関わらず一方だけ保存できません(ちなみにwin7)
VisualStudioのdebugフォルダの中だと保存可能です
考えられる原因、なにかありますか?

using (Bitmap bmp = new Bitmap(100, 100))
using (Graphics g = Graphics.FromImage(bmp))
{
var fullPath = "";
fullPath = @"E:\SS\aa.png";//× このフォルダの名前をSSSに変更すると〇
//fullPath = @"SS\aa.png";//〇 相対パス(debugフォルダ内)
///fullPath = @"F:\test\aa.png";//〇
//fullPath = @"E:\SSS\aa.png";//〇
//fullPath = @"C:\Users\(ユーザー名)\Desktop\aa.png";//×

bmp.Save(fullPath, ImageFormat.Png);
//↑ここでエラー
//System.Runtime.InteropServices.ExternalException: 'A generic error occurred in GDI+.'
}
2021/09/21(火) 15:05:39.31ID:MozgKoB30
>>163です
追加です
C:\Users\(ユーザー名)\Documents\aa.png ×
C:\Users\(ユーザー名)\Pictures\aa.png ×
C:\Users\(ユーザー名)\aa.png 〇
2021/09/21(火) 15:17:44.97ID:MozgKoB30
>>163 追加です
using (Graphics g = Graphics.FromImage(bmp))
を抜いても再現します
2021/09/21(火) 15:44:38.16ID:NZk8M9Nyd
>>163
発生したExternalExeptionのInnerExeptionプロパティを見ればヒントが入ってんじゃないの
2021/09/21(火) 17:05:44.52ID:iohS1gPI0
typoしてんじゃね?と実験してみたら存在しないフォルダ名を指定していたら System.IO.DirectoryNotFoundException が投げられるのか
手元じゃ再現しないからわからんなぁ
Environment.GetFolderPath(Environment.SpecialFolder.Desktop) とか使ってもダメなんかね?
2021/09/21(火) 18:10:56.43ID:nmJq7owza
>>163
たぶんシステム側のバグを疑ってるから質問してるんだろうけど、
それは自分で十分に検証した後でやること。

private void SaveDummyPng()
{
  var bmp = new Bitmap(100, 100);
  var path = AskUserForPngName();
  if (path != "") bmp.Save(path, ImageFormat.Png);
}

private string AskUserForPngName()
{
  var sfd = new SaveFileDialog();
  sfd.AddExtension = true;
  sfd.DefaultExt = "png";
  sfd.ShowDialog();
  return sfd.FileName;
}

なんでこの程度のことを最初にやらないの?
2021/09/21(火) 22:36:08.81ID:MozgKoB30
>>166
InnerExceptionPrefix " ---> " string
_COMPlusExceptionCode -532462766 int
さっぱりです><
>>167
最初はEnvironment〜を使っていたのですがだめでした
>>168
それ行けました
でもこれ↓はだめです

public static void Test_MakePNG4()
{
var bmp = new Bitmap(100, 100);
var path = @"E:\SS\aa.png";
if (path != "") bmp.Save(path, ImageFormat.Png);
}

なんでなのおおおおおおおおおおお
2021/09/22(水) 00:11:49.84ID:x9hzo5Uv0
・using (Graphics g = 〜) の外側でSave()を実行する
・Save()で直接ファイルに書き込まず、一度MemoryStreamに入れた後にファイルに書き込んでみる

思いつくのはこの辺りかな
2021/09/22(水) 00:15:18.25ID:Wj4PKJ5V0
>>169
できたときとできないときのpathってデバッガで見たとき違った?
2021/09/22(水) 00:47:04.48ID:FM+g1li10
>>169
そもそも同じディレクトリにテキストファイルは生成出来るの?

public static void Test_MakePNG4()
{
var path = @"E:\SS\aa.png.txt";
using (var writer = new StreamWriter(path))
{
writer.WriteLine("こんにちは");
}
}
2021/09/22(水) 01:01:57.27ID:Orudko8V0
>>169
https://stackoverflow.com/questions/33534740/a-generic-error-occured-in-gdi-saving-bitmap-to-desktop
2021/09/22(水) 01:33:31.16ID:7jHG7vlFa
>>173
w
見て損した
2021/09/22(水) 01:40:01.68ID:7jHG7vlFa
>>172
っていうか普通のセンスの人ならまず

(1) コードで指定しているパスのディレクトリをエクスプローラの
アドレスバーにコピペして開けるかどうか確認

(2) 開けたらそこで何等かのファイルの新規作成が可能かどうか確認

このぐらいはやるよね。

当たり前のことをやらずにエラーが出ます、どうしてでしょうって言われても知らんがなとしか
2021/09/22(水) 01:56:12.54ID:Wj4PKJ5V0
SSフォルダが無いだけな予感?
2021/09/22(水) 04:40:06.14ID:GGT0XQOL0
先生、解決しますた・・・
忘れていました、、、うちのPCには暴れん坊のアバストさんがいることを・・・・
あいつ、最近勝手にランサムウェアシールドっていうのの保護対象にE:\SSやデスクトップを追加してたみたいで・・・
ぐぐってみたら同様に勝手に保護対象を増やされたという報告がいくつか

>>172先生が当たりでした
System.UnauthorizedAccessException: 'Access to the path 'E:\SS\aa.png.txt' is denied.'

やばそうな常駐アプリは切って再起動して確認してたつもりが
なんと一番やばいアバストさんがそのままだったという愚かさ
先生方お騒がせしました・・・
2021/09/22(水) 06:47:06.99ID:Wj4PKJ5V0
おお、そういうこともあるのか
2021/09/22(水) 17:41:14.68ID:UxQCWMGf0
そういやマカフィーもVSでC++のデフォルトテンプレのHello Worldをデバッグコンパイルするだけで、
ウィルス認定で50%以上の高確率で削除するしなw

winに最初からあるDefenderの方が誤動作少ないし機能も十分な気がする。
2021/09/22(水) 17:44:26.85ID:oFL52ARd0
プログラマでありながらアンチウイルスソフトに頼ってる奴は恥を知れよ
2021/09/22(水) 17:51:55.03ID:iQc20bnI0
勤めたこと無い奴にはわからんだろうな
2021/09/22(水) 18:02:03.45ID:olBznEii0
>>180
w
2021/09/22(水) 18:06:10.53ID:Vihg9CWp0
今はもうdefenderにtrapsとかcybereason組み合わせるのとかが主流だろ
2021/09/22(水) 19:06:33.90ID:H7s1JKhea
要するに>>169に書いてることは嘘だよね。
>>168でサンプルまで書いてやれと言われてる当たり前の検証をやってない。

批判されるべきはそういうところでしょ。
単なるうっかりなら誰にでもある。
2021/09/22(水) 19:22:15.10ID:x9hzo5Uv0
粘着しすぎ
2021/09/22(水) 19:30:17.32ID:BIVRjYoPd
>>184
しつこい
2021/09/22(水) 20:59:35.34ID:ykEJ9q7La
>>185-186
という粘着。
まだこんな自分棚上げの2ch脳的思考が染みついちゃってるお方いるんだね
2021/09/22(水) 21:17:53.61ID:3pWwqqR20
ところで、どの書き方が好き?
コーディングルール云々は別として好みの話ね
(1) Hoge hoge = new Hoge();
(2) var hoge = new Hoge();
(3) Hoge hoge = new();
2021/09/22(水) 21:32:29.48ID:vBUUQQ5hM
hoge嫌い
190デフォルトの名無しさん (ワッチョイ f737-tt/w)
垢版 |
2021/09/22(水) 22:51:39.25ID:d5y6nh1w0
じゃあ2で
2021/09/22(水) 23:31:30.21ID:SH+Gpd0ma
Piyo piyo = new Piyo().piyo;
2021/09/23(木) 00:08:14.65ID:e9nBPEnq0
var hage = new Hage(light)
193デフォルトの名無しさん (アウアウウー Sa5b-hED7)
垢版 |
2021/09/23(木) 00:18:07.56ID:1QHTb9H7a
Hoge hoge();
2021/09/23(木) 00:22:45.17ID:W+8jwCREd
>>188
2
2021/09/23(木) 02:40:16.71ID:xSNs6jtp0
>>188
varが使いたいから(2)で統一。
196デフォルトの名無しさん (ワッチョイ d75f-P0JL)
垢版 |
2021/09/23(木) 06:17:51.94ID:knB3B2Kp0
3だな
2021/09/23(木) 10:39:33.85ID:k5aXOyOM0
4バイトも節約できるんだから3に決まっとろうが
198デフォルトの名無しさん (ワッチョイ 775f-4bEA)
垢版 |
2021/09/23(木) 10:45:10.69ID:zah9lHsX0
1か3
varはjsっぽくていや
2021/09/23(木) 10:48:49.49ID:A5zZg67+0
>>188
(2)
2021/09/23(木) 11:28:35.90ID:oS4wzjRX0
>>198
型推論と動的型付けはまったくの別物だぞ
2021/09/23(木) 11:34:40.89ID:dUOklB1+M
>>188
(3) なんて書けんのか?
って思ったらC# 9.0からの機能なんだな
(2) でいいと思うんだがなんかメリットあるんか?
202デフォルトの名無しさん (ブーイモ MMcf-fBlf)
垢版 |
2021/09/23(木) 11:56:33.67ID:acEFt2vDM
>>188
Javaやってるから(1)だ。

Javaだと(1)、C#だと(2)、のようにわざわざ使い分けるのが面倒で嫌い。
2021/09/23(木) 11:58:17.37ID:8wTnR9dmM
Javaはvar使えるぞ
204デフォルトの名無しさん (エムゾネ FFbf-hED7)
垢版 |
2021/09/23(木) 12:34:19.60ID:7tGJmFKPF
auto がいいな
2021/09/23(木) 12:52:13.66ID:mH17AHdd0
varは使わなくなったな、書き捨てのコードなら速く作業終わってよかったんだけど
後で保守することになって、何の型だかぱっと見て分からない、結局書き直す羽目になる
二度手間
2021/09/23(木) 13:06:25.13ID:GXKXc62za
variant型
2021/09/23(木) 13:36:37.01ID:tEWlRRfOM
>>205
まさかと思うけど印刷したリスト見てデバッグしてるとかじゃないよね?
2021/09/23(木) 13:37:43.63ID:oS4wzjRX0
>>205
varの上にカーソル持って行ったらツールチップで型が表示されるけど
2021/09/23(木) 14:16:06.38ID:lUK0l/hC0
Vim使いの人が同じような理由でvar嫌がってたな
まぁVim使いに合わせる訳にもいかないからそのままにしたけど
2021/09/23(木) 14:22:03.84ID:lUK0l/hC0
(Vim使いはC#じゃなくてC++のautoの話だったかも)
それにvar使わないとジェネリックとかで複雑な型が出た時書くの面倒だからね
それに型が変えられたら書き直さないといけないし
2021/09/23(木) 14:25:27.53ID:+1CY5Q9Y0
>>201
聞いて驚けよ
varの三文字分短くなる
俺も今知った
2021/09/23(木) 14:28:02.99ID:+1CY5Q9Y0
VSCodeですらインテリジェンスなのにVim男は化石すぎるな
2021/09/23(木) 14:32:54.37ID:CUMa33xsd
>>205
秀丸でコーディングしてんの?
2021/09/23(木) 14:37:00.53ID:dUOklB1+M
>>211
それを言うなら空白も1つ減るから4文字分だろ
4バイトとか言ってたアホもいるけどw
2021/09/23(木) 14:46:20.44ID:lUK0l/hC0
>>201
(3)の書き方は俺も今知ったな
まぁ元々は
private List<WeatherObservation> _observations = new List<WeatherObservation>();
って書いてたのが
private List<WeatherObservation> _observations = new();
と書けるようになるってことみたいだね

ローカル変数でそう各メリットは少ないかもだけど、今は(2)に慣れてるだけだろうから、そのうち(3)になってくのかも
2021/09/23(木) 15:27:13.76ID:o2KvPEYta
VSさんがしきりにvarはやめろ型名書けって囁いてくるからVS使ってる時だけHoge hoge = new();だな
VSCodeのときは脳死でvarって打ってる
本音ではconstって打ちたい
2021/09/23(木) 15:41:02.12ID:oS4wzjRX0
>>216
俺のVSはvar使えって言ってくるけど
2021/09/23(木) 16:30:44.15ID:tEWlRRfOM
>>215
長たらしい型名を2回書きたくないと言うのはわかるんだけどそれはvarで充分だと思うんだよね
new()じゃなくてメソッドがインスタンス返すような時はvar使わざるを得ないしマジでメリットが4文字減るだけにしか見えない…
2021/09/23(木) 16:44:32.43ID:oS4wzjRX0
>>218
普段はvar使ってるけど>>215の例みたいにフィールドとかプロパティの初期化にはnew()が便利だなと思った
2021/09/23(木) 16:51:19.32ID:VgSYdOn80
varが使えないところで使えってことなんだろうけど
正直そこまでしてタイプ量を減らす意義が見出せん

varの本来の使い方はLINQなんかでの匿名型なんじゃないのかと
2021/09/23(木) 16:51:37.14ID:tEWlRRfOM
>>219
ああ、なるほどフィールドとかだと
private var _observations = new List<WeatherObservation>();
って書けないのか
ちょっとググったら確かに実装がめちゃ大変そうだな
https://stackoverflow.com/questions/4461597/why-cant-class-fields-be-var
222デフォルトの名無しさん (ワッチョイ d75f-P0JL)
垢版 |
2021/09/23(木) 17:00:18.43ID:knB3B2Kp0
十分とか言ってるけど215のってvar使えるの?
2021/09/23(木) 17:01:07.90ID:PpSx1KBx0
私はあの中からは選ばない、絶対に
224デフォルトの名無しさん (ワッチョイ d75f-P0JL)
垢版 |
2021/09/23(木) 17:01:12.39ID:knB3B2Kp0
じゃあ3のほうが統一できるメリットあるじゃん
2021/09/23(木) 17:12:04.49ID:Sp5Iyysf0
new以外の関数からの戻り値を受けるのにvarが使えるから共存するだろ
2021/09/23(木) 17:31:12.69ID:+1CY5Q9Y0
>>216
設定で変わるんですが
2021/09/23(木) 19:02:03.53ID:sP+rEUVs0
私は(3)にしてます
慣れもあってか(2)のほうが書きやすいですが
githubとかでコード見る場合に関数の戻りをvar書かれると型がわからない
VS以外で読み書しないなら(2)でいいと思います。
2021/09/23(木) 20:01:59.44ID:O4CJNIQl0
>>216
え?
MSはvar推奨じゃなかった?
2021/09/23(木) 23:00:18.51ID:/ClkVF3E0
>>228
プロジェクトによって違う
230デフォルトの名無しさん (ブーイモ MMde-DBkT)
垢版 |
2021/09/24(金) 04:58:42.78ID:y2XYMU1vM
StyleCopで設定するんじゃないの?
2021/09/24(金) 05:56:28.56ID:qfZk0bKT0
>>188
同じ事を何度も書かないってルールで(1)は無い。
(3)も微妙に無いかな。定義だけメソッドの外、=new()だけ処理前にするとか。
2021/09/24(金) 08:28:43.49ID:NPGccV1b0
そんなマイルールあるとプログラミング難しそう。
233デフォルトの名無しさん (ブーイモ MMde-DBkT)
垢版 |
2021/09/24(金) 09:33:22.65ID:irV+RdEOM
マイルールで書いてもボタン一発でコーディングルールに沿ったのに変換してくれればおk
2021/09/24(金) 09:39:21.92ID:5BpUyVVQ0
>>228
推奨してるけどMS自身はvar絶対使わないマン
ギフハブみてみ
2021/09/24(金) 09:49:52.41ID:/LssCrRN0
>>234
そうだっけ?
と思って検索したら普通に使ってるですけお??
https://github.com/microsoft/winget-create/blob/a230d51ec9a64f0e980c10bba4941cb09def5cd6/src/WingetCreateCore/Common/GitHub.cs#L54
2021/09/24(金) 10:03:35.81ID:5BQj5+hr0
>>234
説明用にわかりやすく書いてるだけなんじゃあ
2021/09/24(金) 10:14:18.30ID:U+wMsrW6M
>>235
135: Dictionary<string, string> contents = new Dictionary<string, string>();
みたいな行もあってあんまり気にしてない感じやね
編集した時期が違うんだろうけど
238デフォルトの名無しさん (ワッチョイ 175f-6iP1)
垢版 |
2021/09/24(金) 10:24:15.05ID:/Uk5P+XR0
new()が使えるならnew()
それ以外はvarが最強
2021/09/24(金) 10:49:29.55ID:Qkaih1UNa
スタイル統一って本当に無駄な努力だよな
ただの見た目、書き方で迷うより同じ時間を使ってそもそもこの変数を消せないか、みたいな方向で悩みたい
2021/09/24(金) 11:31:51.86ID:eAv8Xp0Q0
>>234
みてみ
https://github.com/dotnet/aspnetcore/blob/277e42f4dcf1ee41c8a1b61a6aaa3e17ef15a1d9/.editorconfig#L36
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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