ふらっと 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 >>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 hageておきますね
______
/ 〇⊂⊃\
/ \
/ ヽ
l::::::::: |
|:::::::::: (●) (●) o|
|::::::::::::::::: \___/ .0|
ヽ:::::::::::::::::::. \/ ノ 配列関連をお勉強しとるんですが、
Array, Buffer, BitConverter, Collections.Genericのクラス
これらの他に見ておくべきクラスはありますか? >>253-254
それ
> Collections.Genericのクラス
だろ しいて言えばCollections.Generic全部だけど
何にでも使うものだからここだけお勉強しとけっての無さげ >>252
配列まわりだとSpan、Memoryあたりかな
コレクションまわりと拡大解釈するともう少し増えるが SpanやMemoryは一通りモノ作れるようになるまではスルーでいいというか知らないほうがいい
厨二病のはじまり SpanやMemory多発だと言語選択間違えてないか疑ったほいがいいな。 >>252
もう配列なんて時代遅れ
xmmレジスタで済ませるのが最先端だからSystem.Runtime.Intrinsicsを学ばないとオレにはついてこれないぞ 先生、
>>261
がゴールと逆方向に独走してます! Buffer, BitConverterってあまり使ったことないや
どういうときに使われるんだろ
画像とか扱いたい時? >>264
通信電文の解析とか
電文は通常ビッグエンディアンって決まりがあるので エンディアン変換めんどいよなぁ
たかだか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();
みたいに書かせて欲しい い・いや、そうなんだけどね・・
車輪の再発明というか、作ると色々考慮が必要でとか、そもそもめんどいというか。 まあライブラリで実装するほど汎用的というか需要がある処理じゃないって判断なんでしょうね。
つーか大昔からある宗教論争だけど個人的にはビッグエンディアンなんて
どっかのタイミングで追放してしまえばよかったのにw
つくづくこんなの考えた奴馬鹿だろとしかw
ところで、BitConverterってバイトオーダーは環境依存なのかリトルエンディアン固定なのかどっちなんだろう BitConverterはちらっとソース見たらどっちのつもりだよこれって実装だったな >>271のソースはビッグエンディアンのアーキテクチャの時は
BIGENDIANを定義してコンパイルして使うんでしょ c#って機能的にはc++のメソッドを全部呼ぶことって出来ますか?
win32apiを弄っていて、当然ドキュメントは99%がc++なんだけど
dllimportとかを使えば全部の機能はc#からも使うことは出来ると思って良いのでしょうか?
それとも、言語仕様の壁があるから使えない機能も普通にあるのでしょうか C++で作成したクラスのインスタンスメソッドが呼び出せなかったはず
DllImportで呼び出せるのはあくまでstatic相当メソッドのみ >>274>>275
アドレスさえ取得出来ればメンバ関数含めて全て呼べる
DllImportやGetProcAddresからはポインタ取得出来ないからそれを呼べると言えるかは微妙だが
メンバ関数は第一引数にインスタンスへのポインタが隠されてるだけの実態はただの静的関数だからdelegate* unmanaged[Stdcall]<void*, void>とかにキャストしてvoid*にオブジェクトポインタ渡せば正常に機能する
逆に言えば公開したいメンバ関数があるなら、第一引数にvoid*を沿えた静的関数にしてdllexportすればいい double aaa = double.NaN;
bool bbb = (aaa == double.NaN) ? true : false; //bbb = false になる。えええ
bool ccc = (double.IsNaN(aaa)) ? true : false; //ccc = true になる
どうしてこうなるの? NaNは「数値ではない」ので、いかなる値と比較してもfalseになる
これはIEEEの規格で定められている
ゼロで割ったらいけないのと同じようなもんで、NaNの比較は原則やってはいけない 値がセットされてない状態が必要ならdouble?型使え なるほど。厳しすぎるよ
(double.NaN == double.NaN)も成立しないのな >>276>>277みたいなやり方もあったのか・・・
でもごめん276のQiitaを軽く読んだ限りだとちょっと怖くて&面倒くさくて使いたくない
どうしてもC++のインスタンスをいじらなきゃいけなくなったとしたら
従来通り無難にC++/CLIでラッパーを書くと思う
もう10年くらいそんなコード実装してないから書ける自信ないけど
おおもとの>>274への回答としては、一応条件付きでyes、ってことで合ってるよね?
C++で書かれたインスタンスのメソッドを呼ぶときには基本的には別途C++/CLIプロジェクトでソースを書き足す必要がある
その手間さえ許容できればC#で全部呼べる・・・はず C#9の関数ポインタを利用したりMarshal.GetDelegateForFunctionPointerを利用したらどんなネイティブ関数も呼べるが(どちらも呼び出し規約設定可能)、
問題はそのDLL内の公開されてないメンバ関数ポインタをどう渡すか?に関してはC++同士でも独自に決めないといけない訳でC#どうこうの話ではなくないか? こういうジェネリックの使い方ってありなん? 初めて見た
class Hoge<T>{
Hoge2<T> hoge
}
class Hoge2<T>{
Hoge3<T> hoge
}
class Hoge3<T>{
T hoge
} 特に意外なところもないと思うが…どこに引っかかったのか >>280
NaNを理解できない子にnullableとか鬼やな >>284
ダメなの?
class 人<T身長の単位>{
プロフィール<T身長の単位>
}
class プロフィール<T身長の単位>{
身長<T身長の単位>
}
class 身長<T単位>{
T単位 Value
} 身長は凡例だろうけど
身長ならdouble[m]で持っておいて
別の単位使いたかったらプロパティで良いじゃんって思った >>287
階層深いといろいろ扱いにくくない?
サンプルに対してどうこういうのも不毛だけど、人を継承して学生やら料理人やら作ったとして学生はセンチで軍人はメートルで保持して、
さらにその身長を参照して数パターンの大きさの制服からちょうどいいものを選びましょうみたいになったらどんどんジェネリクスの範囲が広がる気がするというか、
そういう広がったものに直面してなんだこれ……ってなった
自分が直面してる問題については抽象化というかクラス設計失敗してるのが根本的な原因ぽいのだが
それをジェネリクスで覆い隠してたんだけどちょっと拡張しようとしたらコードがうんこと化した >>291
> サンプルに対してどうこういうのも不毛だけど
と言いながらどうのこうの言いまくってるとか頭おかしいのか? 初歩的な質問ですいません
PostgreSQLとNpgSQLを使用しています
仮にアプリケーションAとBがあるとして、Aからデータベースのテーブルが更新されたらBはテーブルの値が変わったという事を認識する事は可能でしょうか?
どのように実装するか全然分からないので参考例を探したのですが見つけられず、どのようなキーワードで検索すれば良いでしょうか
私はデータベースの知識も乏しいのですが、これはC#側で実装するのか、それともPostgreSQLの関数?で実装するものなのでしょうか? >>293
プロセス間通信を実装するか
お互いに一定時間毎にデータベースを確認しに行くかのどっちか? 相互だったらトリガーは使えないねぇ
レプリカを改造するとか
リアルタイム性が不要ならなんとでも
なるでしょう >>293
簡易的なものならpostgresのNOTIFYとLISTENを使えばいいと思う
本格的なアプリケーションなら
Aがドメインイベントを生成してイベントストリームに流して
Bは該当のイベントストリームをサブスクライブして処理する
実装方法は色々あるのでイベントストリームやイベントソーシングで検索して レスありがとうございます
一定時間毎にテーブルにアクセスしかないのかなと思いましたがNotify、Listenというものがあるのですので
まだ調べられていないのですが、レスの内容を見るにPostgreSQL側で設定などを行い、それをC#側に伝える?ということでしょうか >>298
BのアプリケーションでLISTENコマンドを実行
Aのアプリケーションでテーブル更新時にNOTIFYコマンドを実行(もしくはトリガーでNOTIFYコマンドを実行)
https://www.npgsql.org/doc/wait.html
Bは通知を受信するためのセッションを張って待っておく必要がある ColorMatrixによる画像処理ですが、
ColorMatrix同士の演算を簡単にやる方法はないでしょうか?
行列なので単純に行列を展開して自分で計算して新しい行列Cを作ればいいのですが、それを簡単にやる方法は用意されてないのでしょうか?
c = ColorMatrixAA * ColorMatrixBB; //←これをしたい
例えば輝度とコントラストの調整をひとつの行列による一回の処理で行いたいのが目的です
https://dobon.net/vb/dotnet/graphics/brightness.html
https://dobon.net/vb/dotnet/graphics/contrast.html ■ このスレッドは過去ログ倉庫に格納されています