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

■ このスレッドは過去ログ倉庫に格納されています
2021/05/16(日) 10:45:59.00ID:8qTwOc620
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part150
https://mevius.5ch.net/test/read.cgi/tech/1616471904/
■関連スレ
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/06/18(金) 12:12:31.58ID:wj2zORhF0
他人のコードにケチつけずにはいられない、嫌われる人。
2021/06/18(金) 13:08:32.73ID:ApjvrmIoM
VisualStudioスレで質問しましたが回答を得られなかったのでこちらに投げ直します、よろしくお願いします

c#でWindowsFormのForm1(大きさ以外全てデフォルト)に
richTextbox(大きさ以外全てデフォルト)のコントロールを張り付けて以下のコードを実行

static void Main()
{
Application.Run(new Form1());
}

表示されたrichTextboxにイメージをペーストすると強制的に縮小されてしましまいます、richTextboxのサイズに依存せずすべて同じ大きさになります

どうして等倍で表示されないかの理由と等倍にする方法、又は倍率指定をする方法はありますか?

※キャプチャ画面 http://up-img.net/img.php?mode=jpg&;id=22425

参考1:vb.netでも同じ現象が起きます
参考2:クリップボードのイメージを縮小してからペーストしたところ画像は小さくなるのですが拡大してからペーストをしても同じ大きさのままで一定の大きさを超えることはありませんでした
参考3:イメージのハンドルをマウスカーソルでつかんで大きさを変えることは可能です
2021/06/18(金) 15:11:40.58ID:BPwODCTr0
テトリス作ってるんだけどおもしれー
もしググったら洗練されたコード出てきちゃってつまんなくなるから一切調べない方向で行く
オブジェクト指向って何ですか?っていうとんでもなく酷いコードなんだけど、とりあえず力尽くで作ってみる
2021/06/18(金) 15:15:28.22ID:IfPYq/+20
>>343
イイね!できたら教えてよ!!
2021/06/18(金) 15:25:02.03ID:BPwODCTr0
はぁ〜い 時間かかりそうだけど!
346デフォルトの名無しさん (ラクッペペ MMb6-tFUR)
垢版 |
2021/06/18(金) 16:37:12.93ID:tae+NGJOM
wpfのdatagridでmvvmでテトリス
2021/06/18(金) 17:29:10.97ID:2oHMGf83a
>>342
再現できんなあ。

コピー元アプリの方で縮小してるんじゃないの?
その問題のクリップボードの画像は、他のアプリ、例えばペイントにペーストした時には
ちゃんと原寸大でペーストされる?

画像サイズがデカい時、ワードパッドだと横幅に合わせて縮小されるけど、
RichTextBoxにそんな気の利いた機能が実装されてるとも思えんけど
2021/06/18(金) 17:35:41.01ID:CeuVWc4D0
DPIじゃねーの
2021/06/18(金) 19:34:09.02ID:sIt6goKIM
>>347、348
ペイント、エクセルでは等倍になりましたがOneNoteは少し小さくなりました
確かにDPIが関係していそうな気がするのでそのあたりを調べてみますね
2021/06/18(金) 21:14:08.05ID:sIt6goKIM
>>349
色々試してみたところ画像ファイル(jpg)を直接ドラッグしたりコピペした場合には画像が小さくなって、ペイントに一度貼り付けたものをコピペした時は等倍になるようです
つまりクリップボードの中身がファイル名だとなぜか縮小されて、イメージファイルだと正しくコピーされるようです、理由は解らないですがちゃんとイメージをコピーしていない自分のミスでした、すみません
ありがとうございます
2021/06/18(金) 21:18:17.98ID:CeuVWc4D0
マカーが作った画像じゃないの?DPIが72になってるやつ。
Windows標準は96dpiだから、同じ300ピクセルの画像でもdpi情報が72か96かで変な挙動した記憶がある。
テストに使ってる画像を右クリックして詳細タブの「水平/垂直方向の解像度」の値みてみ。

それとテスト画像を96dpiで作られてるもので試してみるとか
2021/06/18(金) 21:21:54.18ID:CeuVWc4D0
右クリックしてプロパティの詳細タブね
中段くらいにあるの「水平方向の解像度/垂直方向の解像度」
2021/06/19(土) 00:22:28.91ID:6GSPTGzeM
>>351
私もそう思って色々なDPIのファイルを試したのですけど全て同じ挙動なんですよね、大体は96か300あたりでした
逆に72は今のところはないようです

とりあえずPictureBoxに画像を読み込めば等倍でいけるのでそれで代用するしかないかなと考えています
2021/06/19(土) 11:19:41.98ID:aMtkyk0f0
再現はしたけど、解決方法は分からないなあ。
間接的な方法ではこんなのがあるかも。
1) RichTextBox の中に PictureBox を貼り付ける
2) コピー元によっては期待通りになるなら、一度別のコントロールに貼り付けた後にそこからコピペしてみる

RichTextBox.Rtf プロパティをどうにかするって投稿もあったけど、自分にはどうにもならなかった。
2021/06/19(土) 13:34:06.66ID:Dd96s04da
だから最初から言ってるけど、コピペにしろD&Dにしろ、まずソース側を疑うのが普通でしょ。
何でそれをやらないのか不思議でしょうがない。

ソース側がサムネイルを提供してるならサムネイルが表示されるのが正常な動作で受け取る側では
どうしようもない。

少なくともデータがビットマップなら勝手に縮小するような仕様になってないのは確かだ。
2021/06/19(土) 16:10:20.94ID:aMtkyk0f0
疑うソースがないからでは。
新規作成のプロジェクトに RichTextBox を張っただけで再現したし。
2021/06/19(土) 16:34:18.74ID:Dd96s04da
>>356
えっと日本語通じてますか?
2021/06/19(土) 16:42:34.90ID:uTQPbFOf0
通じるだけでいいのか?(挑発)
2021/06/19(土) 17:09:46.83ID:Dd96s04da
>>342の人がソース側(コピー元)に使っているアプリがそうなっているか分からないが、
コピーやドラッグ操作が行われた時、デスティネーション側に提供するデータが

(1) 元画像のファイル名
(2) その画像のサムネイル

この2つを含む時、ペーストまたはドロップされる側のアプリがどちらを優先的に受け取るかによって
何が表示されるかは異なってくる。

>>350に書かれているような現象が起こるとしたらこういう理由でしょうね。
2021/06/19(土) 18:35:19.62ID:21QoYkZn0
有料サービスかYahoo!知恵遅れを使いたまえ
2021/06/19(土) 23:50:18.43ID:c/Gc9inqM
>>359
ありがとうございます、350です、確かにクリップボードをみてみると同じjpgファイルでも
ペイントに表示させてからコピーしたものはイメージの形式がCF_DIBになっていて
エクスプローラからコピーしたものはCF_HDROPになっていました
予想ではrichTextboxはこのデータの形式によって挙動(優先順位もそうですが)が違うようで
CF_DIB(BITMAP)形式のデータを渡してあげないと等倍にはしてくれないようです

ここまでは教えて頂いて解ったのですがじゃあどうするかというとかなり難しいようで
スキル的にさっぱり解らないので今回は何か他の方法を検討してみようと思います
※ちなみにPictureBoxに表示させてからコピペしてもダメでした
2021/06/20(日) 02:16:25.90ID:ly1l4Yun0
普通にエクスプローラからコピペとかドロップしたら、ファイル名が表示される気がするんだが
詳しい環境と手順書いてくれ
2021/06/20(日) 08:47:45.77ID:j7B8ObuHM
>>362
解る限りですが……
VS:Version 16.7.2 win10 4K
ブラウザ:Chronme
手順は基本 >>342のとおりです、それ以外は特にいじっていないです
あとは下記2点で試しています
元ファイルはネットにある画像ファイル(不特定多数でなんでも)で
縮小は横幅が376(目読み 笑)ピクセル以上あればどれでも起こるようです
※PictureBox1.SizeMode = PictureBoxSizeMode.Zoom;と同じ挙動です

クリップボード内容はこれで確認しました
https://www.officedaytime.com/clipmm/

参考にしたのはここらへんです
https://www.atmarkit.co.jp/ait/articles/0012/19/news005.html
https://johobase.com/clipboard-get-set-csharp/
http://blog.esora.xyz/clipboard-auto-convert
https://docs.microsoft.com/en-us/windows/win32/dataxchg/standard-clipboard-formats
https://dobon.net/vb/dotnet/system/clipboardformats.html

もちろんエクスプローラーからコピペしたものはファイル名も入っているのですが
前回その部分は割愛させていただきました
2021/06/20(日) 11:30:26.30ID:VCVOwR8e0
ここを見るといいと思う
https://weblog.west-wind.com/posts/2020/Sep/16/Retrieving-Images-from-the-Clipboard-and-WPF-Image-Control-Woes
2021/06/20(日) 13:09:02.38ID:ly1l4Yun0
RichTextBoxのEnableAutoDragDropはデフォルトfalseだから、そもそもドロップできないってのはおいといて

エクスプローラからRichTextBoxに(JPEG)ファイルをドロップやペーストしても
ファイル名が表示されるだけで、そこに画像が表示されたりしないだろって言ってるんだが

俺の環境だけか?
2021/06/21(月) 17:49:14.81ID:653L3PyX0
AppendAllTextとアクセス権についてお詳しい方いらっしゃいましたら教えてください。

今、とあるテキストファイルに対しデータを追加するコードを書いています。そのファイルのアクセス権は少し特殊で、上書き保存は許可せず、データの追加のみ許可しようと考えています。

OSはWin10ですので、ファイルのセキュリティの詳細設定から、データの書き込み許可のチェックは外し、データの追加の許可はチェックしてある状態です。
その状態でファイルに対しAppendAllTextを実行すると、ファイルのアクセスが拒否されたとのエラーが発生してしまいます。
StreamWriterやFileStreamを使ってデータの追加を試みても同様の結果でした。
実行アカウントが正しいことはWindowsIdentityから確認済みで、操作対象のファイルに対しデータの追加権限があることもSecurityManagerのIsGrantedで確認しました。
また、データの書き込みを許可するとエラーは出なくなります。

以上の現象は仕様なのでしょうか?
データの書き込みを許可せずにファイルにデータを追加する良い方法は無いでしょうか?
長文になり申し訳ありませんが、教え頂けると幸いです。
2021/06/21(月) 18:56:22.55ID:p5QR5ZM70
それC#関係あるの?
2021/06/21(月) 19:09:48.17ID:653L3PyX0
>>367
許可は与えているのでできないのはC#側の仕様かと思い込んでいましたが、先程Pythonで同様の処理をしようとしても同じくエラーでした。
アクセス権はあるはずなのにできない理由が不可解ですが、C#固有の問題では無さそうなのでスレ違いでした。
お騒がせしました、ありがとうございました。
2021/06/21(月) 19:44:00.59ID:ZPtJaOSgM
試さずに書いちゃうけど、
>>366のはFileStreamのコンストラクタでfileModeに「FileMode.Append」を明示的に指定した場合に限っては
エラーにならず意図したとおりに追記書き込みが出来そうな気がする

File.AppendAllTextのソースを軽く見た限りは
https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,d673bcd88b09d5b8

https://referencesource.microsoft.com/#mscorlib/system/io/file.cs,4ff1446b33bdfb6b
って感じで細かいパラメータを指定せずStreamWriterを開いてるから
暗黙のうちにFileMode.Open(=追記に限らない汎用的な書き込み要求)でファイルを開こうとして
エラーになってるんだと思う
2021/06/21(月) 19:57:20.17ID:/frx3MW9a
cmdで
echo AAA >> hoge.txt
とかやってもダメだねw

そもそも「書込み不可」なのに「追記可能」というのは矛盾しているようにしか聞こえない。
ググって↓の記事とか読んでみたがどうも判然としないね
https://milestone-of-se.nesuke.com/sv-basic/windows-basic/kind-of-permission/

逆に「書込み可能」と「追記不可」という組み合わせに意味があるってことなんだろうか?
2021/06/21(月) 20:01:54.37ID:/frx3MW9a
>>369
やってみたがFileAccess.Writeを指定してオープンできへんので
当然FileMode.AppendもNG
2021/06/21(月) 20:25:03.04ID:doqvFJGs0
>>369
スレチで終わってる話を蒸し返す
C#名物教えたがりマン
2021/06/21(月) 20:26:07.89ID:653L3PyX0
皆様ありがとうございます。
長くなりすぎて書くのを省いてしまったのですが、FileMode.Appendと明示しても駄目でした。
書き込みは既存の内容を変更するための権限と思っていたので追記は単独で機能すると考えたのですが、追記するにも書き込み権限が必要になるようですね…
2021/06/21(月) 20:27:24.58ID:R1Q9shF9M
あーできないんかー

FileStreamの初期化処理見てみたら何かわかるかなあと思ったら
歴史の積み重ねというかなんとも泥臭いソースだった・・・
https://referencesource.microsoft.com/#mscorlib/system/io/filestream.cs,76ef6c04de9d0ed8,references
ファイル開く処理って当たり前だけどWin32APIなのね
2021/06/21(月) 20:32:49.87ID:R1Q9shF9M
えースレチなの?
C#で書くソースでもNETFrameworkAPIの仕様についての話になるようなテーマはこのスレで書いちゃだめなのかあ
こんなんで教えたがりマン呼ばわりされちゃうのかあ
2021/06/21(月) 20:41:48.04ID:doqvFJGs0
>>375
.NET APIの話ですらなく、NTFSの話だから完全にスレチ
上書き保存を禁止したファイルには追記もできない
377デフォルトの名無しさん (アウアウウー Sa47-FswZ)
垢版 |
2021/06/21(月) 20:47:40.52ID:4MUa/1sNa
また下劣な交通整理マンが威張ってるのかw
ほんとバカだよなこいつ
2021/06/21(月) 20:52:11.09ID:4MUa/1sNa
このバカの論理を厳密に適用したらこのスレの大半の質問はスレ違いになる。
そもそも>>366みたいな質問で誰が困るのかね。
だーれも困りゃしねーよバーカ。
単にお前が他人にケチを付けたいって卑しい動機で言ってるだけだろ馬鹿臭い。
2021/06/21(月) 21:30:40.10ID:doqvFJGs0
>>378
え?ファイルシステムとC#なり.NET Frameworkなりにどんな関係が?
>>378の言うことを疎漏に適用したら5chにスレは一つで良いってことになるけどその境界は?
2021/06/21(月) 22:14:52.08ID:BUoiO5zG0
フルコントロールを外す
変更、書込に許可
特殊なアクセス許可で削除、ファイルの作成不許可だったかな
2021/06/22(火) 19:04:26.06ID:MwXlKMk/0
諸先輩の方々にご教授願いたい事があり、質問させていただきました。

皆さん、アプリを作成する際のアイコンはどこで仕入れてらっしゃいますでしょうか?

ツールバーのアイコンのセットを購入したいのですが、どこで皆さん買われてますか?

教えてください🙇🏻
2021/06/22(火) 19:30:53.20ID:nUMy0Bm50
C#関係無し。次の方どうぞ。
2021/06/22(火) 20:15:33.60ID:OGQvzFYh0
https://docs.microsoft.com/ja-jp/visualstudio/designers/the-visual-studio-image-library?view=vs-2019
384デフォルトの名無しさん (ワッチョイ 8754-LgoA)
垢版 |
2021/06/23(水) 02:14:59.51ID:7ER6/IiD0
例外処理をどうするべきか教えて下さい。

処理の流れは以下です。
@DBサーバーに接続
Aサーバーにクエリを投げてデータ取得
A取得したデータをFormのDataGridViewに反映

この場合、通信不調が原因で例外が発生しそうな場所は、
@接続タイムアウト
Aクエリ送信後に通信不調が発生しデータ取得不可
Bデータが取得できなかった場合にNullReferenceException
だと思っているのですが、どこでtry catch処理してユーザーに通知するべきなのでしょうか?
2021/06/23(水) 08:25:05.59ID:ShlUbf0a0
C#関係無し。次の患者さんどうぞ。
2021/06/23(水) 08:54:43.68ID:Mu5bi6dj0
これは関係あるだろ
歴外処理は言語依存だ
2021/06/23(水) 09:16:09.79ID:F5LywJDKM
>>384
NullReferenceExceptionが出るのはバグと見做すのが普通であり、明示的にnullチェックして例外を発生させないようにすべき
そもそも例外は個別に処理しないのが基本であり、ユーザーへの通知なんか最終的にはApplication.ThreadExceptionイベントでやればよい
その上でメッセージを出し分けたいとかリトライしたいとか個別の事由がある場合には処理に適した場所でキャッチして処理する
個別にメッセージ出したいならクリックのイベントハンドラなどUIの一番大元で処理するのが適切だろうな
2021/06/23(水) 12:59:00.83ID:tnu5qnzMa
>>384
なんか抽象的過ぎて結局何が聞きたいのかよくわからない気が。

tryブロックをどこに書くべきかって話ならもちろん普通は発生個所に書く。っていうか、
通信が絡むならリトライする関係で必然的にそうなるよね?その上で必要ならそのまま再スローするか
ラップしてスローする。

リトライなんかしなくてもtryブロックはいちいち発生個所に書かないとダメ。なぜならどこで例外が
起こりうるかなんてだいたい理解しているのはそのコードを集中して書いてる時だけですぐに忘れるから

エラーメッセージの表示は誰の仕事かという意味ならそれはもちろんUIの仕事で疑問の余地はない。

あと間違ってるかもしれないが、↓の記事にあるような集約的に例外をトラップする機能は
プログラマが想定してない例外の発生(要するにバグ)を想定して使うものであって
手抜きのために使うものではないと思う。
https://www.atmarkit.co.jp/ait/articles/1512/16/news026.html
2021/06/23(水) 22:27:53.29ID:oXoNjVOZ0
終了処理がないなら例外は一番外側でcatchすればいいかな?
一番外側ってのはformでいうclickメソッドみたいなのね

終了処理が必要なとき
つまりDBの更新処理なんかに失敗したとき例外でぶっ飛ばしちゃうと
Rollbackができないのでcatchが必要

よくやる間違った組み方で
例外=エラーとして組んじゃうと
上記のようなときにエラーをうまく伝搬することができない
例外は本当に想定外の受け皿
ある条件下で起こることがわかっているものはエラーとして処理するとうまくいく
2021/06/23(水) 22:35:03.91ID:mfn5LAEG0
>>389
>Rollbackができないのでcatchが必要

using TransactionScopeするといいよ
2021/06/23(水) 22:58:23.05ID:oXoNjVOZ0
>>390
うーむ、DBのcompleteと
一連の処理の成功が
完全にイコールの場合はいいけど
最後にファイル書き込み&メール送信
失敗したらRollback
みたいなときは注意が必要だな
大抵はうまくいくけども
だからこそ落とし穴になるというか

システムにガッツリ入れ込むんじゃなくて使わないときの選択肢はほしいな
2021/06/24(木) 00:08:14.09ID:PG/lAwcj0
>>391
>最後にファイル書き込み&メール送信
>失敗したらRollback

それはファイル書き込みやメール送信が成功した後に
DBコミットが失敗するケースを考えないといけないから設計も運用も煩雑になるよ
DBコミット後にEventual Consistencyで対応したほうが楽

特にメール送信はキューへの書き込みくらいまでしかトランザクショナルに処理できないので
DBのトランザクションとは分けたほうがいいケースがほとんど
2021/06/24(木) 00:42:39.29ID:lRMvkPF00
質問失礼します。
いろいろ調べてこちらのコードを書いてみたのですが、実行するとForm1_Loadの中身が反映されません。
まだHello World くらいしかやったことがないので本当に初歩的な質問かもしれませんが、どうぞよろしくお願いします。

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
this.FormBorderStyle = FormBorderStyle.None;

this.WindowState = FormWindowState.Maximized;

this.TransparencyKey = this.BackColor;
}
2021/06/24(木) 03:59:04.52ID:rpTvuBDma
>>393
この記事を読んでもらった方が早いねたぶん
http://dobon.net/vb/dotnet/help/eventhandler.html

イベントの「正体」はデリゲートというものを理解するまで理解できないと思う。
デリゲートは初心者にはなかなか理解しづらいと思うので、今は理解できなくてもそのうちわかると
気楽に考えた方がいいと思う。気にするとたぶん挫折する。
2021/06/24(木) 22:27:46.69ID:i+Vi3+/e0
教えて下さい。

List<List<string>> lstA = new...(略
for( 0から複数回ループ ){
List<string> lstB = new ...(略

switch aa{
case 1
lstB = 代入 break
case 2
   lstB=代入  break
case 3
   lstB = 代入 break

lstA.AddRange(lstB)
}

コード売る覚えですけど、リストの中にリストをぶっこみたいんですけど、未割り当てでdefaultがないと怒られるんですけど、例外がない場合ってどうしたらいいんですか?
2021/06/24(木) 22:29:11.05ID:rge7FtvrM
× うるおばえ

〇 うろ覚え
2021/06/24(木) 22:37:46.49ID:aX40sl0UM
不本意かもしれないけどいずれかのcaseをdefaultにする
or
defaultブランチを書いてcontinue
2021/06/24(木) 22:48:05.74ID:rge7FtvrM
適当な例外投げとけばバグも見つかって一石二鳥

default: throw new InvalidOperationException();
2021/06/24(木) 22:56:46.52ID:b77M28pt0
最近はSwich文を全く使わなくなったな

List<string> lstB = aa swich{
1 => 代入,
2 => 代入,
3 => 代入,
_ => new ...(略,
}
2021/06/24(木) 22:58:50.51ID:b77M28pt0
t が抜けてるけど気にしないでくれ
2021/06/24(木) 23:02:06.74ID:rge7FtvrM
その前にListの階層からして使い方が適正なのかが怪しい気がする
AddRangeするけど省略されている "代入" がちゃんとそういう内容なのか
2021/06/25(金) 00:41:42.94ID:wXZRavwVa
真面目に質問しているようには見えんねw
こんな過疎スレでつまんないネタ展開して何が楽しいのか俺には理解できない。
普通にスベってるし
2021/06/25(金) 13:25:51.80ID:5MBIcCm10
ファイルフォーマットや電文にenum入れたクソがいて
文字列で保存されてたり
数値で保存されてたりして
グチャグチャなんだけど
enumの値ってどうやって保存しておくといいの?
2021/06/25(金) 14:07:21.71ID:GFvOt5Sm0
あたいの知ったこっちゃないね!
2021/06/25(金) 14:14:28.34ID:5MBIcCm10
c#側はEnum.Parseとか言うのがあって
数値も文字列もいける?らしいけど
受け側からふざけんなクソがって言われてる

こんなの使ったばっかりに
2021/06/25(金) 14:28:37.77ID:uD9w9riW0
仕事の愚痴は上司に言ってください
2021/06/25(金) 14:35:32.46ID:j/rxeqaFM
>>403
> ファイルフォーマットや電文
一番最初に決める事柄だろ…
2021/06/25(金) 14:46:03.09ID:eNSUt1x80
enumは何も悪くないような・・・

普通は数値じゃなく文字列でシリアライズする
2021/06/25(金) 16:13:46.18ID:i6/+pAU60
電文…
2021/06/25(金) 16:57:16.22ID:JjIudpyP0
C#側でenumをシリアライズしたなら皆数値になるんじゃないのか
ファイルや電文に文字列や数値が混在するのはそのフォーマットの問題やんけ
2021/06/25(金) 17:04:30.32ID:LgKicgUoa
>>403
別に揚げ足取りとかじゃなく、何がベストな方法かは要件次第なので、
要件をオープンにしたままで何がベストって言われても誰も答えようがないと思うよ。

なんか半年ぐらい前にもenumなんかイラネーって持論を展開してた人が
おった気がしたけどひょっとして同じ人だったりするんだろうかw
2021/06/25(金) 20:50:22.66ID:t4QgArn70
bool値が文字列か01かもバラバラになってそう
2021/06/25(金) 21:02:25.32ID:GFvOt5Sm0
booleanはtrueかfalseであって、文字列でも0/1でもない。
2021/06/25(金) 23:14:59.07ID:Gf4W5qTu0
true/false も文字列も 0/1 も真偽値の状態を表す状態や表現でしかないけどな。
2021/06/26(土) 01:39:51.28ID:Gmvay1qu0
真偽値はbooleanだろ
2021/06/26(土) 01:47:12.49ID:TsbOcfQ80
>>414
但しここはC#スレ
bool値はtrue/falseを取る
2021/06/26(土) 17:38:38.83ID:nbDJ23iI0
>>413
だからフォーマットを決めとかないとコンバート時にオレオレ変換されるってはなしだろ
2021/06/26(土) 18:00:46.03ID:Dfaqq5JIM
>>413
せめて
> ファイルフォーマットや電文
の話であることぐらいは理解しようよ
2021/06/26(土) 19:57:39.60ID:6B9mEdr7M
ValueObjectって構造体とクラスどっちがいい?
デフォルトコンストラクタを禁止できないからクラスにしてるけど
パフォーマンスを考えると構造体にしたい
2021/06/26(土) 22:10:38.87ID:jLzVoQEP0
>>419
ValueObjectは一般的にはDBやバックエンドAPIが裏にあり、オブジェクトの生成や破棄のコストはDB操作やWebリクエストに比べれば完全に無視できる
そのため制約が多くORM等のツールとの相性も悪い構造体をあえて採用する理由はないから、議論の余地なくクラスを採用すべき
DBが裏にないんだったらそもそもレールを外れているのでもはや一般論で議論しても仕方なくて、ユースケース等を考慮して君の頭で判断したらいい
2021/06/27(日) 00:14:41.41ID:WofWhilS0
visual studioでデザイナーからマウスポチポチして部品を設置するのと
コードを書いて部品を表示するのはどっちがいいのでしょうか?
2021/06/27(日) 00:33:47.16ID:O5EL/pxwM
しらんがな
好きにしろよ
2021/06/27(日) 05:47:23.56ID:fv02sAlld
>>421
両方やればいいじゃん。
中身を理解できるからコードを書けばいいし、
判んなくなったらマウスで配置しちゃえばいいのさ。
2021/06/27(日) 11:05:00.99ID:Vxb3PSG20
>>421
マウスで1ドット2ドット移動調整すんのめんどくさくなって今はコード
TextBoxを10ドット長くしたらその右のTextBoxも10ドットマウスで動かすなんてやってられんわ
2021/06/27(日) 11:11:04.19ID:KmuHayn70
カーソルキー使わんのか
2021/06/27(日) 14:45:41.50ID:nWiM91TM0
>>424
デザイナ使った方が圧倒的に楽なんですがそれは
2021/06/27(日) 15:07:56.63ID:Zt61L+c30
質問させてください。
ある特定のライブラリを使わなくてはいけなくて、そのメソッドは引数にrefが付いているものになります。
このメソッドに渡したいのは不変の値(constの意味)となります。

不変の値自体は別クラスに用意してあって、各所で使いまわしたいので読み取り専用のプロパティかstatic read onlyで定義したのですがrefが付いた関数に渡そうとするとstaticなものは渡せない、型が適していないとエラーとなります。

public constのような記述はすべきでないと見たことがあるので避けたいと思うのですが、初期化以降で変更を受け付けず、かつ各所で使えるようにして、参照渡しのメソッドも使えるようにするにはどのような方法が考えられますでしょうか?

分かりにくい説明で申し訳ありません。
2021/06/27(日) 15:16:39.25ID:WunkWTgP0
どうもこうもないのでそのメソッドを呼び出すときにいったんローカル変数に移す
2021/06/27(日) 15:18:17.29ID:VoyuuGop0
そのメソッド、アホが作ったんでなければ何かの条件で値を書き換える可能性あるんじゃね?
ローカルに移す
2021/06/27(日) 15:23:05.27ID:7o91bmAZM
refパラメータはこいつを書き換えるぞという合図なので読み取り専用の変数を渡したらだめ
バグの原因になる
2021/06/27(日) 15:41:17.93ID:fv02sAlld
なんでrefなのか確認しておいた方が良くない?
2021/06/27(日) 16:42:23.92ID:Zt61L+c30
>>427です
ありがとうございます。
そうか、1度ローカル変数に入れれば良いのですね…思いつかなかった。

具体的には制御装置と通信、データ操作する為のライブラリです。
自分は装置データの参照(○○という制御データの値を取得)しか利用するつもりは無かったのですが、よくよく考えれば、プログラム上で値を保持し続けて、そのデータを更新したりする場合には値を書き換えるのでrefでも良いのかもしれません。
もう一度マニュアルを読み直してみます。
2021/06/27(日) 17:03:53.98ID:bJFlr767a
なぜC#にはメソッドの const 修飾が無いのか
2021/06/27(日) 17:07:52.92ID:Zt61L+c30
>>432
自分で書きましたが違いますね…
○○ってデータを取ってこいという○○の部分は文字列としてメソッドに渡す仕様になっているのでデータそのものは変えていません。
やっぱり特別な意味があるのかもしれません(ないかもしれません)ので改めて確認してみます。
何度も書き込んですいませんでした。
2021/06/27(日) 18:33:32.39ID:t/dm3/tna
普通は意図をもって引数にrefを付けてるはずでしょうw
もちろんメソッドを書いた人が何か勘違いしてる可能性もないことはないが、普通は考えにくいよね。

いずれにせよ、refの引数を取るメソッドに対して

(1) 定数やリテラルを渡したい
(2) refによる「戻り値」は必要ない

こういうケースは普通にありえる。
2021/06/27(日) 18:51:22.05ID:POf4PuR+M
>>435
どういうケース?
2021/06/27(日) 19:15:22.32ID:mGOIcE7NM
TryParseで真偽値だけで要件満たす場合とか普通にあらあな
そもそもこの話は
* 無理なんでラッパメソッドでも噛ましてください
* そんなに気になるなら作者に質問してください。ここは作者の気持ちを予想するスレッドじゃないんでね(文系板に行くといいと思うよ)
で終わってる
438デフォルトの名無しさん (アウアウウー Sad3-kMi9)
垢版 |
2021/06/27(日) 19:25:36.70ID:t/dm3/tna
>>436
あんまり意味がある質問と思えんけど例えば

// EnqueueとDequeueを同時にやる
bool TryEnDeQueue<T>(ref T inOUt> {...}

こんなメソッドがあったとして、キューにリテラルを
突っ込みたいケースは普通にありえるし、
キューから取り出した値は必ずしも使わない(キューの要素数を変えたくないだけ)
というケースもありえるだろう。
2021/06/27(日) 19:26:31.24ID:rwzQBskAM
TryParseって基本TryParse(xxx, out yyy)だろ?
定数渡すのはxxxだし、そもそもrefなんて使ってなくね?
2021/06/27(日) 19:30:25.90ID:rwzQBskAM
>>438
> // EnqueueとDequeueを同時にやる
そんなメソッドが普通にあるって?w
2021/06/28(月) 07:27:53.64ID:3BMv071BM
値渡しではなく参照渡しであることを明記するキーワードのつもりで「ref」を書いてるとかじゃないかな
そういうクソみたいなコードのライブラリを平気で売ってる会社も世の中にはごまんとあるぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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