ふらっと C#,C♯,C#(初心者用) Part152
■ このスレッドは過去ログ倉庫に格納されています
!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 >>144
気軽に建てたスレッドの99%はバグってるので安心して欲しい >>146
でもわたしはあなたの頭がハゲってるのが心配なんですよ >>144
https://www.kekyo.net/async
俺はこれが参考になった記憶あるな
調べたのって何年も前だから、もっと良い記事あるかもだけど >>144
スレッド
注意点一覧
・シングルコアで動くか?
・応答がないときに自決するか?
・失敗時のメモリリークはないか?
・タイムスケジュールはあるか?(例:1分の内AスレッドはX秒、BスレッドはY秒等)
・生存確認方法はあるか?
・実行中の状態は取得できるか?
・ログは出力できるか?
・最大使用メモリは把握できているか?
・失敗時のリザルトの受け取り方法は適切か?
・処理が複数失敗する可能性は考慮できているか?(例:ファイルオープン成功→ファイル書き込み失敗→ファイルクローズ失敗→tempフォルダ削除成功のとき何が返る?)
決めるのが面倒なら使うべきでないと思う >>151
おお、これは素晴らしい
ありがとうありがとう c# プログラマの書いたコードは美しい音楽のようだった。
タリバンは音楽家を処刑してるので、c# プログラマを対象に加えるべき。
c# って普通に考えたら音楽の符号だし、c# プログラマがすすめてくる「リーダブルコード」って本はどう見ても音楽関連。
https://i.imgur.com/nmlX1tw.jpg 率直な質問です
C#と.NETを一通り習得するのにどれくらい時間がかかりますか? >>157
自分の場合プログラム経験無しから「独習c#」を概ね理解しながら独学で読み進めるのに3ヶ月かかった。
LINQ やTaskなどは実践や実務でないと本だけでは習得は難しいと思う。 >>152
一般的なスレッド生存確認方法ってどんなの? >>158
それな
実際どういうコード組んでるかとか不文律の部分がてんでわからん
型の宣言にしたって最初にまとめておいたほうが良いのか、なら使い捨て変数なら使うところで良いのかとか まあ3か月である程度モノにできる人なんているとは思うけど
特別な才能の持ち主だけだと思うからそこは真に受けない方がいいと思う >>161
まあ不安が無くなってきたのは、2周目の読破が2ヶ月、3周目が1ヶ月で、合計半年過ぎた頃ですけどね。
c#もバージョンが上がって機能が増えて、初見さんには段々難しくなってきてると思う。 先生質問です。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+.'
} >>163です
追加です
C:\Users\(ユーザー名)\Documents\aa.png ×
C:\Users\(ユーザー名)\Pictures\aa.png ×
C:\Users\(ユーザー名)\aa.png 〇 >>163 追加です
using (Graphics g = Graphics.FromImage(bmp))
を抜いても再現します >>163
発生したExternalExeptionのInnerExeptionプロパティを見ればヒントが入ってんじゃないの typoしてんじゃね?と実験してみたら存在しないフォルダ名を指定していたら System.IO.DirectoryNotFoundException が投げられるのか
手元じゃ再現しないからわからんなぁ
Environment.GetFolderPath(Environment.SpecialFolder.Desktop) とか使ってもダメなんかね? >>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;
}
なんでこの程度のことを最初にやらないの? >>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);
}
なんでなのおおおおおおおおおおお ・using (Graphics g = 〜) の外側でSave()を実行する
・Save()で直接ファイルに書き込まず、一度MemoryStreamに入れた後にファイルに書き込んでみる
思いつくのはこの辺りかな >>169
できたときとできないときのpathってデバッガで見たとき違った? >>169
そもそも同じディレクトリにテキストファイルは生成出来るの?
public static void Test_MakePNG4()
{
var path = @"E:\SS\aa.png.txt";
using (var writer = new StreamWriter(path))
{
writer.WriteLine("こんにちは");
}
} >>172
っていうか普通のセンスの人ならまず
(1) コードで指定しているパスのディレクトリをエクスプローラの
アドレスバーにコピペして開けるかどうか確認
(2) 開けたらそこで何等かのファイルの新規作成が可能かどうか確認
このぐらいはやるよね。
当たり前のことをやらずにエラーが出ます、どうしてでしょうって言われても知らんがなとしか 先生、解決しますた・・・
忘れていました、、、うちのPCには暴れん坊のアバストさんがいることを・・・・
あいつ、最近勝手にランサムウェアシールドっていうのの保護対象にE:\SSやデスクトップを追加してたみたいで・・・
ぐぐってみたら同様に勝手に保護対象を増やされたという報告がいくつか
>>172先生が当たりでした
System.UnauthorizedAccessException: 'Access to the path 'E:\SS\aa.png.txt' is denied.'
やばそうな常駐アプリは切って再起動して確認してたつもりが
なんと一番やばいアバストさんがそのままだったという愚かさ
先生方お騒がせしました・・・ そういやマカフィーもVSでC++のデフォルトテンプレのHello Worldをデバッグコンパイルするだけで、
ウィルス認定で50%以上の高確率で削除するしなw
winに最初からあるDefenderの方が誤動作少ないし機能も十分な気がする。 プログラマでありながらアンチウイルスソフトに頼ってる奴は恥を知れよ 今はもうdefenderにtrapsとかcybereason組み合わせるのとかが主流だろ 要するに>>169に書いてることは嘘だよね。
>>168でサンプルまで書いてやれと言われてる当たり前の検証をやってない。
批判されるべきはそういうところでしょ。
単なるうっかりなら誰にでもある。 >>185-186
という粘着。
まだこんな自分棚上げの2ch脳的思考が染みついちゃってるお方いるんだね ところで、どの書き方が好き?
コーディングルール云々は別として好みの話ね
(1) Hoge hoge = new Hoge();
(2) var hoge = new Hoge();
(3) Hoge hoge = new(); Piyo piyo = new Piyo().piyo; var hage = new Hage(light) >>198
型推論と動的型付けはまったくの別物だぞ >>188
(3) なんて書けんのか?
って思ったらC# 9.0からの機能なんだな
(2) でいいと思うんだがなんかメリットあるんか? >>188
Javaやってるから(1)だ。
Javaだと(1)、C#だと(2)、のようにわざわざ使い分けるのが面倒で嫌い。 varは使わなくなったな、書き捨てのコードなら速く作業終わってよかったんだけど
後で保守することになって、何の型だかぱっと見て分からない、結局書き直す羽目になる
二度手間 >>205
まさかと思うけど印刷したリスト見てデバッグしてるとかじゃないよね? >>205
varの上にカーソル持って行ったらツールチップで型が表示されるけど Vim使いの人が同じような理由でvar嫌がってたな
まぁVim使いに合わせる訳にもいかないからそのままにしたけど (Vim使いはC#じゃなくてC++のautoの話だったかも)
それにvar使わないとジェネリックとかで複雑な型が出た時書くの面倒だからね
それに型が変えられたら書き直さないといけないし >>201
聞いて驚けよ
varの三文字分短くなる
俺も今知った VSCodeですらインテリジェンスなのにVim男は化石すぎるな >>211
それを言うなら空白も1つ減るから4文字分だろ
4バイトとか言ってたアホもいるけどw >>201
(3)の書き方は俺も今知ったな
まぁ元々は
private List<WeatherObservation> _observations = new List<WeatherObservation>();
って書いてたのが
private List<WeatherObservation> _observations = new();
と書けるようになるってことみたいだね
ローカル変数でそう各メリットは少ないかもだけど、今は(2)に慣れてるだけだろうから、そのうち(3)になってくのかも VSさんがしきりにvarはやめろ型名書けって囁いてくるからVS使ってる時だけHoge hoge = new();だな
VSCodeのときは脳死でvarって打ってる
本音ではconstって打ちたい >>216
俺のVSはvar使えって言ってくるけど >>215
長たらしい型名を2回書きたくないと言うのはわかるんだけどそれはvarで充分だと思うんだよね
new()じゃなくてメソッドがインスタンス返すような時はvar使わざるを得ないしマジでメリットが4文字減るだけにしか見えない… >>218
普段はvar使ってるけど>>215の例みたいにフィールドとかプロパティの初期化にはnew()が便利だなと思った varが使えないところで使えってことなんだろうけど
正直そこまでしてタイプ量を減らす意義が見出せん
varの本来の使い方はLINQなんかでの匿名型なんじゃないのかと >>219
ああ、なるほどフィールドとかだと
private var _observations = new List<WeatherObservation>();
って書けないのか
ちょっとググったら確かに実装がめちゃ大変そうだな
https://stackoverflow.com/questions/4461597/why-cant-class-fields-be-var new以外の関数からの戻り値を受けるのにvarが使えるから共存するだろ 私は(3)にしてます
慣れもあってか(2)のほうが書きやすいですが
githubとかでコード見る場合に関数の戻りをvar書かれると型がわからない
VS以外で読み書しないなら(2)でいいと思います。 >>188
同じ事を何度も書かないってルールで(1)は無い。
(3)も微妙に無いかな。定義だけメソッドの外、=new()だけ処理前にするとか。 マイルールで書いてもボタン一発でコーディングルールに沿ったのに変換してくれればおk >>228
推奨してるけどMS自身はvar絶対使わないマン
ギフハブみてみ >>234
説明用にわかりやすく書いてるだけなんじゃあ >>235
135: Dictionary<string, string> contents = new Dictionary<string, string>();
みたいな行もあってあんまり気にしてない感じやね
編集した時期が違うんだろうけど new()が使えるならnew()
それ以外はvarが最強 スタイル統一って本当に無駄な努力だよな
ただの見た目、書き方で迷うより同じ時間を使ってそもそもこの変数を消せないか、みたいな方向で悩みたい >>239
そんなことはないと思うけど程度問題だね。
何であれ手段を自己目的化してしまうのは確かに愚かだ。
そんなことよりスレ違いだのなんだの他人のやることに
いちいちケチをつけないと気が済まないいつもの数人が静かなのが笑えるねw
ああいう人たちはその自分の欺瞞性に嫌気がささないものなのかw ■ このスレッドは過去ログ倉庫に格納されています