C#, C♯, C#相談室 Part97

■ このスレッドは過去ログ倉庫に格納されています
2022/12/21(水) 10:18:38.02ID:DxBIri9+0
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512

■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。

C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
90デフォルトの名無しさん (ワッチョイ b101-tb1I)
垢版 |
2023/01/10(火) 19:16:36.48ID:0yW4rCRf0
C言語の重力付き4目並べです、ここのコードを簡略化したいです。

int SetXpos(int player) // コマの置き場所を入力または探して盤を更新,コマの置き場所(0-6)を返す
{
int xpos = 0; // コマの置き場所
if ((choice == 2 && player == 2) || (choice == 3 && player == 1)) // コンピュータとの対戦の場合に,コンピュータの手を計算
{
xpos = ComputeXpos(player);
printf("%sの番です\n", player == 1 ? "●" : "〇");
printf("コンピュータは%dに置きます\n", xpos);
}
else // 人間の手を選択
{
while (1)
{
printf("%sの番です\n", player == 1 ? "●" : "〇");
printf("どこに置きますか? 0-6の数字を半角で入力してください: ");
scanf_s("%d", &xpos);
if ((0 <= xpos && xpos < XMAX) && (num[xpos] < YMAX)) // 置ける場所かどうか判定
break;
printf("%dには置けません!\n", xpos);
}
}
board[xpos][num[xpos]++] = player;// コマをxpos列に置き,xpos列のコマ数を1増やす
return xpos;
}
2023/01/10(火) 19:28:44.72ID:uTLnAVho0
頑張ってください
2023/01/10(火) 19:32:45.96ID:IC+XgAqf0
そもそもC#のスレだからすれ違いだがw

printf("%sの番です\n", player == 1 ? "●" : "〇");
をifの前にするとか(それぞれにあるから冗長)
プレイヤーの処理もPlayerXpos()とかに出すとかすれば良いのでは?
93デフォルトの名無しさん (ワッチョイ b101-tb1I)
垢版 |
2023/01/13(金) 06:38:18.48ID:CqT5d+dn0
ありがとうございます
94デフォルトの名無しさん (ワッチョイ ca01-FIs7)
垢版 |
2023/01/15(日) 19:05:41.63ID:CnKOeOE30
Shift-JISの文字列をutr-8に簡単に変換する方法ってありますか?
やはり一度Stream(バイナリ)に変換する必要があるのでしょうか
2023/01/15(日) 19:23:52.26ID:gGAdUt3l0
>>94
streamじゃなくてbyte[]じゃないの
Encoding.GetString(Encoding.GetBytes(string))ってことだよね
何のためにそんなことするか知らんけど
96デフォルトの名無しさん (ワッチョイ ca01-FIs7)
垢版 |
2023/01/15(日) 19:25:34.21ID:CnKOeOE30
>>95
つまりstringの状態でencodingは可能なのですか?
97デフォルトの名無しさん (ワッチョイ ca01-FIs7)
垢版 |
2023/01/15(日) 19:28:04.22ID:CnKOeOE30
C#でRestAPIを投げてブラウザ側から貰ってくる文字列はShift-JISらしい
それでC#はutr-8で表記されるため変換(Encoding)が必要になるのです
2023/01/15(日) 19:51:16.92ID:wUGuc0E00
stringはunicodeだぞ?
2023/01/15(日) 22:26:45.28ID:pBiKKGenM
unicodeは符号化方式など規格とそのコード群の名前
2023/01/15(日) 22:56:10.93ID:AxXMsEIz0
そのREST APIをどうやって呼び出してるのか知らんけど
真っ当なサーバならContent-Typeにcharset設定してて
一般的なライブラリなら文字列として読み取るときにcharset参照して適切に文字列型に変換してくれる
から特にプログラマが考えることはない
これらの前提が崩れてるなら文字列として読み取るんじゃなくてバイト配列として読み取って
System.Text.Encodingクラスを使ってバイト配列をstringに変換する必要がある
この場合変換先の符号化形式を考える必要はなくてShift_JISをstringに変換することだけ考えればいい

もしライブラリの都合でstringとして受け取ることしかできなくて
かつその時点で文字化けが出るようなら
それはもうどうしようもないので使うライブラリを変える必要がある
2023/01/15(日) 23:38:57.01ID:r5uLxMWea
sjis/CP932 とか、何十年前の話w

sjisのサイトも、5ch だけだろw
2023/01/16(月) 00:18:41.42ID:sUZCnaKRM
古の生き残りのサイトもsjis

chromeが文字コード判定ミスしてても今は手動で文字コードは変えられない
103デフォルトの名無しさん (ワッチョイ ca01-FIs7)
垢版 |
2023/01/16(月) 01:06:54.26ID:Iz2auSAp0
>>100
なるほど
助かります!
2023/01/17(火) 01:05:55.75ID:BTJjkb3Ra
手動で文字コードを変更できる、Chrome の拡張機能は無いの?
2023/01/17(火) 18:23:06.75ID:EvOewZJzd
ブックマークレットのレベルで出来そう
知らんけど
106デフォルトの名無しさん (アウアウウー Sa91-5Koo)
垢版 |
2023/01/17(火) 19:13:35.87ID:reGY8TLTa
charsetのタグいれればええんかね
2023/01/17(火) 19:17:51.92ID:3iw8L5pXa
x-sjisとかの指定もあったからな
2023/01/18(水) 12:59:30.83ID:KNmhbmwea
>>104
たくさんあるが
2023/01/18(水) 20:59:57.78ID:5annSIeD0
たくさんあるのかよ
一個でいいやろ
2023/01/18(水) 21:51:34.28ID:oIAAyMph0
win32APiのChangeDisplaySettingsExをC#から呼び出して、
モニタのポジションを変更してるんだけど、
変更直後にScreenのBoundsから値をとっても値が変化しない・・・
アプリ再起動するとちゃんと変わってる。
ディスプレイの設定ってレジストリに保存してるから、もしかして
アプリ再起動しないとScreenクラスのBounds反映されない?
アプリ再起動せずになんとかする方法ないですかね?
2023/01/18(水) 22:07:32.78ID:jVn9UUXQ0
自分でバンズ計算すりゃいいじゃない
知らんけど
2023/01/18(水) 22:14:35.47ID:/+rmiMsB0
Screenオブジェクトフィールドに保存してたりする?
毎回Screen.AllScreensとか.PrimaryScreenとかから取得すればどう?
ところでSystemEvents.DisplaySettingsChangedイベントは発生してる?
2023/01/19(木) 07:38:17.94ID:K9HYHkiWM
2つのクラスを1つのクラスに合体させて使いたいんだけど、どうやるのがスマートですか?
多重継承ができたら良かったんですが…
2023/01/19(木) 09:03:14.21ID:Hct/UdRpp
合体?
またなんで、改悪臭しかしないわ
2023/01/19(木) 09:25:09.63ID:LXNiK0p/0
そういうのは大体気の迷いだから、落ち着いて全体から考え直せば
2023/01/19(木) 09:44:42.78ID:Hct/UdRpp
むしろ機能単位で分解するのが健全な方向なのに
違う機能を似たものだから合体とかわりと誤った方向に行く人かな?
2023/01/19(木) 09:56:12.01ID:zVWBDbvx0
ライオンクラスと山羊クラスと蛇クラスを一つにしたいんです
2023/01/19(木) 10:01:07.14ID:yp2D21uT0
>>117
つトレイト
119デフォルトの名無しさん (ブーイモ MM2e-laSj)
垢版 |
2023/01/19(木) 10:51:30.57ID:Iv2veF3WM
>>113
コンパイル時に型チェックしたいなら既存の型をインターフェースで定義し直して呼び出し側も修正
でもこういう変更が必要な状況はほとんどないのでコンポジションで移譲するケースなんじゃないかな

>>117
トレイトでもインターフェースでも同じだよ
2023/01/19(木) 11:01:05.91ID:yp2D21uT0
>>114
BindableBaseと他のクラスを両方継承したい場面はいくつかあるな
ソースコードジェネレータは中々いい
2023/01/19(木) 11:01:57.47ID:yp2D21uT0
>>119
トレイトはフィールドを持てるから同じではないけど言いたいことはわかる
122デフォルトの名無しさん (ワッチョイ 06bb-JXbu)
垢版 |
2023/01/19(木) 11:31:03.31ID:kysdIh6r0
質問内容はクラスをまとめたいってことなので、ずれちゃう話にはなるけどさあ
(フレームワーク等を使う場面を除いて)初心者中級者のうちにクラスを継承をしようと思ったら設計段階でおかしいので、正解はどうするべきなのかを聞いた方がいいんじゃないのかな
2023/01/19(木) 12:04:02.54ID:WELAMOcMp
クラスインスタンスを取り込めばいいのに
なんで継承にこだわる?
2023/01/19(木) 12:21:58.33ID:tEHmCOQcM
やりたいことは
いくつかのプロパティを持つデータを格納するだけのクラスAがある
クラスAにバインド用のプロパティをいくつか追加したクラスBを作って、それのリストをDataViewにバインドしたい

AとBのすべてのプロパティを書いたクラスCを作ればできるけど、なんとかして少ないコードで実現したいです
2023/01/19(木) 12:45:40.56ID:H7hm+dDpa
Aをバインドできるよう書き直せばいいんじゃね
2023/01/19(木) 12:52:06.93ID:8nS1/G/Mr
>クラスAにバインド用のプロパティをいくつか追加したクラスB
>AとBのすべてのプロパティを書いたクラスC
なんかおかしくない?
2023/01/19(木) 16:09:46.95ID:h7ydINbB0
Aを継承してバインド用のプロパティを追加したBを作って
List<B>を持つCを作ってそのList<B>をバインドすればいいんじゃないの
2023/01/19(木) 17:30:22.46ID:tEHmCOQcM
>>127
それで出来るんですが、バインド用のプロパティが沢山あったときに毎回書くのが面倒で、どうにかして効率化できないか考えてます
2023/01/19(木) 18:00:00.70ID:pNQOSNx5M
ここですら見かけない超クソ黒魔法もあるけど全くお勧めしない

普通にコンポジションで書くのが正解じゃないかな
アンマネージドなものをラップするのと変わらない
手書きでも自作コードジェネレータでもどうぞ
2023/01/19(木) 18:06:50.46ID:pNQOSNx5M
黒魔術な…
2023/01/19(木) 19:44:59.20ID:cZ+iShes0
やりたい事は理解できる
構造体を合体させるにあたりフィールドで保持すれば良いというのはその通りなんだがアクセス手段が冗長になるのは嫌っていうワガママな気分によくなる
C++のように素直に構造体継承や多重継承認めてくれって思う事は頻繁にある
2023/01/19(木) 21:19:14.97ID:z427r+xYp
プロパティにしてバケツリレーw
2023/01/19(木) 22:05:29.65ID:wlAvkW/br
>>128
バインド用のプロパティってクラスAのもつフィールドを参照するの?
2023/01/20(金) 01:42:18.00ID:Jpp0Ng/yM
>>133
しない前提です。

データソースクラスにバインド用のプロパティも含めれば実現できるけど、クラス設計として微妙なんだよな
2023/01/20(金) 12:05:04.93ID:rWqtsOF60
>>134
>>125が正解な気がするが、
そもそもバインド用のプロパティってどういうものを想定してるんだ?
よくあるINotifyPropertyChanged自動実装したいとかそんな話か?
2023/01/20(金) 20:51:09.38ID:jJGC4T1tr
つまるところ、M(クラスA)とVM(クラスB)を煩雑にならないように扱いたいって話かね
この辺は詳しくないけどいろいろプラクティスがあるんじゃない?
2023/01/21(土) 11:56:14.92ID:cGrVppR7M
C#だとあまり楽な方法はない
2023/01/21(土) 12:36:53.78ID:rZUyyxKK0
そんなアホなことしたがるやつがそもそもいないからな
することが多ければすぐに楽な構文が作られるのがC#
2023/01/21(土) 16:52:35.79ID:H5hcEaoi0
C#は基本的に
・static寄せ集めユーティリティのクラス
・必要な画面フォームのクラス
・メインプログラムのクラス
この3つ以外要らないのだよ
意識高い系が説くMやらVに振り回されてはいけないのだよ
変な抽象化は問題をややこしくするだけだと学ぼう
2023/01/21(土) 18:17:20.63ID:rZUyyxKK0
スタティックおじさんきたな
2023/01/21(土) 22:54:03.42ID:XQUa+q2yM
>>135
そうですね
INotifyPropertyChangedとかINotifyDataErrorInfoを実装しておきたい感じです
2023/01/22(日) 10:06:15.27ID:rqWd8pMR0
探せば大抵のものはあるのに、自分で作る意味とは?
アートとか、そういう方面しか残ってないような感じがするのですが(´・ω・`)
2023/01/22(日) 11:19:49.43ID:cs1e2wyOa
帳面で効率が悪けりゃソフト使えばいいし効率の良いソフトがみつからなけりゃ作るより他にないだろ
2023/01/22(日) 11:27:13.17ID:cs1e2wyOa
>>141
ただのViewModelじゃねーか
フレームワーク使え
145デフォルトの名無しさん (ワッチョイ 5301-bbWX)
垢版 |
2023/01/22(日) 12:53:40.50ID:8KSe/b5e0
最近MVVMのほうが楽じゃね?って思ってきた
楽しいし
146デフォルトの名無しさん (ワッチョイ 5301-bbWX)
垢版 |
2023/01/22(日) 12:54:24.84ID:8KSe/b5e0
これもすべてソースジェネレーターのおかげかもしれん
さすがC#
2023/01/22(日) 17:03:04.26ID:jvNfJ0Pqd
>>139
うちがWindowsの業務クライアントアプリ系を委託してるソフトハウスがまさにこんな感じだわ
イベントハンドラからSQL投げてる
ただしstaticユーティリティクラスではなく共通の神フォームクラスがあって、全てのフォームがそれを継承する形
まあレベル低すぎて開発もクソ遅いから、負債自体はそれほど量が多くないのは救いかな
2023/01/22(日) 18:32:18.54ID:xRK/d49A0
>共通の神フォームクラスがあって、全てのフォームがそれを継承する形
こういうのよくないな
神クラスのメンテナが異動だかで居なくなだけで誰も保守できない砂上の楼閣アンチパターンに嵌るね
2023/01/22(日) 21:31:04.53ID:ADzURpxfM
>>139
実質Cプログラムだな
2023/01/23(月) 02:49:47.88ID:0XgI/UQT0
>>149
前に作ったC#のプログラムがまさにそんな感じで、
その後MVVMしてみた。
そして最近作ったCのプログラムが構造体でオブジェクト指向プログラミングしてる。
2023/01/23(月) 08:17:46.60ID:3Vu8SA8M0
>>148
その言い方だと基底クラスと派生クラスに分かれているもの全部が当てはまるように聞こえてしまうが
2023/01/23(月) 08:19:09.55ID:YKh4Yexo0
>>151
神クラスを知らんのか
2023/01/23(月) 08:29:28.69ID:3Vu8SA8M0
規模じゃなくてメンテナの有無を問題にしていたからだよ
2023/01/23(月) 08:46:40.58ID:YKh4Yexo0
規模が小さければメンテナが交代しても負担は少ない
2023/01/23(月) 09:08:08.58ID:qV3QzySmp
ライブラリなんて当時のセット使うに決まってるじゃん
2023/01/23(月) 09:26:39.82ID:t2EpFVl6a
顧客のOSがバージョンアップするのにいつまでも使えるわけねーだろ
2023/01/23(月) 09:29:38.64ID:KYv3x0sqM
>>156
使えなくなる理由が分からない

ブラウザの話?
2023/01/23(月) 09:34:41.96ID:t2EpFVl6a
わからないは草
2023/01/23(月) 10:09:44.77ID:2/794eE6p
>>156
そんなんちゃんと契約書にOSのバージョン指定しとかない会社が悪い
OSバージョンアップされたら何起こるか分からないんだから
最悪作り直しだってあるし、そんなん瑕疵理由にされたらたまらないだろ
2023/01/23(月) 10:10:26.60ID:YKh4Yexo0
指定したバージョンで使えなけりゃ作り直すしかねーだろ
2023/01/23(月) 20:40:31.82ID:N1CH+niL0
>>152
神クラス悪くないよな
すべてのグローバル変数がちゃんと集結してるなら
リークはここさえ調べればいいし
2023/01/23(月) 21:22:23.16ID:3Vu8SA8M0
本当にヤバい神クラスというのは担当者が1人じゃなく複数人でメンテしていて、
しかも誰一人として全貌を把握していないという。。。
2023/01/24(火) 07:57:54.50ID:qtsatPEhr
まあ1人で保守できてて数が把握できるレベルならな。。
164デフォルトの名無しさん (ワッチョイ d31d-QR4B)
垢版 |
2023/01/24(火) 10:27:18.73ID:yL08sSgL0
ディスプレイ設定の
マルチディスプレイの
複製表示するだとか拡張表示するだとかの設定を
プログラムで取得できますか?
2023/01/24(火) 16:12:45.07ID:88+gyU910
そりゃ出来るだろ。
取得するAPIが用意されているかどうかは知らんけど。
2023/01/24(火) 16:25:23.27ID:WrVsgKSa0
>>164
WMIでググって見ると良いかも。
2023/01/24(火) 17:43:09.31ID:hrk0Jab5M
>>164
.Netのフレームワーク抜きにして

基本的にwindowsの情報はwin32 apiかwinRtかで取得できる
楽かどうかは不明だけど両方ともC#ではアクセスできる

それ以外にレジストリの情報だけと言う場合もあるけど
2023/01/24(火) 18:08:58.39ID:hrk0Jab5M
思い出というかうろ覚えレベルだけど

昔はwinformsの方でAPIがあって複数画面の情報は取れた
WPFにはAPIが用意されてなかったのでwinformsを参照して情報を取ってた
169デフォルトの名無しさん (ワッチョイ d31d-DmZS)
垢版 |
2023/01/25(水) 10:31:48.06ID:1QUndYzE0
>>166
WMIの存在知っていて、Monitor〇〇は見てみたんですけど、モニタごとの
情報は取得できるけどマルチディスプレイの設定は見当たらないんですよね。

>>167
win32apiも見たんですが、やはりモニタごとの設定は取得できるんですが、
マルチディスプレイの設定みたいなのが見当たらなかったです。
2023/01/25(水) 11:29:49.38ID:YgKVEuEk0
>>169
答えはわからなかったが、これを見る限りレジストリに保存していそう
https://answers.microsoft.com/ja-jp/windows/forum/all/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%A2%E3%83%8B/ab090d66-dade-4723-a019-019c75a9258f
2023/01/25(水) 11:37:43.88ID:HF2K9cvb0
>>169
上の人が書いているけど、レジストリっぽいですね。

DisplaySwitch.exeによる切り替えは結構ヒットするんだけど、情報取得はみつけられなかった。

WindowsAPIだと、

SetDisplayConfig
QueryDisplayConfig

あたりがそれっぽいのかも?
詳しい人の回答を期待w
172デフォルトの名無しさん (ワッチョイ 0301-N1F8)
垢版 |
2023/01/25(水) 12:37:42.36ID:SKrgZEWi0
マルチディスプレイの設定って具体的に何よ
最終的に何の項目の値が欲しいのよ
コンパネや設定アプリのこの項目ですとかそういうの書きなさいよ
2023/01/25(水) 13:43:55.80ID:g3U6xxzNd
マルチディスプレイの項目の
表示画面を拡張するや、表示画面を複製するが何になってるか取得したいって最初に書いたんだけどな…
2023/01/25(水) 14:06:15.04ID:VgR3j9B70
C言語から入った人間なのでexeファイル=機械語と思いこんでたけど違うんですね……
中間言語?CLR?いやC#もexeファイル作成されるじゃんどういうこっちゃと思ってました
えーっとC#のexeファイルは中間言語で出来てるって理解であってます?つまりexeだけど.net入ってないPCじゃ実行できないってことですよね?
175デフォルトの名無しさん (エムゾネ FF1f-N1F8)
垢版 |
2023/01/25(水) 14:08:37.83ID:6qMSPLxFF
ならその画面出してキャプチャして画像解析でもすりゃええやん
176デフォルトの名無しさん (ワッチョイ 638e-RQPf)
垢版 |
2023/01/25(水) 16:47:40.06ID:lfyXBnaV0
>>174
C言語から入ったからじゃない
お前が無知なだけ
2023/01/25(水) 17:31:10.31ID:VgR3j9B70
>>174ですが解決しました。失礼しました。
2023/01/25(水) 19:26:40.13ID:FCKUBvCH0
>>176
建設的でなく情報を提供することもない価値のない書き込みをありがとう
でもそういうのやめにしないか?
2023/01/25(水) 19:28:12.41ID:BZf8jlam0
C言語関係ないので間違ってはないな
2023/01/26(木) 02:21:06.17ID:ZFMbSjAA0
むしろcから入ったほうが、ほかのいわゆる高級言語から入るより詳しくなりそうな気がするんだがな
2023/01/26(木) 05:08:09.80ID:v0vT4MdvM
C言語プログラムではexeファイル作成しても実行環境のランタイム周りでエラー吐くと即実行時エラーで停止するからな
2023/01/26(木) 15:37:19.08ID:O3LYxWam0
プログラミン好きじゃないけど、稼ぐ手段と考えたら上達しないんですかね?
ていうか、うまく出来もしないのに好きでいることなんて出来るでしょうか
成果が出て好きになるのでは?
2023/01/26(木) 15:40:51.40ID:r9XE4FBU0
好きとか 嫌いとか最初に言い出したのは誰なのかしら
2023/01/26(木) 16:46:19.96ID:O3LYxWam0
分からん
好きなことで生きていくみたいな

他人と比べて明らかに下手でも好きでいられるのだろうか
2023/01/26(木) 18:41:23.01ID:SJYXMXJT0
>>182
スレ違いどころか板違い
低能すぎるからハロワ行け
2023/01/26(木) 19:37:48.38ID:GkI+YKE10
スレチ警察ご苦労
187デフォルトの名無しさん (ワッチョイ 0301-N1F8)
垢版 |
2023/01/27(金) 01:10:49.54ID:unSIwQ1w0
駆け抜けてゆく 私のメモリ外♪
188デフォルトの名無しさん (ワッチョイ 6301-jGE9)
垢版 |
2023/01/27(金) 18:21:50.28ID:01PH/qCE0
ここで聞いていいのかわからんけど
WinUI3
Windows App SDK
MAUI
こいつら並行して存在してるみたいだけど関係性ってどうなってんの?
UWPはディスコンになったって理解でいいの?
189デフォルトの名無しさん (ワッチョイ 0301-N1F8)
垢版 |
2023/01/27(金) 21:43:33.88ID:unSIwQ1w0
多分Microsoftも分かってない
2023/01/27(金) 21:49:53.26ID:P0p3cJ8l0
本当はMSも新しいものにシフトしたいけどWin32は捨てられないし
レガシー無視ならWindowsである必要が無くなるからなぁ
なんやかんやでwebの技術でアプリは作れる時代だし
XAMLなんかはそろそろ辞めた方が良い気がするんだよなぁw
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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