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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0fe3-wadS)
垢版 |
2022/02/09(水) 23:13:39.45ID:1A90hyai0
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part153
https://mevius.5ch.net/test/read.cgi/tech/1639403601/
■関連スレ
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
■コードを貼る場合は↓を使いましょう。
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/
https://source.dot.net/
・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
2022/06/05(日) 09:30:46.65ID:IWrg53lV0
unsafe+ポインタは画像処理とかで出てくるよね?
2022/06/05(日) 09:35:03.79ID:ei4PW9H/0
refやSpan<T>で代用可能な場面が多いし、本当に速い処理が必要なら
OpenCVみたいにゴリゴリに最適化された既存のライブラリ使った方が速い事が多い
2022/06/05(日) 09:36:58.23ID:rpWZtyANM
unsafeどころかIntPtrやそれ相当なしに
ちょっと凝ったことなんかC#でできないから
理解してないと少し踏み込むだけでお手上げになるのでは。
2022/06/05(日) 09:42:55.86ID:ei4PW9H/0
知識として知っていた方がいい事もあるけど、
全てのC#開発者が知らないといけないかというと、そうでもないと思う
言語間連携とかやるなら避けて通れない道ではある
2022/06/05(日) 10:23:44.12ID:BAL8np4KM
ポインターは指し示すもの 差し棒
レーザーポインターみたいなもの

これはこのアドレス(何番地)にありますってもの
変数のなかにアドレスが入ってるもの
2022/06/05(日) 10:32:19.18ID:j0FdwMO6r
画像処理アプリ作成したときにunsafeにしたが爆速だった
735デフォルトの名無しさん (ワッチョイ ca8e-jate)
垢版 |
2022/06/05(日) 13:49:11.29ID:bsSB7mS70
>>722
こいつはCとC#の区別が付いていない馬鹿なだけだろ
736デフォルトの名無しさん (アウアウウー Sa11-fRoS)
垢版 |
2022/06/05(日) 15:38:33.40ID:udiiYXiVa
C#のポインタって何?
2022/06/05(日) 15:41:22.08ID:N8cBIXBg0
このゴミみたいな話題でこのスレは終わるんだろうな
738デフォルトの名無しさん (ワッチョイ 5dd2-IeUu)
垢版 |
2022/06/05(日) 16:05:22.22ID:/ywqNijR0
C#のポインタは素直じゃないのでポインタの勉強には向いてない

ポインタ周りで事故ったりする経験も含めてC言語でいい
2022/06/06(月) 12:43:29.55ID:F/GQ8N8BM
CといえばC#の案件って、お前C言語やC++と勘違いしてない?ってコードとの遭遇率が異様に高い。
foreach1つvar一つ出てこない命名はハンガリアン記法みたいな。
名前のせいなのかねぇ。それとも似てると言われるjavaの現場なんかもこんなんなんだろうか
740デフォルトの名無しさん (スップ Sdca-IeUu)
垢版 |
2022/06/06(月) 12:47:51.62ID:jOQJjNZVd
インスタンスフィールド一切ないくせにインスタンスメソッドしか定義してなくてデバイスID入力させるライブラリ許さねえ
2022/06/06(月) 15:21:53.95ID:bWqT7oJw0
>>739
それもあるかもしれないけど、単に知らないだけだったりして…
C言語のコーディング規約には慣れているけどC#は知らないとか
単に基礎部分は理解しているだけ
2022/06/06(月) 15:23:44.21ID:QfSxG+pEM
動けばいいじゃん!!🤕
2022/06/06(月) 15:47:12.16ID:/ne+DZHD0
>>739
> foreach1つvar一つ出てこない
CはともかくC++なら範囲forやautoあるからC++みたいに見えるなら単におまえの知識も古いだけだろ
2022/06/06(月) 16:00:08.35ID:cipJ9vV50
>>743
激同
745デフォルトの名無しさん (ワッチョイ 06bb-TkOU)
垢版 |
2022/06/06(月) 16:33:06.48ID:eXgeySvh0
すまんが、ASP.NET Coreでのアクセス規制って結構面倒だけどさ
https://docs.microsoft.com/ja-jp/aspnet/core/security/authorization/secure-data?view=aspnetcore-6.0#prerequisites
こう言うのを楽にしてくれるパッケージとかあったりするの?
2022/06/06(月) 16:39:33.06ID:TPFU7WdrM
>>743
いや流石にその知識はある
というかC++の案件でせめてC++11使おうよ……って嘆くことが多い
C++なのにCと大差ないの書く人も大量にいるよね
そのイメージだった
2022/06/06(月) 18:54:55.63ID:B27onV450
そのC++の案件
本当にC++必要ですか
2022/06/06(月) 18:59:34.17ID:mMg2UOejM
>>739
マイグレーション多いんじゃない?
俺もわざわざforをforeachに直そうなんて欠片も思わんかった
後でチェックしにくいし
できるだけ機械的にやりたいってのもある
みんな忙しいのに得意気にvarで書き直してバグってたら末代までの恥晒しじゃん
2022/06/06(月) 19:56:30.70ID:mf1Viruo0
varでバグるって笑うとこなのか
2022/06/06(月) 20:14:34.75ID:FV+nTjsw0
>>748
その程度のミスが語り継がれる訳ないだろw
末代までの恥晒しって言いたいだけだね
2022/06/06(月) 20:43:42.68ID:gJyU9HxyM
本当にASP.NET Coreって使ってる人いるの?
書籍もないし誰の話題にも乗らない
752デフォルトの名無しさん (ワッチョイ 06bb-TkOU)
垢版 |
2022/06/06(月) 21:19:38.41ID:eXgeySvh0
俺はWebセキュリティーに詳しくなく、JavaScript等を使うと危ないから安全のためと思って使ってるよ
まあほとんど誰も使ってないんじゃないの
2022/06/06(月) 21:52:00.61ID:/PnBW7u30
foreach使わないのはforで回す方が高速だからじゃ無い?
754デフォルトの名無しさん (ワッチョイ 06bb-TkOU)
垢版 |
2022/06/06(月) 22:10:33.09ID:eXgeySvh0
俺はWebセキュリティーに詳しくなく、JavaScript等を使うと危ないから安全のためと思って使ってるよ
まあほとんど誰も使ってないんじゃないの
2022/06/06(月) 22:17:06.79ID:3tT8lH5n0
>>753
インデックス使ってなんかやってるだけでforeach使えないじゃん
2022/06/06(月) 22:40:29.49ID:/UC41CYL0
配列だとforeachでも速度低下しなかったはず
2022/06/07(火) 00:20:26.95ID:hhG790Vp0
forは滅多に使わなくなった
2022/06/07(火) 00:49:45.91ID:EPRi468s0
MSのフレームワークとかって企業用途が多いから外部に出づらいんだよね
MSのサポートがあってプロダクトとして活きてくるというか

そういう意味じゃ今元気なスタートアップとかの中小が活躍するWeb業界じゃなかなかナレッジが広がらなさそう
2022/06/07(火) 01:21:10.29ID:U4x2nL8Ud
エンタープライズの開発って、フレームワークの使い方なんかよりももっと上位の業務ドメインの比重が大きいんだよ
そういうのは企業秘密に関わるし一般化できないから外へ出にくい
一方Web系はCRUDに毛が生えた程度の案件が多く、システム全体のうちでフレームワークに依存する部分の占める割合が大きいんだよ
だからノウハウを共有しやすい
2022/06/07(火) 01:23:44.77ID:SMQGWjUr0
>>757
あ、これインデックス1からだわ
ってたったこんだけで用済みなのって
あまりにも産廃過ぎひん?
2022/06/07(火) 09:17:02.99ID:U4x2nL8Ud
>>760
foreach (var x in items.Skip(1))
2022/06/07(火) 09:59:05.19ID:ZPcKxQgK0
foreachにする為だけにLinq呼ぶのはなんか抵抗あるなw
2022/06/07(火) 10:03:36.02ID:ZPcKxQgK0
更に付け加えるなら、IEnumerable<T>は遅延評価になるから遅いループになる
ToArrayで配列にするにしても無駄なコピーが発生するから、単純なループなら素直にforにするべき
2022/06/07(火) 10:35:57.15ID:pQgxRr7zM
C#8以降はこれでいい
foreach (var x in items.AsSpan(1..))
2022/06/07(火) 10:36:39.27ID:pQgxRr7zM
訂正
foreach (var x in items.AsSpan()[1..])
2022/06/07(火) 10:44:56.78ID:iosmncb5M
こっちは速そうだな
2022/06/07(火) 10:48:00.72ID:yqbruVp1d
>>749
まぁ、varで受けたらobjectにしかならんものもあるし。コンパイルで引っかかるけど
varで書き直そうと思って、うっかり違うとこもいじっちゃって、あら不思議。とかはあるんじゃない?
2022/06/07(火) 11:16:38.99ID:RK8S/U4V0
>>767
> うっかり違うとこもいじっちゃって
それvarに限らなくね?
2022/06/07(火) 11:27:48.16ID:zTntcUJQ0
ぶっちゃけIEnumerableが一番読みやすいしありがたい
2022/06/07(火) 11:41:51.84ID:yqbruVp1d
>>768
そのとおりなんだよねー。
2022/06/07(火) 11:55:08.94ID:zTntcUJQ0
てか普段はvarで書いてそういうとこは型指定するのが普通なんじゃね
明示的にしたことが目立つから
2022/06/07(火) 14:40:19.45ID:yqbruVp1d
>>771
そのとおりなんだけど、この話は>>748,749からの流れなんで
2022/06/07(火) 19:57:35.71ID:kjhW/oeqa
for文撲滅運動
2022/06/07(火) 20:06:59.71ID:SMQGWjUr0
foreachは産廃
775デフォルトの名無しさん (アウアウウー Sa11-+J4x)
垢版 |
2022/06/08(水) 09:09:01.61ID:FUigqvdta
double v=0;

var v=0;
に書き換えたせいで起こるバグもあるやな
2022/06/08(水) 09:47:47.82ID:GLLou9kDM
バグというよりバカだな
777デフォルトの名無しさん (ワッチョイ 892f-M86+)
垢版 |
2022/06/08(水) 11:44:36.71ID:ZQZr+Xos0
バカというよりハゲだな
                 
      / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \
   /                  ヽ 
    l:::::::::.                  | 
    |::::::::::   (●)     (●)   | 
   |:::::::::::::::::   \___/     |  
    ヽ:::::::::::::::::::.  \/     ノ
2022/06/08(水) 20:16:22.14ID:Xvcj7lUH0
>>775
書き換えたヤツの頭がバグってる
779デフォルトの名無しさん (ブーイモ MM39-M86+)
垢版 |
2022/06/08(水) 23:01:27.19ID:56U7/LFHM
>>778
書き換えたヤツの頭がハゲってる
2022/06/08(水) 23:06:47.81ID:/x/Xh4ts0
そもそもdoubleで0を宣言するなら0.0って書く気がする
2022/06/08(水) 23:15:39.55ID:uQlYSi5S0
int以外はサフィックス付けようぜ
2022/06/09(木) 00:07:43.87ID:p3mwwWov0
ええ、、
2022/06/09(木) 08:40:50.75ID:U/w6RtvD0
今どきゴリゴリハンガリアンのシステム開発に放り込まれてげんなりしてるので本当に勘弁してほしい
これだから古い会社は
2022/06/09(木) 08:49:43.24ID:X4XShH8jM
文句言えるほどC#できるんなら自社サービス系行けるよ
さっさと辞めればいい
それができないんなら自分もその程度ということだぞ
2022/06/09(木) 10:14:15.96ID:hRm2c4AU0
男を試されているんだ
786デフォルトの名無しさん (ワッチョイ ca01-3OWO)
垢版 |
2022/06/09(木) 11:18:36.64ID:0rPu7H1G0
>>780
同意
そう言えば 0.0 って書いたらfloatとdoubleのどっちになるんだろう?
ってやってみたらdoubleになったわ
2022/06/09(木) 11:57:57.22ID:U/w6RtvD0
転職出来るほどの自信は無くてもバッドプラクティスをバッドプラクティスだと言うくらいは出来るだろう
ロジックがおかしい
2022/06/09(木) 12:07:27.28ID:NcaDVjc60
おかしいのはロジックじゃなくて奴隷根性やな
2022/06/09(木) 12:25:46.20ID:WngWFAzGM
この業界は経験者だと転職それほど難しくないんだから、ヤバそうな所はさっさと去るべし
2022/06/09(木) 12:32:25.90ID:ChvQ3ay1M
間違ったやり方だと思いながら仕事してたらいつまでも自信ないままだぞ?
だって間違った仕事しかしてないことになるんだからな
幸いC#はWeb系行けば結構モダンな開発してる職場が多いし、BtoBが中心だから比較的待遇も悪くないし、SI系出身者に対しても比較的寛容な傾向がある
簡単確実なソリューションは目の前にある
2022/06/09(木) 12:36:10.51ID:E+FpX8ek0
今C#やってるなら転職に困るようなことないと思うけど、入ったら入ったでハンガリアンの悪夢再びの可能性もあるから怖い
792デフォルトの名無しさん (ワッチョイ a968-pvNj)
垢版 |
2022/06/09(木) 16:10:53.28ID:d7vTvGkG0
クラス名を以下のような関数に渡したい時に
void printName(string name) {}

呼び出し側で
printName(this.ToString());

と記載していますが、毎回書くのが煩わしいです。
どこからの呼び出しでも同じ記述なので、簡略化する方法はないですか。

Cのマクロ定義ではこんな風にできると思いますがこれに近いことをcsでしたいです。
#define PRINT_NAME() printName(this.ToString())
793デフォルトの名無しさん (ブーイモ MMde-VXTa)
垢版 |
2022/06/09(木) 16:57:37.54ID:0PQwkTJMM
printName側でコールタック辿って呼出元のクラス名を得る
2022/06/09(木) 18:04:00.59ID:i3H8tE1La
>>775
アフォw
2022/06/09(木) 18:05:23.96ID:i3H8tE1La
>>783
lpctszFileName
796デフォルトの名無しさん (スップ Sdca-IeUu)
垢版 |
2022/06/09(木) 18:33:17.82ID:+6++R2Gnd
>>792
C#のお作法でstring ToString();はoverrideすることになってる

void printName(object obj) {...=obj.ToString();}
呼び出し側で printName(this); してしまって大丈夫。

...なのだがクラス名が欲しいなら
void printName(object obj) {...=obj.GetType().Name;}
か?
2022/06/09(木) 18:56:27.19ID:F1Dv7yR50
>>792
そもそも何故そのような事をするのか。
呼び出し元のログを取りたいとかなら、StackFrame使うとかもっとマシな方法あるけど。
2022/06/09(木) 19:10:03.40ID:F1Dv7yR50
あと目的がログだったとして、独自に作るよりはNLogのように既存の物使った方がよい
2022/06/10(金) 21:15:14.55ID:EJTDzpB30
みんなの意見参考になったわ
とりあえず今週末ちょっとASP.NET勉強してみるよ。ウェブのこと全然わかんねぇ
800792 (オイコラミネオ MM65-pvNj)
垢版 |
2022/06/10(金) 21:51:32.52ID:kBv7ipkNM
目的は単純にコンストラクタが呼ばれたらコンソールにクラス名を含む文字を出したいただそれだけですね
Stack使う系の方法は確証得られないのでNGです
2022/06/10(金) 22:31:06.30ID:Z8p6aUw30
https://docs.microsoft.com/ja-jp/dotnet/api/system.runtime.compilerservices.callerfilepathattribute?view=net-6.0

クラス名って出ないんだな
802デフォルトの名無しさん (ワッチョイ 06bb-TkOU)
垢版 |
2022/06/10(金) 22:32:30.65ID:b5VhUFkH0
高卒丸出しだな
2022/06/10(金) 22:43:55.09ID:wzfIM+ki0
>>800
C# 呼び出し元 クラス名
でググればたくさん見つかるけどそれじゃダメなの?
なんで試さずStackFrameはNGとか難癖付けてるの?
2022/06/10(金) 22:48:37.99ID:NBA9eaH+0
Callerなんとか系のやつは実行ファイルに埋め込まれるからあまりお勧めしないが
StackFrame使いたくないならまあ好きにして
2022/06/10(金) 23:03:40.70ID:xtBsFBLEM
StackFrameは最適化で正確な内容にならないことがあるよ
2022/06/10(金) 23:26:30.41ID:NBA9eaH+0
行番号は無理だが、メソッド名までは出る筈だけどな
2022/06/10(金) 23:29:11.73ID:NBA9eaH+0
あとはStackFrame使う所で
[MethodImpl(MethodImplOptions.NoInlining)]
でインライン展開無効にしとけば大丈夫だと思う
2022/06/11(土) 01:29:16.83ID:N9Pa64KKd
>>807
printNameの呼び出しがインライン展開されることはそれで防げるけど、目的はprintNameの呼び出し元のクラスを知ることなんだからそれでは不十分
printNameを呼び出しているメソッド全てにその属性を付けて回る必要がある
2022/06/11(土) 01:38:10.37ID:sQOLScrN0
C#+WindowsAPIで別アプリのDataGridView上の
特定セルの値の取得&ダブルクリック とかできますか?

他のソフトを操作するプログラムを作ろうと考えています。
810デフォルトの名無しさん (スップ Sd1f-UGZ9)
垢版 |
2022/06/11(土) 02:54:25.51ID:wqB8iMgfd
>>809
できます
はい、次
2022/06/11(土) 09:32:14.02ID:Wl1U42VL0
>>809
WinAppDriver経由で出来そうな気がする
2022/06/11(土) 09:35:43.27ID:XBKZ0P9R0
VS2022で右上のソリューションエクスプローラーのForm1.csをクリックしても
デザイナにFormが表示されないことが多々あるですが,対処法あります?
再起動すれば表示されるようになるのですが
2022/06/11(土) 10:03:21.18ID:bkgrPiRo0
配列の読み書きを少しでも速くしようとポインタ使用して実際に速くなったけど
そうなると配列のインデックス指定する書き方が存在する意味ってあるんかなあと思った
2022/06/11(土) 10:14:35.97ID:nSw5Wtt+M
用途次第かと

ポインターは相対指定に便利
配列インデックスは絶対位置指定で便利
2022/06/11(土) 10:32:59.56ID:zZQkghbK0
>>808
NGワード引っ掛かったのでURL貼れないけど、
JIT 最適化にも負けずに呼び出し元のメソッドを取得する方法って記事に
そんな感じの事が書いてあったな
DynamicSecurityMethodAttribute なんてのがあったのは勉強になった
ただ、実運用のデバッグでそこまで困るかと言われたら多分困らないとは思うが
(NLogの実装もNoInliningまでしかしてないし)
2022/06/11(土) 10:52:17.31ID:yOzdOwl+0
さっぱりわからん。
2022/06/11(土) 11:02:57.06ID:sQOLScrN0
>>810
とあるソフトの自動操縦プログラムを作ろうとしていますが
難航しています。

ランサーズではまっている部分を
プロジェクトとして有料でも良いので出すので
コメント入りで作ってくれませんか?
2022/06/11(土) 11:04:42.47ID:sQOLScrN0
>>811
そんなのがあるんですね。初めてしりました。


はまっている部分を自分でやると時間がかかりそうなので
ランサーズで出そうかと思います。

以前だしたのですが、出来るといって受けた人が
スキル不足で結局出来なくて諦めていました、、、
2022/06/11(土) 11:22:23.16ID:nSw5Wtt+M
>>818
スレチだな

ついでに…
2004年(15年ぐらい前)にやってたけどめんどくさいからやりたくない
その時は会社のアプリの自動化とIEでの自動ログインとMarketSpeedの操作
(自分のアプリをクリックするとチャートが表示されたりする)

そのDataGritViewと言うのがハンドル取れる奴ならいいけどWPFとかなら画像認識しないと取れない
2022/06/11(土) 11:24:06.54ID:nSw5Wtt+M
15年じゃないかw
2年後にライブドアショックで全部吹っ飛んだ
2022/06/11(土) 11:24:43.29ID:zZQkghbK0
操作送るだけならSendInputでいけるけど、特定セルってのが問題な気がする
他アプリのセルの位置までは判らないと思う
2022/06/11(土) 11:28:30.85ID:PiSm3yuNM
禁断のDLL参照&Form継承という選択肢も
2022/06/11(土) 11:30:10.56ID:nSw5Wtt+M
ランサーズていくらで仕事すんのか知らんけど
一日3~5万x1週間ぐらいで15~25万ぐらいならやってもいいかな
2022/06/11(土) 11:33:31.96ID:nSw5Wtt+M
MarketSpeedは画面がコントロールじゃない部分(独自描画)が多くて
クリック位置もハードコーディングで対応した

画面レイアウトが変わったらそこで終わり
そんなものに金を払いたいとは思えない
2022/06/11(土) 11:36:18.46ID:nSw5Wtt+M
表示されてる画像が絶対変わらないなら画像認識でクリック位置は特定できる
今ならc#でなくてpythonがおすすめかな
2022/06/11(土) 11:41:58.88ID:JZDk2JEH0
DataGridViewってセル一つ一つにHWNDあるようなWin32ネイティブではないよね?
ListViewラップしてるだけなら別アプリから操作するのもまあまあ簡単だが
違うならゲームのチートプログラム作るような手順でフックしていかないといけないから難易度はそこそこ高い
2022/06/11(土) 11:43:41.48ID:nSw5Wtt+M
そこそこじゃなくてかなりめんどくさい部類
そんなもんを20万ぐらいでやってもらえるなら頼んだ方がいい

アメリカにいた頃は大体倍ぐらいかかってる
日本は安い
2022/06/11(土) 11:47:13.06ID:zZQkghbK0
ListViewとかのOS標準コントロールと訳が違うからな
ぶっちゃけ安定性担保するの難しいから金貰ってもやりたくない
2022/06/11(土) 11:50:18.15ID:JZDk2JEH0
俺がやるとしたら別アプリではなくDllInjectionで新しいスレッド作成して新Windowなりコンソールなりオーバーレイなりで入力装置を設ける
dnSpy等でDataGridViewの必要な関数を調べてフックなり呼び出しをする
こういうDLLをC++で作る
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。