ふらっと 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
242デフォルトの名無しさん (エムゾネ FF32-kEnG)
垢版 |
2021/09/24(金) 14:32:17.00ID:6iUyOY+3F
スレチ警察ωωω
2021/09/24(金) 18:05:14.38ID:5BpUyVVQ0
>>235>>240
派遣が書いたやつだろうな
2021/09/24(金) 18:11:46.80ID:O5E8wnHVd
>>243
悔しいね
2021/09/24(金) 18:57:42.89ID:w2u8w+pK0
>>243
糞ダサい
2021/09/24(金) 19:48:31.43ID:aNx0zmzyp
>>243
ばーwww
247デフォルトの名無しさん (エアペラ SD9b-OE0s)
垢版 |
2021/09/24(金) 20:03:25.45ID:KNT3aGoVD
ageておきますね
2021/09/24(金) 21:23:21.37ID:eAv8Xp0Q0
>>243
コーディング規約ですよw
249デフォルトの名無しさん (ワッチョイ 032f-f7S3)
垢版 |
2021/09/24(金) 21:38:44.12ID:RcC3+NL00
hageておきますね
        ______ 
      /     〇⊂⊃\
    /             \
   /                 ヽ
    l:::::::::               | 
    |::::::::::   (●)    (●)  o| 
   |:::::::::::::::::   \___/    .0|
    ヽ:::::::::::::::::::.  \/      ノ
2021/09/24(金) 21:59:31.97ID:Dq17+3pv0
hage.Dispose();
2021/09/24(金) 23:49:51.90ID:LxZpM9VS0
平日なのにわずか10分で否定されるのキツい
2021/09/25(土) 08:04:24.52ID:FSKWmZuJ0
配列関連をお勉強しとるんですが、
Array, Buffer, BitConverter, Collections.Genericのクラス
これらの他に見ておくべきクラスはありますか?
2021/09/25(土) 08:16:02.18ID:1B2aC0zA0
Dictionary
2021/09/25(土) 08:46:03.41ID:HriS4h5O0
List
2021/09/25(土) 10:24:06.98ID:BHEQVKdgM
>>253-254
それ
> Collections.Genericのクラス
だろ
2021/09/25(土) 11:36:42.78ID:+gmyYm6Y0
しいて言えばCollections.Generic全部だけど
何にでも使うものだからここだけお勉強しとけっての無さげ
2021/09/25(土) 12:46:07.75ID:utiZsGgVa
>>252
配列まわりだとSpan、Memoryあたりかな
コレクションまわりと拡大解釈するともう少し増えるが
2021/09/25(土) 13:14:02.37ID:HriS4h5O0
>>255
そうでしたっけオホホ
2021/09/25(土) 14:38:27.74ID:Ims+woa0M
SpanやMemoryは一通りモノ作れるようになるまではスルーでいいというか知らないほうがいい
厨二病のはじまり
2021/09/25(土) 16:31:09.85ID:YVyIn4WH0
SpanやMemory多発だと言語選択間違えてないか疑ったほいがいいな。
261デフォルトの名無しさん (ワッチョイ 9f24-2Lmd)
垢版 |
2021/09/25(土) 17:06:12.97ID:fbhVUQBc0
>>252
もう配列なんて時代遅れ
xmmレジスタで済ませるのが最先端だからSystem.Runtime.Intrinsicsを学ばないとオレにはついてこれないぞ
2021/09/25(土) 17:15:16.58ID:9oRN3Q4ya
先生、
>>261
がゴールと逆方向に独走してます!
2021/09/25(土) 17:23:02.02ID:IUkEhwfn0
そのまま行かせてあげましょう
2021/09/26(日) 15:18:24.34ID:ql2ts5nl0
Buffer, BitConverterってあまり使ったことないや
どういうときに使われるんだろ
画像とか扱いたい時?
2021/09/26(日) 15:29:09.22ID:beZMLKyb0
>>264
通信電文の解析とか
電文は通常ビッグエンディアンって決まりがあるので
2021/09/26(日) 21:02:40.12ID:gGZfowJe0
エンディアン変換めんどいよなぁ

たかだか2バイトのビックエンディアンをc#のshortに変換するだけでも
var dataLen = IPAddress.NetworkToHostOrder( BitConverter.ToInt16( buf, 32 ) );
で長すぎるんだよな。2バイトくらいだったら
var dataLen = buf[0] << 8 | buf[1];でもいいが、int幅なると記述量増えるし。

byte配列走査しているときはSpanを当てていることが多いから、Span<T>ももうちょっと使い勝手向上させて
int intLen = span.Slice(0,4).ToHostOrder();
みたいに書かせて欲しい
2021/09/26(日) 21:13:30.42ID:VX6MVIFY0
よくわからんけど拡張メソッドじゃあかんのか?
2021/09/26(日) 22:30:57.79ID:sbicFUHC0
拡張メソッドで対応可能だね
2021/09/26(日) 23:31:30.83ID:gGZfowJe0
い・いや、そうなんだけどね・・
車輪の再発明というか、作ると色々考慮が必要でとか、そもそもめんどいというか。
2021/09/27(月) 00:04:24.04ID:XMGm2liDa
まあライブラリで実装するほど汎用的というか需要がある処理じゃないって判断なんでしょうね。
つーか大昔からある宗教論争だけど個人的にはビッグエンディアンなんて
どっかのタイミングで追放してしまえばよかったのにw
つくづくこんなの考えた奴馬鹿だろとしかw

ところで、BitConverterってバイトオーダーは環境依存なのかリトルエンディアン固定なのかどっちなんだろう
2021/09/27(月) 00:19:20.50ID:OBbpWDI00
https://referencesource.microsoft.com/#mscorlib/system/bitconverter.cs,34

リトルエンディアン固定っぽいね
固定な癖にビッグエンディアンの実装してあるの謎だけど
2021/09/27(月) 01:04:33.98ID:lw6R4pVu0
BitConverterはちらっとソース見たらどっちのつもりだよこれって実装だったな
2021/09/27(月) 01:27:56.67ID:43Uiwmvz0
>>271のソースはビッグエンディアンのアーキテクチャの時は
BIGENDIANを定義してコンパイルして使うんでしょ
2021/09/27(月) 03:03:03.22ID:a10dBt+Nd
c#って機能的にはc++のメソッドを全部呼ぶことって出来ますか?

win32apiを弄っていて、当然ドキュメントは99%がc++なんだけど
dllimportとかを使えば全部の機能はc#からも使うことは出来ると思って良いのでしょうか?
それとも、言語仕様の壁があるから使えない機能も普通にあるのでしょうか
2021/09/27(月) 07:14:24.44ID:9HRv6vMlM
C++で作成したクラスのインスタンスメソッドが呼び出せなかったはず
DllImportで呼び出せるのはあくまでstatic相当メソッドのみ
2021/09/27(月) 07:49:13.10ID:VW3MkNv6M
環境決め打ちすれば無理矢理呼び出せなくなもないって感じ
https://qiita.com/tan-y/items/64711b244cf294d6bb9d
まあとてもおすすめできない
2021/09/27(月) 10:15:30.40ID:I8r9zhJi0
>>274>>275
アドレスさえ取得出来ればメンバ関数含めて全て呼べる
DllImportやGetProcAddresからはポインタ取得出来ないからそれを呼べると言えるかは微妙だが
メンバ関数は第一引数にインスタンスへのポインタが隠されてるだけの実態はただの静的関数だからdelegate* unmanaged[Stdcall]<void*, void>とかにキャストしてvoid*にオブジェクトポインタ渡せば正常に機能する
逆に言えば公開したいメンバ関数があるなら、第一引数にvoid*を沿えた静的関数にしてdllexportすればいい
2021/09/27(月) 17:06:27.12ID:yLuq9hY6a
double aaa = double.NaN;
bool bbb = (aaa == double.NaN) ? true : false; //bbb = false になる。えええ
bool ccc = (double.IsNaN(aaa)) ? true : false; //ccc = true になる
どうしてこうなるの?
2021/09/27(月) 17:16:06.27ID:xIAqABZoM
NaNは「数値ではない」ので、いかなる値と比較してもfalseになる
これはIEEEの規格で定められている
ゼロで割ったらいけないのと同じようなもんで、NaNの比較は原則やってはいけない
2021/09/27(月) 17:18:52.56ID:3tPBuYxM0
値がセットされてない状態が必要ならdouble?型使え
2021/09/27(月) 17:25:07.40ID:yLuq9hY6a
なるほど。厳しすぎるよ
(double.NaN == double.NaN)も成立しないのな
2021/09/27(月) 19:28:23.66ID:3UqjaTSrM
>>276>>277みたいなやり方もあったのか・・・
でもごめん276のQiitaを軽く読んだ限りだとちょっと怖くて&面倒くさくて使いたくない
どうしてもC++のインスタンスをいじらなきゃいけなくなったとしたら
従来通り無難にC++/CLIでラッパーを書くと思う
もう10年くらいそんなコード実装してないから書ける自信ないけど

おおもとの>>274への回答としては、一応条件付きでyes、ってことで合ってるよね?
C++で書かれたインスタンスのメソッドを呼ぶときには基本的には別途C++/CLIプロジェクトでソースを書き足す必要がある
その手間さえ許容できればC#で全部呼べる・・・はず
2021/09/27(月) 23:39:00.12ID:hzZ0wOco0
C#9の関数ポインタを利用したりMarshal.GetDelegateForFunctionPointerを利用したらどんなネイティブ関数も呼べるが(どちらも呼び出し規約設定可能)、
問題はそのDLL内の公開されてないメンバ関数ポインタをどう渡すか?に関してはC++同士でも独自に決めないといけない訳でC#どうこうの話ではなくないか?
2021/09/28(火) 20:06:35.50ID:HRlAR5zx0
こういうジェネリックの使い方ってありなん? 初めて見た

class Hoge<T>{
  Hoge2<T> hoge
}
class Hoge2<T>{
  Hoge3<T> hoge
}
class Hoge3<T>{
  T hoge
}
2021/09/28(火) 20:17:22.58ID:Y48RNilL0
特に意外なところもないと思うが…どこに引っかかったのか
2021/09/28(火) 20:26:34.83ID:v2L5F78s0
>>280
NaNを理解できない子にnullableとか鬼やな
2021/09/29(水) 16:52:08.52ID:7tgr6pt10
>>284
ダメなの?

class 人<T身長の単位>{
プロフィール<T身長の単位>
}

class プロフィール<T身長の単位>{
身長<T身長の単位>
}

class 身長<T単位>{
T単位 Value
}
2021/09/29(水) 20:09:33.13ID:b5nvBjNnM
たかが身長持つのにどんだけ長いの?
2021/09/30(木) 00:22:50.32ID:3U3ppoE90
身長は凡例だろうけど
身長ならdouble[m]で持っておいて
別の単位使いたかったらプロパティで良いじゃんって思った
2021/09/30(木) 00:41:35.99ID:dHFEc3IP0
>>288
サンプルにそんないちゃもんつけるなよ
2021/09/30(木) 02:07:44.30ID:046jA/pO0
>>287
階層深いといろいろ扱いにくくない?

サンプルに対してどうこういうのも不毛だけど、人を継承して学生やら料理人やら作ったとして学生はセンチで軍人はメートルで保持して、
さらにその身長を参照して数パターンの大きさの制服からちょうどいいものを選びましょうみたいになったらどんどんジェネリクスの範囲が広がる気がするというか、
そういう広がったものに直面してなんだこれ……ってなった

自分が直面してる問題については抽象化というかクラス設計失敗してるのが根本的な原因ぽいのだが
それをジェネリクスで覆い隠してたんだけどちょっと拡張しようとしたらコードがうんこと化した
2021/09/30(木) 06:46:26.61ID:ZF6SlbvnM
>>291
> サンプルに対してどうこういうのも不毛だけど
と言いながらどうのこうの言いまくってるとか頭おかしいのか?
2021/09/30(木) 07:29:22.71ID:9XdXBqfhM
初歩的な質問ですいません
PostgreSQLとNpgSQLを使用しています
仮にアプリケーションAとBがあるとして、Aからデータベースのテーブルが更新されたらBはテーブルの値が変わったという事を認識する事は可能でしょうか?

どのように実装するか全然分からないので参考例を探したのですが見つけられず、どのようなキーワードで検索すれば良いでしょうか

私はデータベースの知識も乏しいのですが、これはC#側で実装するのか、それともPostgreSQLの関数?で実装するものなのでしょうか?
2021/09/30(木) 07:34:17.27ID:/bi23GCfM
>>293
プロセス間通信を実装するか
お互いに一定時間毎にデータベースを確認しに行くかのどっちか?
2021/09/30(木) 07:43:36.18ID:PmOqVjFIM
相互だったらトリガーは使えないねぇ
レプリカを改造するとか

リアルタイム性が不要ならなんとでも
なるでしょう
2021/09/30(木) 08:47:25.00ID:KRgUV+h4a
>>293
notify listen
2021/09/30(木) 09:03:11.28ID:pU/yhshw0
>>293
簡易的なものならpostgresのNOTIFYとLISTENを使えばいいと思う

本格的なアプリケーションなら
Aがドメインイベントを生成してイベントストリームに流して
Bは該当のイベントストリームをサブスクライブして処理する
実装方法は色々あるのでイベントストリームやイベントソーシングで検索して
2021/09/30(木) 12:43:04.47ID:9XdXBqfhM
レスありがとうございます
一定時間毎にテーブルにアクセスしかないのかなと思いましたがNotify、Listenというものがあるのですので
まだ調べられていないのですが、レスの内容を見るにPostgreSQL側で設定などを行い、それをC#側に伝える?ということでしょうか
2021/09/30(木) 15:27:49.81ID:pU/yhshw0
>>298
BのアプリケーションでLISTENコマンドを実行
Aのアプリケーションでテーブル更新時にNOTIFYコマンドを実行(もしくはトリガーでNOTIFYコマンドを実行)
https://www.npgsql.org/doc/wait.html

Bは通知を受信するためのセッションを張って待っておく必要がある
2021/09/30(木) 16:57:34.68ID:d4OzmTGQa
ColorMatrixによる画像処理ですが、
ColorMatrix同士の演算を簡単にやる方法はないでしょうか?
行列なので単純に行列を展開して自分で計算して新しい行列Cを作ればいいのですが、それを簡単にやる方法は用意されてないのでしょうか?

c = ColorMatrixAA * ColorMatrixBB; //←これをしたい

例えば輝度とコントラストの調整をひとつの行列による一回の処理で行いたいのが目的です
https://dobon.net/vb/dotnet/graphics/brightness.html
https://dobon.net/vb/dotnet/graphics/contrast.html
2021/09/30(木) 20:47:43.57ID://goNiVi0
ColorMatrix自体には演算子とか定義されてないので
・自分で拡張メソッド作る(演算子じゃなくてメソッド呼び出しだけど)
・数学用のライブラリ使って5x5行列作って計算後にColorMatrixに変換する
2021/09/30(木) 20:54:04.25ID:PYXlGee40
その手の話は普通、OpenCvsharpでやっちゃうし
2021/09/30(木) 21:53:05.99ID:KOQxmqnZa
やっぱり自分で計算するしかないですか
アホっぽいけど二つの行列で二回処理することにします・・・
2021/10/01(金) 21:55:19.63ID:U8MKU26ia
ImageAttributesは既定では単位行列のColorMatrixを持っていて
SetColorMatricesを呼ぶたびにそれとの積が行われるのではないか...
などと妄想して確認してみたが全然違ったw

複数回呼んだ場合は単純に最後に指定したColorMatrixが使われるだけ

ところで、ImageAttributesもColorMatrixもPetzoldの本には出てないんだね
.NET 1.1からという何とも中途半端な
2021/10/03(日) 02:28:34.63ID:Z0tb8i1p0
ファイルハンドルのお勉強に入った者です

Flush()とFlush(true)の違いってなんですかね?
MSDNの説明を見てもぼんやりとしか理解できてないんですわ。

OSがディスク書き込みを完了したかどうかを手軽に確認する方法ってあるんですかね?
2021/10/03(日) 05:04:05.02ID:36j27UhR0
>>305
Flush(true)は.NETのIOバッファをクリアした後、
Win32API の FlushFileBuffers() を呼び出す
2021/10/03(日) 06:08:02.83ID:VkicH7XjM
>>305
> OSがディスク書き込みを完了したかどうかを手軽に確認する方法ってあるんですかね?
ない
確実にやりたいなら専用のデバイスドライバ作ってやるしかない
OracleとかOSに頼らずにそう言うことをしてるものもある
2021/10/03(日) 08:16:38.62ID:uOSRriMT0
フィルタードライバじゃなくて?
2021/10/03(日) 11:59:00.54ID:C0Y98Dh4a
極論(でもないと思うけど)を言えばそもそもストレージ自体も
中でファームウェアが走ってるブラックボックスなので
電源が落ちても大丈夫という意味で書込みが完了したかどうかを知るのは
実は無理じゃないかという気もする
2021/10/03(日) 13:16:58.88ID:PZL9KPgcM
ストレージに依ってはライトスルーモードやキャッシュのバックアップ機能を持ってたりするよ
2021/10/04(月) 12:24:33.68ID:t5znYM1E0
C#でsvgファイルをPictureBoxに簡単に表示するにはどうすればいいですか?
デスクトップアプリ、WinForms、.NET Framework 4.7.2です
2021/10/04(月) 12:29:19.88ID:f7XWhib4M
skiasharpで画像化
2021/10/05(火) 14:08:06.36ID:zLIO0dk60
Cで言うプログラミング言語C、C++で言うプログラミング言語C++のような、
C#に於けるバイブルのような本はありますか?
2021/10/05(火) 14:24:04.77ID:ZBwOALw00
あります
2021/10/05(火) 14:38:06.71ID:9I5LwmYA0
たぶんあると思う
2021/10/05(火) 14:51:51.03ID:ByhXNLf3M
あるんじゃないかな?
2021/10/05(火) 15:25:13.51ID:+6dr6m14a
まちょと覚悟はしておけ
2021/10/05(火) 15:49:40.04ID:fKvZeqN00
>>313
C#はWeb情報が充実してるから本など不要
プログラミング言語全般に言える事だがC#は特にな
2021/10/05(火) 15:58:59.03ID:drC9SLLFa
cやc++と比べてc#は簡単だからな
javascriptもそうだけど素人でもすぐ使える言語は体系的に勉強する必要ないからバイブルも生まれない
2021/10/05(火) 17:06:47.13ID:knAaMuHc0
C++でバイブルってゆわれれてるやつのC#版かえばいいんじゃあ
2021/10/05(火) 17:18:03.86ID:0DXUgl8X0
>>320
ストラウストラップがC#本も書いてるの?
2021/10/05(火) 17:24:46.00ID:x+J38TE90
>>313
くじゃくとへび
2021/10/05(火) 19:11:51.38ID:XzAOFOmy0
>>319
素人が個人ソフト作る程度なら確かにその通りだが(その規模だとC++ですら同様だと思うが)
結局JavaやC#みたいなガチガチのオブジェクト指向言語はチーム開発するための言語だからちゃんと体系的に学んでもらわないと周りが困るわ
324デフォルトの名無しさん (ワッチョイ b3e6-SE+q)
垢版 |
2021/10/05(火) 19:26:34.70ID:ZTvxcm/T0
データベース接続はDIする必要ないですか?
接続文字列変えるだけでデバッグできるから

エンジンまで変えるのは丸ごと作り直しみたいなもんですよね
2021/10/05(火) 21:14:04.84ID:ghIUET7g0
>>313
あります
2021/10/05(火) 21:23:49.56ID:9I5LwmYA0
たぶんあると思う
2021/10/05(火) 21:23:58.36ID:AV+fS/qTa
>>323
人事とかPMに訴えた方がいいよ
まともなスキルある奴雇えとかコーディングルール決めろって
328デフォルトの名無しさん (アウアウウー Sa27-jOtc)
垢版 |
2021/10/05(火) 22:38:49.32ID:JbR3YU6Oa
人事が変なプライド持ってて
漏れの選んだ社員にケチつけるのか?みたいな反応する香具師いるよな
2021/10/05(火) 22:52:12.77ID:0DXUgl8X0
いないよ
2021/10/05(火) 23:20:10.65ID:B8av3SU70
いないよ
心が汚れてて、相手の事を悪くしか言えない人ならたくさんいるけど。
2021/10/06(水) 02:33:19.03ID:+8N1Gjb90
相手の事を悪くしか言えない人って、心が汚れてる人率より、外因で心が壊れた人率が高い気がする。
2021/10/06(水) 11:54:17.59ID:xpgZiC6t0
トンボ佐藤くんみたいなのは割といると思うんだよね
2021/10/06(水) 19:28:18.02ID:7g8s0ol20
>>319
C++欠点をよく考えた上でのC#なので扱いやすくできてるが
複雑な処理でも簡単に記述できてしまうから
分からないで使うと即ゴミコードになるな
2021/10/06(水) 20:06:14.47ID:hnIPmtr3D
>>319
言語仕様の簡単さでいえばCの方がはるかに簡単では
2021/10/07(木) 16:47:06.58ID:CwvFVgnXr
.NETやってる人って.NETerでいいの?
2021/10/07(木) 18:35:51.64ID:cYPPu0Aja
C#erかF#erでいいんじゃない?
VBNerはもうどこにも居なくなった
2021/10/07(木) 19:14:34.93ID:/wyuL6I60
未だにVB系さわってるのって、VB6を未だにメンテしてるか、ExcelやAccessとかのVBAさわってるかぐらいなんだろうなぁ感
2021/10/07(木) 20:44:32.98ID:BpOLUlLQM
残念!ジャップランドは未だにVB大国です!
2021/10/07(木) 20:53:21.13ID:ovEQBNKZ0
チョン君とこなんて未だにActiveX全盛なんだよな
2021/10/08(金) 00:31:05.70ID:4fmstXU10
>>337
vbはvbで普通に便利だぞ
c# 使いはvbに絡み過ぎ
2021/10/08(金) 00:41:25.26ID:cNGxtErT0
>>339
全盛というのが本当だとすると、そんな奴らに国民的アプリの覇権を奪われるわーくには一体・・・
2021/10/08(金) 08:17:06.25ID:JBSLfXe/a
VBNはだめだめだけどXMLリテラルだけは評価してる
これC#に輸入してJSXみたいなの作れたら面白そうじゃないか
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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