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

レス数が1000を超えています。これ以上書き込みはできません。
2020/12/16(水) 11:29:35.35ID:TSvQ057dM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part148
https://mevius.5ch.net/test/read.cgi/tech/1590578921/
■関連スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■コードを貼る場合は↓を使いましょう。
http://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
http://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
2020/12/16(水) 11:49:28.32ID:nNBKgDIo0
関連スレ
ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/
2020/12/22(火) 11:28:16.22ID:ojlio7fm0
HttpClientって使いづらいんだけどなんでWebClientやWebRequestは非推奨でHttpClientが推奨なの?
2020/12/22(火) 13:06:20.64ID:T3f18Pq10
どう使いづらいの?
2020/12/22(火) 13:10:35.40ID:ojlio7fm0
>>4
エンコード指定出来ない点とか
別にそれでも問題にはならないけどだったらWebClientで良くない?ってなる
2020/12/22(火) 14:03:09.42ID:T3f18Pq10
>>5
え、できるでしょ
2020/12/22(火) 21:14:53.82ID:GHilppOn0
>>6
KWSK
2020/12/23(水) 09:31:05.35ID:zdm41kCZ0
まず、エンコードってもっと具体的に何のエンコードがはっきりしてくれんと
gzipやdeflat圧縮するcontent-encodingなのか、
chunked転送するcontent-transfer-encodingなのか、
はたまた、文字列送信したくて、その文字列のエンコードなのか..
まぁ、どのみちどれもできそうな気がするが
9デフォルトの名無しさん (ワッチョイ 5310-iuc3)
垢版 |
2020/12/28(月) 20:57:23.90ID:iJ3wi52z0
すみません 教えてください
CPUの使用率を知るために、

Windows.System.Diagnostics 空間の
SystemCpuUsage class が使えると思うのですが、

SyatemCpuUsage cpuUsage;
result = cpuUsage.GetReport();
とやると、 実行時に systemCpuUsage がnull でした
と怒られ、
SyatemCpuUsage cpuUsage = new SystemCpuUsage();
result = cpuUsage.GetReport();

とすると
SyatemCpuUsage cpuUsageには、引数0を指定するコンストラクターは含まれていません
と怒られます。

Cpuの使用時間を知りたいのですがどのようにすればよいのでしょうか?
2020/12/28(月) 21:59:41.52ID:mOtjlN620
SystemDiagnosticInfo.GetForCurrentSystemから
CPUの使用時間なら他にはSystem.Diagnostics.PerformanceCounter使うとか
2020/12/30(水) 08:34:44.60ID:QqXAyZyG0
CPU使用率取得 c#
でコードが出てきたがこれでは動かない?
12デフォルトの名無しさん (ワッチョイ aebb-AofU)
垢版 |
2021/01/03(日) 06:53:07.36ID:s7zZ6b100
var x = SomeClass.Create();
if( x?.BooleanProperty ){...}

の上手な書き方ってありますか?
↑はbool?とboolの違いで怒られます

if( x?.BooleanProperty == true ){...}

とかってスマートじゃない気がするんですが
2021/01/03(日) 08:16:15.77ID:TwYJ75OS0
>>12
nullのときってどう動くん?それ
2021/01/03(日) 08:44:58.15ID:/wUWHJa20
x.?prop ?? false
2021/01/03(日) 11:46:24.42ID:Cv28EBZ70
nullとfalse=NGの値が同じだから辛うじて動いてるだけの処理なのか

よくあるOK=0でそれ以外がエラーの処理でやっちゃうとおかしくなるから
そういうの書くのやめたほうがいーんじゃない?的な
2021/01/03(日) 12:25:34.51ID:9pfzLSF20
bool?の時は素直にtrueやfalseって書いた方が個人的に安心できる
まぁそんなことしなくて済むような構造にするのが一番だけど
2021/01/03(日) 12:58:09.11ID:Pz+0E5Uq0
>>12は条件が逆のとき
null==falseで入るときあんじゃん?
ウンコちっくじゃん?
2021/01/03(日) 14:43:03.50ID:dFTAfdRH0
初心者以前に国語力ない奴ばかりでワロタ
2021/01/03(日) 15:11:01.48ID:TwYJ75OS0
初心者は正しく誘導してやらないとな
間違いなくしなくていい省略をして
言語の機能に飛びついてウンコードを作ろうとしていたのを未然に防いだ

初心者スレはこうでなければ
2021/01/03(日) 15:44:01.57ID:FpoyKofE0
ifでリテラルや定数を右辺に書くのは素人
2021/01/03(日) 15:47:35.09ID:QdF5iATA0
仕様も確認せずにバグ作り込むアンポンタンしかおらんのかw
まず>>13への回答次第だろ
2021/01/03(日) 15:57:39.72ID:Xn7pfEjF0
>>20
いまだにそんなことを言う奴は恥ずかしい
2021/01/03(日) 16:40:24.21ID:ZZnWN1rj0
>>20
今はミスしてもちゃんと代入になっていると警告してるから気にしないね。
2021/01/03(日) 17:54:19.93ID:uWkBjJnT0
>>23
むしろ左辺に定数書いてる奴見ると殺しそうになる。
2021/01/03(日) 18:03:00.86ID:ZZnWN1rj0
>>24
俺はぶん殴ってやりたくなる。
2021/01/03(日) 18:13:01.03ID:YmRvWB9v0
君たちには先輩方に対する敬意がない
2021/01/03(日) 18:13:42.18ID:QdF5iATA0
別にそいつに危害を加えたくはない、というか関わりたくない
単に老害って哀しいなって思うだけ
2021/01/03(日) 18:28:01.16ID:VMrgEgvna
ちなみにヨーダ記法とも言う。
2021/01/03(日) 18:43:52.72ID:ZZnWN1rj0
ヨーダは好きだがヨーダ記法は嫌いです。
2021/01/03(日) 19:01:39.19ID:S0YLbz+qa
老害云々以前にC#ではほぼ何の意味もないけど、
CでもC#でも==とすべきところを=と書いちゃったことなんか一度もないな。
普通はそうだよね。
2021/01/03(日) 19:03:25.97ID:bRO3e+JVr
他の言語触ったあとだと間違えやすいんだよ
2021/01/03(日) 19:47:28.74ID:hIXjVHhw0
>>20
燃料投下ご苦労さま
2021/01/03(日) 20:07:34.43ID:QdF5iATA0
今までタイプミスしたことないからこれからもしないと言うのは単なるアホ
ただ昔のコンパイラでは警告でなかったから一定の意味は「あった」けど、未だに言ってるのは単なる老害
2021/01/03(日) 21:56:54.58ID:ZZnWN1rj0
>>31
C言語を使う前の言語って何だろう?
アセンブラならわかるけど。
必ず引き合いに出ると思う。
2021/01/03(日) 21:57:31.45ID:ZZnWN1rj0
>>33
同意。
2021/01/03(日) 22:08:58.55ID:adFNNdCNa
タイプミスてw
普通の人は画面見ながらコーディングするんだけどw
ひょっとすると==と打つつもりで=と打ったことはあるかもしれないが
それを見逃したことなど一度もない。

そもそもタイプミスは-キーのみで発生するわけではないので
理由になるはずがない。

申し訳ないけどこれ、昔も今も「羹に懲りてなますを吹く」以外の何物でもないよ。
そもそも「==の左辺に変数を書かない」などというルールを条件づけしたところで
その条件反射は間違って=を打ったところで発動しないのでは?w

っていうか同じ努力で「等価検査をしたい時は==」を条件づけられるだろうw
37デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/03(日) 22:15:19.58ID:adFNNdCNa
こういう糞作法に疑問を感じない人はあれかね
+と打つつもりで*って打っちゃうかもしれないから
-+*/使わずにマクロでadd とかsubtractとか定義して使えって言われたら
納得して従うんかねwwwwwww
2021/01/03(日) 22:16:18.14ID:myNdCsmw0
>それを見逃したことなど一度もない。

それは「あなたが」でしょ?あなた以外の普通の人が見逃すことがないと断言できるわけはない。
2021/01/03(日) 22:22:10.37ID:hZvGxwgh0
実際してない証明はできないし無意味な話だよ
2021/01/03(日) 22:33:09.25ID:Lewq+os10
>>37
それCOBOLERの発想だよなぁw
2021/01/03(日) 22:50:45.04ID:TwYJ75OS0
VCの頃他の奴がやったときに結構見つけるまで苦労した覚えがあるけど
まあ、そんな頻度のあるバグではないな
42デフォルトの名無しさん (ワッチョイ 426a-Zovn)
垢版 |
2021/01/03(日) 22:58:13.35ID:VROyTreA0
等価演算子が == 以外の言語を使った事ないなら間違えないのかも
43デフォルトの名無しさん (アウアウエー Sa4a-Jh9r)
垢版 |
2021/01/03(日) 23:04:49.04ID:adFNNdCNa
VBA触った後にC系のコード書くとつい....ないってw

くどいようだけど、どっちにしろ条件づけ(条件反射)なので、
同じ条件づけなら直接的な方がいいに決まってるでしょ
2021/01/03(日) 23:06:47.84ID:Lewq+os10
その手のbugはgimpel の pc Lint で潰していたな
lattice 時代からだから歴史の長いsoftだ
2021/01/03(日) 23:12:43.97ID:fsLjg3fja
まあエディタ環境もLintも貧弱だった2000年位までならヨーダ記法の採用にも一理はあるかもしれないけど
現代的な環境でC#を書くなら論外だわな
>>38みたいなことを言い出す奴は間違いなく老害かただの難癖野郎なのでプロジェクトに迎え入れちゃいけないし
万一抱えなきゃいけなくなったとしても若手に影響を及ぼすような仕事を与えてはならない
2021/01/03(日) 23:35:31.66ID:myNdCsmw0
いや、勝手にヨーダ記法を推奨していることにせんでくれる?
2021/01/04(月) 00:03:18.28ID:Nz2iXOdN0
>>34
Pascal とか Basic だろ
2021/01/04(月) 00:04:33.12ID:Nz2iXOdN0
>>36
お前がタイプミスを見逃すかどうかなんてどうでもいい
一般的なプログラマーの話だから
2021/01/04(月) 00:07:02.17ID:Nz2iXOdN0
>>45
> >>38みたいなことを言い出す奴は間違いなく老害かただの難癖野郎なのでプロジェクトに迎え入れちゃいけないし
お前はもう少し文章をちゃんと読む癖をつけたほうがいい
仕様書を勝手な解釈でバグ作り込むタイプだと思うぞw
2021/01/04(月) 01:00:14.94ID:jzK8VmUQa
日本人は精神論根性論に走りやすいし、そうでなくても
ヒューマンエラーをシステマチックに回避しようという発想自体は悪くない。

ただ、その方法論が有効かどうか評価せずに飛びつくのは愚か。
日本は精神論者も多いけど、こういう教条主義者も負けないぐらい多い。
==の左辺に〜なんて全然有効じゃない。
2021/01/04(月) 01:14:52.17ID:jzK8VmUQa
それを言っちゃあおしまいよな話だけど、
真面目な話==と=を間違えるような人は本質的にプログラミング向いてないんだよw

間違うかそんなの。
ズブの素人でも1週間もコード書いてれば「等価検査は==」って条件づけされるってw
if(までタイプした時点で条件反射が発動するでしょ
2021/01/04(月) 01:33:02.28ID:3rgEqS6K0
まあ、でも定数値を左辺に書くことはメリットしかないからな
やれと言われればやることではある

ただ、規約にしてしまって
ソース中のやってない箇所を1つ1つチェックまでして直す価値はないと思う
あくまでなるべくそう書いた方がいいかな?レベル
2021/01/04(月) 01:45:03.22ID:3rgEqS6K0
いくらメリットしかないって言っても規約に昇華されて
チェックまでさせようとする奴がいるとそいつが邪魔

定数値を左辺に書くよりそいつを排除することに力を入れたほうがいい

他にもやることはたくさんある
グローバル変数なくしたり、無意味なメンバ変数削除して引数にしたりと

優先順位が遥かに高いものが他にたくさんあるという前提は忘れてはならない
54デフォルトの名無しさん (ワッチョイ 426a-Zovn)
垢版 |
2021/01/04(月) 02:08:37.49ID:+AkCQ/yL0
>>51
一時間おきにVBとC#のコーディングやってみなはれ
VBでIf文の条件式をカッコでくくってエラーに悩むとか絶対あるから
2021/01/04(月) 02:17:25.69ID:3rgEqS6K0
>>54
一時間おきにそんなことするプロジェクト稀だからそういう無意味な反論するなよ
時間の無駄
56デフォルトの名無しさん (ワッチョイ 426a-Zovn)
垢版 |
2021/01/04(月) 02:20:12.44ID:+AkCQ/yL0
>>55
一般的には稀なのかもしれんがそういうのもある
単純に == と = を間違える奴はプログラミング不向きとか言ってるバカに試してみて欲しい
2021/01/04(月) 02:22:58.44ID:6jvKGYBk0
>>52
不自然で読みにくい、という十分大きなデメリットがあるよ
2021/01/04(月) 02:41:40.35ID:3rgEqS6K0
>>56
そんなレアケースの備えいらねーだろ

>>57
https://i.imgur.com/5Lq75s4.jpg
https://i.imgur.com/7c1dHKQ.png
2021/01/04(月) 02:41:41.41ID:BeeF0dCGa
2000年代に入った頃から過剰コンプライアンスが問題視されるようになった
(でも改善はされないのが日本という国だけどw)が、あれとよく似てるね。

入院患者の取り違えが起こっては大変と、毎日何度も何度も氏名生年月日を確認する。
携帯キャリアのサポートに携帯で電話してるのに「お客様のお電話番号を〜」
本当に意味あるのかそれw

欧米人は絶対にこんなことしないだろう。

ルールを忘れるからとルールを忘れても問題を起こさないためのルールを覚える。
ここに矛盾を感じない人は論理的思考能力に欠陥がある。
プログラマに向いてないよw
2021/01/04(月) 06:55:02.30ID:h9VTRLOg0
そんなルールにこだわりたいのならテンプレくらい見てくださいね
2021/01/04(月) 07:01:35.74ID:ote7uWYR0
マ板でやれや
2021/01/04(月) 08:49:17.48ID:v6RCrFsZ0
ほら始まったマウント合戦
2021/01/04(月) 09:37:13.43ID:OpGFyjtND
続きはこちらでどうぞ
https://mevius.5ch.net/test/read.cgi/tech/1469538912/
2021/01/04(月) 10:27:40.46ID:Nz2iXOdN0
>>54
> VBでIf文の条件式をカッコでくくってエラーに悩む
それエラーにならないよ
単に ( ) で囲った式になるだけだから
言うなら逆に「Cでif文の条件式をカッコでくくらずにエラーに悩む」だろうね

と言うように人は必ず間違いを犯すものだとと思ったほうがいい
あとタイプミスの多寡とプログラマーとしての能力はあまり関係ない
優れたキーパンチャーは必ずしも優れたプログラマーとは限らない
2021/01/04(月) 12:49:08.68ID:OA+Odfw/0
定数値を左に書くのは20〜30年前の流行りで古臭いスタイル
66デフォルトの名無しさん (ワッチョイ aebb-mlD+)
垢版 |
2021/01/05(火) 15:53:00.06ID:G7CPq1YD0
ユニットテストを身につけたいのですが、公式ドキュメントにあるxUnit、NUnit、MSTestのどれが主流なのですか?
https://docs.microsoft.com/ja-jp/dotnet/core/testing/
2021/01/05(火) 17:05:19.12ID:VE6Qai0fM
>>66
どれもそれなりに使われているから何とも言えない
というかそもそもドットネットドカタはテスト書かないのが主流なので差が出ないと言うべきか
まあ仕事ならどうせ現場に合わせるんだし、大した違いはないからどれでも好きなの覚えたらいい
個人的にはxUnitが好き
2021/01/05(火) 17:42:48.70ID:fFW5I87S0
今選ぶならxUnitだろうね
2021/01/06(水) 15:48:05.04ID:p+a7utAN0
>>65
それってなんなんですかね
switch文みたいにしたかったとかなんですか
2021/01/06(水) 16:14:14.32ID:A2mjs7EYa
Cにはboolがないから
CのifはただのJZ(jump if zero)、つまり()の中の式の値がゼロかどうか見てるだけ
条件演算子の値は条件不成立時に0になる。1 == 2という式の値は0
a = 1という式の値は1
2021/01/06(水) 16:24:54.43ID:ZNeGLXFnD
>>69
コンピューターリソースが少なく、IDEが今ほど快適じゃなかった
2021/01/06(水) 16:32:56.00ID:A2mjs7EYa
だから正しいとは言ってないからねw
正しくないからw糞作法だからそれw
==を=にしてしまうミスだけを特別扱いする理由はどこにもない>>37
73デフォルトの名無しさん (ラクッペペ MM26-9Wmm)
垢版 |
2021/01/07(木) 16:37:13.71ID:JVCs6nJOM
messageboxみたいにダラダラ長い関数は左辺に結果書くほうが見やすいだろ
2021/01/07(木) 17:34:18.46ID:zROxGAmI0
ダラダラと何日も役立たずのくだらない議論ごっこいつまでやってんだ
2021/01/07(木) 17:54:20.44ID:lNg+fAcw0
>>74
そこにそいつの全力を入れてきたんだろ
2021/01/07(木) 18:01:34.63ID:KSndWcRv0
>>73
引数の多い関数呼び出しをif文に入れるなよ
戻り値をローカル変数に入れればすむ話だろう
2021/01/07(木) 20:35:27.74ID:CkbUzopy0
System.Text.Jsonって非パブリックフィールド含められないの?
公式にはJsonInclude属性付ければできるみたいな事書かれてるけどprivateフィールドに付けたらクラッシュする
publicフィールドならちゃんと動作するが
2021/01/07(木) 21:39:53.62ID:VY2mjM+70
> 公式にはJsonInclude属性付ければできるみたいな事書かれてるけど
ちなみにどこで?
docsのJsonIncludeAttributeには
> Non-public properties are not supported.
って書かれてるけど
というかフィールドの方は触れられてもないのな
2021/01/07(木) 21:51:23.00ID:6HYd5Ohs0
何がしたいん?
ignore?

https://docs.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json-ignore-properties?pivots=dotnet-5-0
2021/01/07(木) 21:56:03.70ID:UQK7kjjpa
https://docs.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0#include-fields
https://docs.microsoft.com/ja-jp/dotnet/standard/serialization/system-text-json-immutability?pivots=dotnet-5-0#non-public-property-accessors

この二つの合わせ技で行けるんじゃないの?
まったく使ったことないから違ったらごめんよ
2021/01/07(木) 22:26:23.95ID:qfT0NyWK0
非パブリックって書いてあるけどpublicじゃんな
82デフォルトの名無しさん (ワッチョイ 7f40-Cbw0)
垢版 |
2021/01/13(水) 19:53:35.47ID:KSPkdcXv0
C#の実行ファイルはexeなの?
linuxで実行する場合もexeファイルを起動するの?
2021/01/13(水) 20:14:39.53ID:+WIx7J+j0
.NET Coreの話なら
dotnet publishでプラットフォームごとの実行ファイル作るよ
dotnet runだと作られたdllを起動する形になる
84デフォルトの名無しさん (ワッチョイ ffbb-4hqK)
垢版 |
2021/01/14(木) 13:03:09.94ID:xE5npB3D0
.Net 5 SDKのみしか入れていない環境では、ビルドターゲットが.Net core 3.1になっているソリューションをビルドできないんですか?
今までのバージョンもこうでしたっけ・・・・?
2021/01/14(木) 14:31:35.33ID:gYDerupm0
できるよ
2021/01/14(木) 14:32:45.29ID:G12ay1Wf0
過去の全てのバージョンをビルドできるようにしてったら
どんだけSDKが肥大化していくことやら
2021/01/15(金) 03:46:56.47ID:rphYVuJL0
booleanを返す関数があったとします。
例外発生時はfalseを返すものとして、
try-catchでの戻り値の返し方って

■パターンA
try{
 ・・・
 return true;
}catch{
 return false;
}

■パターンB
try{
 ・・・
}catch{
 return false;
}
return true;

パターンAorBのどちらが主流とういうか分かりやすいでしょうか
2021/01/15(金) 04:08:21.28ID:km2IqTOsa
>>87
どっちでも大差ない気が。
ただいつでもAで書けるというか書くべきかは微妙だよね。
(基本的にはtryブロックに入れるのは例外発生が想定される行だけにすべき)
89デフォルトの名無しさん (ワッチョイ e101-JESV)
垢版 |
2021/01/15(金) 10:12:22.19ID:nDhdSCTd0
try抜けたあとにも処理を書く場合とかエラー発生時はアーリーリターンって考え方だとBのがいいと思う
2021/01/15(金) 23:06:32.97ID:jMoWrUgc0
WPFでdatagridを使った帳票アプリを作っていますがとても困っています
助けてください

やりたいこと
タッチ操作によるピンチイン、ピンチアウトをcanvasに追加したい
現在の状態(scrollviewer→canvas→datagrid)

問題点
この状態で canvasを拡大縮小する場合、Onmanipulation系のイベントを発生させたいが、scrollviewerやdatagrid上では、pannmodeがONだとスクロール以外のタッチ操作が効かない
(よくわかりませんが、この2つには最初からOnmanipulation系のイベントが実装されていて、e.handled=trueしてしまっているかららしい)ため拡大縮小機能を実装できない

現在
Microsoftの標準ライブラリのコードが載っているページからscrollviewerとdatagridのソースコードを見つけたため、
それぞれカスタムコントロールを作っているが、エラーが出て実装できない

教えて欲しいこと
標準ライブラリのソースコード(とtemplate)を使ってイチからカスタムコントロールを作りたいためやり方を教えてください
というかサンプルを貰えると嬉しいです

拙い文章で申し訳ないですがお願いします
2021/01/16(土) 11:21:07.86ID:ua+hsB73M
見せたくない英数字の情報を外部ファイルで使いたいです。
テキストで作った情報を加工して外部ファイルにし、アプリではそれを読み取って使います。
英数字だと、バイナリでファイルに書き出しても中身見えますよね?
どうすれば簡単にできますか?
2021/01/16(土) 11:35:26.62ID:2pvo7lqfa
>>91
バイナリで書き出すってどういうことを想定してる?英数字の文字コードをバイナリで書き込んだらそれは単なるテキストファイルだよ。
文字コードを簡単な暗号化アルゴリズムで暗号化してから書き出して読み出すときに復号化すればいいのでは?
93デフォルトの名無しさん (ワッチョイ b9ce-p24c)
垢版 |
2021/01/16(土) 14:15:59.05ID:PIj+e88F0
>>90です
サンプルのコードを作ってみました。
この画面に、タッチ操作による拡大縮小機能を追加する方法を教えて下さい。
https://imgur.com/qnH4OgB.png

https://imgur.com/2whIW0t.png

PW:aiueo
https://www.datadeliver.net/receiver/file_box.do?fb=ab23e3c9b06240089e36432d6589a060&;rc=d186e1f582254286a79073b17166328c&lang=ja
2021/01/16(土) 15:46:32.13ID:5ippMHnD0
WPFってなんでも好きに作れなかったっけ?

カスタムもクソもお前が並べてコントロールデスって主張すればそれがその時点からそんなような?
スクロールバーとパネルにグリッド表示されたもん表示できれば完成でええのんか?この場合
2021/01/16(土) 16:36:35.17ID:PIj+e88F0
カスタム云々は手段であって目的ではないです
カスタム云々言ってるのは標準ライブラリのコントロールをちょっとだけ修正したものを使いたいため、1個の手段かなと思って書きました
最終的な目的は>>93のdatagridをタッチ操作手間ズームできる機能です

て言うか WPFスレもあったのでこっちクローズして向こうで聞いた方が良さげですかね
96デフォルトの名無しさん (ワッチョイ 8d33-p24c)
垢版 |
2021/01/16(土) 16:55:45.03ID:a2u42RC60
ビルドして動かしてみたけど、もうできてるんじゃないの?
DataGridが拡大・縮小されたけど。
2021/01/16(土) 16:56:09.84ID:XBV3y9Xq0
>>91
用途が不明だけどテキストを暗号化するようなライブラリでも使って保存しちゃえば?
多少隠そうとしてもアプリが復号化したタイミングのメモリ覗かれたらバレちゃうけどね
2021/01/16(土) 17:00:53.45ID:gCH+adbg0
>>91
内容が簡単にはわからなきゃいいというレベルなら>>92の言うように暗号化すればいい
ガチでやるなら単体では無理
サーバー立ててそこから取得するとかするしかない
2021/01/16(土) 17:45:39.96ID:PIj+e88F0
>>96
タッチ操作で拡大縮小やりたいです
マウスのホイールではなく
2021/01/16(土) 18:24:14.81ID:a2u42RC60
>>99
ノートPCのタッチパッドで試したけどタブレットだと動作しないってこと?
それなら環境ないので確認出来ない。
2021/01/16(土) 18:40:16.80ID:PIj+e88F0
>>100
ノートだとできます!?
それは知りませんでした…
サーフェスgoで使用予定です
2021/01/16(土) 20:24:49.41ID:5ippMHnD0
>>95
それだと主張がよくわからない
datagridを改造する方針は諦めた上で1から作る話じゃねっけ?
それともdatagridを改造する方針はまだ生きてるの?
2021/01/16(土) 20:59:23.29ID:nXAeK8tya
WPFでタッチパネルによるズームや回転、Windows8が出たばっかりのころに
MSのサンプルをベースにして実験したけど、なんか落とし穴はあった気がしたけど
そんな難しくなかったような気が。

で当時ブックマークしておいたサンプルを見ようと思ったらもう消されちゃって残ってないのな。
MSって昔からほんとこういういらんことするよね。
2021/01/16(土) 23:30:45.34ID:PIj+e88F0
>>102
手段は問いません
どちらの手段でもいいので助けて欲しいです
2021/01/16(土) 23:41:12.28ID:LXHuhEJj0
>>90
自分はWPFは書いてるけど、タッチパネルのコードなんて書いたことないんで分からない
でも、以下の回答をコピペしたら何かのヒントになるかな?

How to enable both scrolling and zooming using pinch in WPF?
(意訳)どうしたらタッチ操作のスクロールと縮小拡大がWPFで出来ますか?
https://stackoverflow.com/questions/57659485/how-to-enable-both-scrolling-and-zooming-using-pinch-in-wpf

質問者が自分で答えてる
XAMLとMainのコードビハインドがあるから、試せまるよね?
ちなみに、カスタムコントロールは不要だから消した、とのこと
2021/01/17(日) 00:47:37.05ID:boTjyN9w0
WPF:GridやCanvasなどでマウスやタッチのイベントを拾うには?[C#/VB]
https://www.atmarkit.co.jp/ait/spv/1601/06/news027.html


タッチパネルとかやったことないからググったのを貼ってみる
違う話題だったらすまん
2021/01/17(日) 21:28:32.39ID:XpuuOM7d0
>>90です
>>105のページを実装してかなり理想に近い形になりました
ただ問題として
・datagridのscrollviewer.panningmodeがNoneじゃないと拡大ができない
・C#側で指が2本になったらNoneにするようにするとうまく動作しない(1本目or2本目の指の変化量が取得できない?
3本目の指を使ってピンチインアウトは可能)
というところが残ってしまいました

manipulationdeltaのイベントをtouchmoveにするか、ダブルタップでズームモードとスクロールモードを切り替えるという形で妥協しようかなと思います
ありがとうございました
2021/01/18(月) 09:58:45.73ID:xiibmO3Sa
親が同じMdiフォーム同士で値参照を行いたいのですがpublic変数やメソッドを設定しても参照することが出来ずに困っています。
初回呼び出し時は参照できるのでいいのですが、1度開いた後だと呼び出せない状況です。
なにか解決方法はないでしょうか。
2021/01/18(月) 10:49:21.09ID:6S9O78EL0
状況がわからん
2021/01/18(月) 10:54:28.68ID:G8032nPp0
教科書的には
共有したい値を持てるプロパティを持つクラスAを作る
親フォームはAのインスタンスを保持し、各Mdi子フォーム作成時にAのインスタンスを渡す
Mdi子フォームはAのインスタンス保持し、必要に応じて値を取得設定する
2021/01/18(月) 12:10:05.83ID:0ftZyRvq0
>>108
ご両親の相談かと思いました
2021/01/18(月) 12:30:16.88ID:HexibSYs0
値が入っていないとかならありえるけど、
呼び出せなくなる状況がわからん。
初回と開いた後で呼び出すのに違うメソッド使ってて、キャスト間違ったりしてない?
2021/01/18(月) 14:29:21.82ID:0wiZZ/Q+a
>>108
率直に言って何を言ってるのかさっぱり分からんよw

プログラミング初心者なのは誰も責めないけど
説明能力欠如はNG。

能力以前に他人に理解してもらおうという努力と推敲の跡が全く感じられない。
それじゃ誰にも助けてもらえないよ。
2021/01/18(月) 14:59:06.70ID:IRtYp4a70
WPFでドラッグ&ドロップ終了時に鳴るイベントって無いの?
!AllowDropな領域やウインドウ外でドロップすると何も捕捉できなくて困ってる
MouseLeftUpも捕捉できないし
2021/01/18(月) 15:15:01.85ID:G8032nPp0
ウィンドウ外ってことは自分がドラッグ開始した側の場合?
DoDragDropから返ってきたタイミングがD&D操作の最終結果
2021/01/18(月) 15:20:09.22ID:IRtYp4a70
>>115
綺麗さっぱり解決した、マジでありがとう
DoDragDropはドラック開始時に即結果返してくるもんだと勘違いしてて戻り値なんて全く気に留めてなかった
ドラッグ操作中はずっとDoDragDrop関数の中だったのか
2021/01/18(月) 19:46:08.26ID:2G0os1bF0
UnityのためにC#おべんきょう中
2021/01/18(月) 21:10:21.60ID:Y7agfnjO0
どうでもいいけど、イベントが鳴るって表現は初めて見たな
メジャーな表現なのか?
2021/01/19(火) 01:58:16.45ID:I1IZPSHx0
Microsoft的には型が自明な変数はstringとかじゃなくvarを使えと言ってるけど未だになんか抵抗あるんだよな
2021/01/19(火) 06:59:52.83ID:1DREI3uP0
>>119
申し訳ありません、それは加齢による思考の柔軟性の欠如ですので老害と言われる前にこの業界から立ち去ることをお勧めします
121デフォルトの名無しさん (ワッチョイ 2d61-Uc4C)
垢版 |
2021/01/19(火) 07:12:57.93ID:Cn/4ZVdb0
変数宣言はとりあえずvarにしといて後でなおす。
2021/01/19(火) 08:04:25.85ID:BSl7DPdbM
>>119はC#9.0のnew()構文を使う箇所に限っては今後許されるようになるなあ

といいつつ自分もC#のキーワードになってる型はvarじゃなく書きたいなあとも思う。書かないけど
2021/01/19(火) 08:20:27.18ID:UsQkIyf/0
varなんて10年以上前からあるものに未だに抵抗があるってことは長期間OSS等の他人のソースを読んでいないってこと
2021/01/19(火) 08:50:15.53ID:56Cm9vi30
ってか書いた奴は自明( ・ิω・ิ)とか思っててもそうじゃないことが結構あるし
他のツールで検索したときやコメントになってる箇所はそれじゃヒットしないじゃんってなって
やるんかやらないんかで言ったらvarではなくちゃんと書いたほうがいいコードだと思う
2021/01/19(火) 09:39:10.55ID:1DREI3uP0
>>124
> ってか書いた奴は自明( ・ิω・ิ)とか思っててもそうじゃないことが結構あるし
IDE使ってないの?
2021/01/19(火) 10:20:34.69ID:Gnfp96LE0
>>125
俺じゃないやつがね
2021/01/19(火) 10:30:06.51ID:BwhvdJlQ0
>>125
ちなみにIDE使っててもパッと見わかんないときない?
2021/01/19(火) 10:36:40.85ID:1DREI3uP0
お前が困ってないなら問題ないじゃん
今時IDE使わない変人は勝手に苦労させときゃいい
上司が老害でと言うならご愁傷さまだけど
2021/01/19(火) 10:51:07.00ID:2Vn7p2si0
>>128
パッと見わかんないじゃん
パッと見

動かして見ないとわかりにくい系のコード最近できるだけ排除してんだよね俺

インターフェースも使うのやめた
switch caseで分岐のが綺麗で仕様もハッキリする
2021/01/19(火) 11:04:28.30ID:4FOEklDdd
つうかIDEにvarと型を一括置換してくれる機能あるんだから自分が読むときゃ好きな方に変換すれば良い

個人的には型がわかんなきゃ処理の流れが追いづらいのはvar以外に理由があると思うけど(命名が糞とか)
型がわかんなきゃいけない場面がそもそもレアケース
2021/01/19(火) 11:15:40.04ID:w6D+a9gN0
じゃあ全部
List<object>とか
Dictionary<string,object>でいいじゃん

実際全部これで作ったことあるけど
わかってる間はいいよ
2021/01/19(火) 12:12:41.02ID:JrPuHU7j0
冗長でコード読みにくいわ。
2021/01/19(火) 12:27:28.26ID:PDD2cmkqa
「型が自明ならvar使え」が正しいことは自明なので、
論点は自明じゃなくて自明にすることが難しいケースがあるかどうかだね。

ないことはないね。
もちろんそういうケースだってインテリセンスで型は分かるけど
明示的に型を書いてくれた方がありがたいこともある。
2021/01/19(火) 12:29:00.70ID:u3xtRKtO0
プログラムに綺麗って単語を使う人が総じてNET2.0止まりなのはC++じゃないC上がりとかなのかね
2021/01/19(火) 12:44:43.27ID:kTcVE4mf0
c#はとっととhindley milner導入しろ派なので当然全部var使う
2021/01/19(火) 14:37:47.64ID:EuSX2rsQM
varってvoid*?
2021/01/19(火) 14:40:11.50ID:EHMQNeZC0
だいたいそんな感じ
2021/01/19(火) 14:50:36.80ID:5mJnt+0W0
C++にはautoって名称で追加された
2021/01/19(火) 15:07:54.28ID:1DREI3uP0
>>133
> 論点は自明じゃなくて自明にすることが難しいケースがあるかどうかだね。
そうじゃないでしょ
var a = f();
って書くだけでf()の型を知らない限り自明じゃないけど論点は>>130が言うように型を知る必要がどれだけあるかどうかだと思うよ
個人的にはレアケースとまでは言わないけどそんなに多くないし必要な時でもIDEですぐにわかるから問題ないレベルだと思ってる
2021/01/19(火) 15:09:21.35ID:1DREI3uP0
>>136-137
レス乞食?
2021/01/19(火) 15:33:59.98ID:+oCiGxYna
>>139
「型が自明」って言うのは右辺の式を見ただけでその型が分かるって意味だよね?

君は右辺がメソッドなら型は自明じゃないと言いたげに聞こえるけどそんなことはない。
むしろそんなケースは少ない。

では型が自明じゃないケースというのは、

(1) メソッドの命名が不適切
(2) 返り値の型が過度に抽象的だったりその問題領域でたまにしか使われない型だったりした場合

(1)は改名で改善できるけど(2)はどうやっても不可避な場合がある。
2021/01/19(火) 15:37:48.79ID:XpB5NFXI0
っていうかちゃんと型を書くことにデメリットがない
2021/01/19(火) 15:40:05.06ID:EuSX2rsQM
本当はchar*なのに手抜きでvoid*はよく使ったから、varの濫用もありなのかもね。
2021/01/19(火) 15:51:48.14ID:1DREI3uP0
>>141
> 君は右辺がメソッドなら型は自明じゃないと言いたげに聞こえるけどそんなことはない。
なら>>139のaの方を書いてよ

> むしろそんなケースは少ない。
根拠があるならどうぞ、ないなら君個人の経験だよね

> (1) メソッドの命名が不適切
ヒント情報ではあるけど確実じゃないよね

> (2) 返り値の型が過度に抽象的だったりその問題領域でたまにしか使われない型だったりした場合
それはたまにしか使われないから読み手が型を覚えてないってこと?
論点がちょっと違うように思う
2021/01/19(火) 16:02:16.12ID:+oCiGxYna
>>144
例えば.NETのライブラリのクラスのメソッドを見てみ。
メソッド名から戻り値の型が推測できないミスリーディグなのももちろんあるが、それは少数派。
大半はメソッド名から戻り値の型は推測できる。

ユーザーコードのメソッドも基本的はそうであるべきだしまともな人が書いたコードはそうなってる。
君、本当にプログラマ?
2021/01/19(火) 16:03:51.01ID:4FOEklDdd
全然意味が違う
コンパイラはvarだろうが型名だろうが完全に同じ動きをする
コンパイル時の挙動も生成結果も全く同じ
ただの文字の置き換えに過ぎない
2021/01/19(火) 16:09:05.78ID:+oCiGxYna
まあ、こんな話はどうでもいい。

「論点は自明じゃなくて自明にすることが難しいケースがあるかどうか」なのは間違ってないし、
自明にできないケースが存在することも明らかに自明だ
2021/01/19(火) 17:55:50.67ID:1Y2uTlCP0
俺は積極的にvarを使うが、
周りの奴には明示的に型を書いてほしい

お〜れ〜はジャイア〜ン、ガ〜キ大将
2021/01/19(火) 17:58:28.71ID:ljoN0Go60
ていうか、varで置いとくメリットないよね
varで書いて改行か保存をトリガに元の型に勝手に直して欲しいレベル
2021/01/19(火) 17:59:58.88ID:8yhc5FsTa
イテレータとかはvarで書かないと冗長過ぎる
他は型名でもどっちでもいいな
2021/01/19(火) 18:45:05.43ID:1DREI3uP0
>>145
そうあるべきとか言われてもねぇw
意識高い人はSystem.Collection.Generic.ListのRemove()とRemoveAll()の戻り値の型をきちんと把握してるんだろうね、俺には無理だわ

>>147
> 「論点は自明じゃなくて自明にすることが難しいケースがあるかどうか」なのは間違ってないし、
それは君の論点ね
俺としてはどうでもいい
2021/01/19(火) 19:00:43.09ID:i/8g/T9Cp
ねえ、お前らまとめて相談室に移動してくれない?
2021/01/19(火) 19:36:45.79ID:d6HtnSkG0
>>152
どう使い分けてるの?
2021/01/19(火) 19:43:10.02ID:84DXcEkC0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。

これ無視してどうしても雑談やくだらない議論ここでしなきゃならんの?
普通の人は117からこの書き込みまで全部あぼーんした方がいい
2021/01/19(火) 21:28:02.04ID:SMVAWsya0
いや、好きにしていいよ
2021/01/19(火) 21:56:33.32ID:wMimx5MC0
ルールを守れ
2021/01/19(火) 21:58:18.64ID:T1q1SgZya
さすがにメソッドの戻り値の型が自明じゃないが普通とか思ってる人とは
議論にならないよね。

っていうかこういう話が通じない人、自分より下ならいいけど
上司にいるとほんとつらいw
2021/01/19(火) 22:27:12.89ID:MksL1yadD
>>2のリンク先に興味深いことが書かれていた
議論スレで議論すると論破されちゃうから、
初心者スレでマウント取った気になるらしい
とても腑に落ちた
2021/01/19(火) 22:29:03.20ID:MksL1yadD
スレのルールも守らず>>2での議論ができないような奴の言うことは役に立たないと言える訳だな
無能だからここから出られない、と
2021/01/19(火) 22:30:46.82ID:T1q1SgZya
>>158
これ前も書いたけど、君がやってるそれがまさに「マウントを取る」
行為なんだけど自覚があるかな?w
間違いなくないよね。

これも前に書いたが、1っか月で150しかレスが付かない過疎スレで
何を目くじら立ててるわけ?
誰が困るの?誰も困らないよね?

単に人にケチをつけてマウント取りたいという卑しい動機で言ってるだけだろアホかほんと
2021/01/19(火) 22:34:05.03ID:MksL1yadD
>>160
君らがそういう事してると初心者が気兼ねするって想像力もないのな
無能は無能な理由があるってことか
162デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/19(火) 22:35:11.09ID:T1q1SgZya
>>161
そういうのを牽強付会と言います。
2021/01/19(火) 22:40:21.24ID:MksL1yadD
>>162
>>1
2021/01/19(火) 22:42:31.25ID:1DREI3uP0
ネットで吠えてるだけって虚しくないのかなw
2021/01/19(火) 23:22:13.79ID:ZlDpZ/580
いや、好きにしていいよ
2021/01/19(火) 23:25:12.57ID:JZy8vN9I0
ガイドライン通りでいいんじゃねって気がするが
built-inは明示的に宣言したい気持ちも分かるので
チームに合意が得られるならcsharp_style_var_for_built_in_types = falseにしとけばいい

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/inside-a-program/coding-conventions#implicitly-typed-local-variables
2021/01/20(水) 00:20:44.38ID:J4/R6qDu0
>>164
ネットで吠えてるって、いきなり老害で去ったほうがいいとか言って吠えだしたのおまえだろww
数時間前の自分の発言すら忘れる馬鹿なの?
2021/01/20(水) 05:30:22.29ID:6vEnElCe0
老害という言葉に激しく反応する老害
っていうオチかな?

>>157みたいに話しそらして逃げはじめたから吠えてるだけって揶揄されてる事ぐらいは理解しようねw
2021/01/20(水) 07:03:54.32ID:J1Mj2vHK0
いや、好きにしていいよ
170デフォルトの名無しさん (ワッチョイ 025d-m6e0)
垢版 |
2021/01/20(水) 10:05:59.48ID:zLzflGmk0
スレが伸びててよろしい
2021/01/20(水) 11:56:41.88ID:GU4zjWk/M
プリントアウトしたり、秀丸で見ることを考えると明示の方がいいかな。
2021/01/20(水) 12:16:09.30ID:00FUxo8md
プリントアウトしたり秀丸で見るときに変換しとけばいいだけ
なんで少ない方に合わせなきゃならんのだ
2021/01/20(水) 12:40:59.07ID:XeK75HAm0
Dictionary<string, int> myDictionary1 = new Dictionary<string, int>();

var myDictionary2 = new Dictionary<string, int>();
2021/01/20(水) 15:44:09.47ID:U6+k13Z80
null許容型関連の質問ですが、nullを許容しない型のデフォルト値はどういうものが適切なのでしょうか?

例えば、あるデータオブジェクトを指すクラスフィールドにコンストラクタ以降で設定する場合など
2021/01/20(水) 17:53:03.33ID:J1Mj2vHK0
動作の仕様から考えないとでなくね?
nullを許容しないって理由も仕様に関わって来んじゃね?
2021/01/20(水) 18:05:27.20ID:8EWTEw8QM
>>173
初期値ならnull!一択
2021/01/20(水) 18:06:18.37ID:8EWTEw8QM
レス番ずれたごめん
>>174
2021/01/20(水) 18:16:09.58ID:5gwvq16z0
>>174
null許容/非許容と関係なく設定したい値の定義域の中に
そのクラスを使う時のデフォルト値として採用できるものがあるかどうかを考えるしかない

例えば「色」を設定するとして、指定がなければ何色をデフォルトにするのがいいかはケースバイケース
当たり前のこと過ぎるから本当に聞きたいことは違ってそうだけど
2021/01/20(水) 18:49:46.67ID:k0WuvcqZ0
>>174
デフォルトのまま使われた場合にどうなってほしいのかを考えるしかない。
ふつうは一番無難な動作になる値を選ぶだろうけど。
2021/01/20(水) 18:54:07.33ID:LBcPIMoJ0
>>174

nullを許容しない型だから、値型の話だよね。

例示されいているオブジェクトを格納する型は
参照型だから関係ないよね。

値型でクラスフィールドにするものだと、
インスタンス数を記録するフィールドとかだけど、
このときは明白に初期値は0になるよね。

初期値が思いつかないフィールドなんかは、
ロジックを見直して使わないようにするのがいいと思う。
クラスフィールドならクラス内グローバル変数みたいなものだから。
2021/01/20(水) 19:13:42.59ID:2t/gHyrm0
>>180
いつの時代の人やねんw
2021/01/21(木) 05:31:50.73ID:rjSQv0Wq0
>>180
> nullを許容しない型だから、値型の話だよね。
よく知らないなら無駄に絡んでくるなよ…
2021/01/21(木) 09:28:06.79ID:AO+4cZ7Y0
すいません、ロートルなのでどこが知識不足なのかわかりません。
教えていただけませんか?
2021/01/21(木) 09:42:10.43ID:AO+4cZ7Y0
すいません、ググりもしないで回答した愚か者でした。
余計なことを書いたことをお詫びします。
2021/01/21(木) 10:30:22.56ID:aUdU9fY1d
ちゃんと反省できて偉い!
2021/01/21(木) 12:05:41.28ID:p+kzeOLk0
初歩的なことですみません。
Win10で項目のサイズを100%⇒125%にするとフォームが崩れてしまうのですがどこの設定をしたらよいのでしょうか
2021/01/21(木) 12:07:38.37ID:AqHcR6qx0
皆さん有難うございました
2021/01/21(木) 12:09:34.75ID:+iCuMAZm0
>>186
WinFormを捨ててWPFで作り直す
189デフォルトの名無しさん (アウアウエー Sa0a-p24c)
垢版 |
2021/01/21(木) 21:44:45.19ID:ggYpilOfa
>>186
フォームが崩れるって具体的にどういうこと?
2021/01/21(木) 21:48:16.83ID:YPRdayr10
左足の踏み込みが甘い
191デフォルトの名無しさん (ブーイモ MMf6-Uc4C)
垢版 |
2021/01/21(木) 22:11:43.69ID:svbwtY+WM
右足ちゃうか?
2021/01/21(木) 22:19:59.04ID:vAIL1xEN0
違う、まず体幹を安定させるべき
2021/01/21(木) 22:59:12.22ID:/8Y0ih1k0
強いパンチは蹴り脚で撃つ@ホーリーランド
2021/01/21(木) 23:10:46.63ID:krexEaXy0
>>189
winformいじればどんなアホでもわかる現象なのでお前はおよびじゃないよ
2021/01/22(金) 00:53:56.18ID:LbFG10xGa
>>194
むしろアホにしか起こせない現象だから俺には理解できないんだろうねw

賭けてもいい。
この無礼な馬鹿が自動スケーリングの仕組みを
ろくに理解せつに作り込んだバグと質問者の問題は恐らく異なる。
2021/01/22(金) 01:04:05.40ID:LbFG10xGa
コードは意図した通りではなく書かれた通りにしか動かない。

文章も自分が何を伝えたいと意図したかではなく
文面に書かれていることだけが他人に伝わる。

後者を軽視する奴は100%プログラマとしても無能だ。
ポエムじゃないんだから読み手に想像力で補完してもらうことを期待するのは間違ってる
2021/01/22(金) 01:13:27.19ID:hRbCIOLy0
>>195
説明なんか不要だろ
フォームにテキストボックスとボタンでも貼って倍率変えて実行するだけで
もうリソースエディタ?で配置した画面とは似ても似つかない画面が見えるんだから
これがわからないヤツなんてそもそもwinform触ったことすらねーだろそいつ
間違いなく質問者が聞きたいのはお前にじゃねーよw

何で知らないのにクビ突っ込んでくるのか?w
2021/01/22(金) 01:24:26.14ID:OfPTadrW0
>>186
項目って何
2021/01/22(金) 01:34:58.35ID:dHC2KPFC0
>>186
項目のサイズを125%⇒100%にする
2021/01/22(金) 13:37:52.91ID:QY6O1hmh0
>>186
フォームのプロパティ AutoScaleMode を デフォルトの Font から None に変える
2021/01/22(金) 14:19:12.75ID:fukKKC/8d
wpfの唯一と言っていほどのメリットが画面scaleへの対応
winformが根強く残っていてもこの手の問題へのヘルプが今まで山のように発生している
そういった背景を知っていればあの文章だけで十分に何が問題かは予測できる上に珍しい事例でもなんでも無い
それなのに自身の無知をさらけ出し、挙げ句の果に質問者の文章が稚拙であるかのような言い訳をするのはプログラマとして無能と言えるのではないだろうか?
2021/01/22(金) 14:30:33.50ID:8p9OJtgT0
続きは>>2
2021/01/22(金) 14:31:48.32ID:36C6iaEea
>>201
本気でそう思うならくだらないこと書いてないで質問者に代わって問題の詳細を
きちんと書いてくれ。

しかし馬鹿な奴だ。
何で>>197が沈黙してるのか想像力が働かないのか。

自動スケーリングはちゃんと理解してないとトラブルの元なのは確か。
しかしちゃんと理解して使えばそんな難しい話ではないし、
「フォームが崩れる」などというあいまいな表現で問題を特定できるほど
単純な話でもない。
2021/01/22(金) 14:39:33.20ID:hRbCIOLy0
まあ、まともな解決方法持ってないからね俺らw
というわけでこの話題が出ると荒れるのです
2021/01/22(金) 18:37:43.30ID:aSTD1Cv1M
>>151
>>>145
>そうあるべきとか言われてもねぇw
>意識高い人はSystem.Collection.Generic.ListのRemove()とRemoveAll()の戻り値の型をきちんと把握してるんだろうね、俺には無理だわ
だからそれが少数派って言ってんじゃないの?
全部把握しなければいけないみたいに言ってないよね
2021/01/22(金) 18:56:51.05ID:TU/Hr8MED
初心者 分からないので>>1のテンプレ読んで質問する
中級者 答えられる範囲で回答
上級者様 気持ち良くなるのが目的なのでスレ違いも厭わない
答えられない事も知ったかぶりして馬鹿にしたりトートロジーで誤魔化す
上級者 テンプレ>>1を理解しているので無駄な議論はせず的確に回答
2021/01/22(金) 19:12:58.80ID:Pa9c7HBM0
>>205
よく使うクラスのよく使うメソッドでもそういう例があるって話
例外的なメソッドを言い出したらキリないし
208デフォルトの名無しさん (ワッチョイ 475f-8PYP)
垢版 |
2021/01/22(金) 19:13:26.61ID:BHdCo4AB0
まだWinFormsやってるやついるのか
2021/01/22(金) 19:50:27.55ID:OfPTadrW0
それしかやらんわ
2021/01/22(金) 20:16:51.12ID:buqgHbet0
WPF初心者にはきついわ
検索できないとか存在しないとかエラーが謎
2021/01/22(金) 21:43:23.06ID:3W/g7okM0
WPFの和書が皆無に近いもんな。秀和の分厚い奴も2019になってもいまだにFormsだし。
2021/01/22(金) 21:49:48.50ID:hRbCIOLy0
ガチでやろうとするとunityのが楽なんだよなぁ
こいつバックミュージック流しながら音なんねーし
2021/01/22(金) 21:51:05.66ID:/Gflmnvx0
wpf言ってる間にそのうちmaui(mvu)が来ますよ
2021/01/22(金) 21:53:42.78ID:hRbCIOLy0
色々と信用ゼロなので様子見です
2021/01/22(金) 22:06:30.38ID:alTQhRVad
stackoverflowがなければ初日でWPF投げてたと思う
2021/01/22(金) 22:25:31.06ID:1SSc6UOJ0
>>213
サンクスコ
知らなかった
「やっと」そんなのが出るのか、待ってたぜ
XAMLじゃなくてもC#コードビハインドだけでもUI描けるようだな
(WPFでも出来るけどな)

WPF使ってるけど、バインディングが本当にクソだわ
今までいろんなプログラミングしてきたけど、
ここまで行き詰まったことはなかった
今回こそは俺が非力ってことは認めるわ

それにしても、UWPが完全にスルーされてるのが笑えるw
217デフォルトの名無しさん (ワッチョイ 8701-V1vN)
垢版 |
2021/01/22(金) 23:18:39.28ID:OGZfgpwn0
どうせ流行らずに勉強しても無駄になるんだろ!騙されないぞ!
2021/01/22(金) 23:44:20.14ID:q6hHO30kr
>>216
理想を追い求めて
糞になったパターンだね。

wpfは普通にMVVMでなくても書けるよ。
大半のライブラリーはMVVM使ってないしね。
WPFのメリットはいろいろ間口が広いってことだよ。
2021/01/23(土) 00:04:09.60ID:jLrLNaiV0
>>212
こいつってのは何を指すの?
2021/01/23(土) 00:19:08.32ID:Ea1gaSpb0
WinUI 3 って、WinForms と WPF を過去のものにして主流になると思う?
2021/01/23(土) 00:39:31.93ID:MyEcyelN0
>>218
MVVMってあれだけいろいろゴタゴタやって、恩恵は少ないよな(と俺は感じる)。
周りの人には受けが良くて褒められるけど、俺本人はギリギリでやってる、実は。

一つのクラスの内容を表示する時には何の問題も無い。
だが、二つのクラスの内容を表示しようとした途端に
それらをまとめるクラス作ったりせんといかんだろ?
毎回クソ面倒臭い。
あと、PropertyChangedとかNotifyとか、面倒臭い。
一応できるが俺の性に合ってない。
2021/01/23(土) 00:49:51.79ID:ic//P4AFM
>>220
今はデスクトップアプリもWebベースで作るのが主流
もはや奪うパイがないんだよ
223デフォルトの名無しさん (ワッチョイ 8701-V1vN)
垢版 |
2021/01/23(土) 01:13:07.19ID:9AM+ezO50
ってことはBlazorの時代がくるですか!?
2021/01/23(土) 01:46:14.57ID:oQsbCK+Ka
>>205
たぶん言っても無駄。
その人の目的は「他人に食って掛かる」ことなのは一目瞭然だから。
本人は自覚してないと思うけどね。

とにかく他人が言ってることを否定することだけを目的としているから
全体として何が言いたいのかさっぱり分からない。
2021/01/23(土) 08:46:17.73ID:4VL29Q1J0
>>218
> WPFのメリットはいろいろ間口が広いってことだよ。
俺はデメリットだと思ってる
同じ事をやるのに複数の方法があるために余計わかりにくくなってる気がする
2021/01/23(土) 08:48:30.10ID:4VL29Q1J0
>>224
> その人の目的は「他人に食って掛かる」ことなのは一目瞭然だから。
お前が言うなよ ⇒ >>195,203

> 本人は自覚してないと思うけどね。
ブーメラン過ぎるw
2021/01/23(土) 10:01:09.88ID:hIt2ZLZ60
>>222
electronもまだまだデスクトップを置き換えられるところまでいってないと思うが
どういう環境のことを言っている?
それともOffice365のようにデスクトップアプリの代わりにWebベースで置き換えることを言っている?
2021/01/23(土) 10:54:35.36ID:kPZ46AZtM
>>227
VSCode、Slack、Teams、Skype
もうとっくに置き換わってるよ
2021/01/23(土) 11:08:23.02ID:RBvwbRsVa
自分の製品置き換えないでユーザーにそれ使えは言えないだろ
2021/01/23(土) 11:15:07.48ID:BdQtbmnfM
ちなみにOutlookもWeb版に統一する計画だそうで
https://www.windowscentral.com/project-monarch-outlook-web-universal-email-client-microsoft?amp
2021/01/23(土) 11:15:50.54ID:0Lxv01Qk0
VSCode以外はバックエンドはクラウドだな
2021/01/23(土) 11:26:24.50ID:+GqnBbRoM
今時完全にスタンドアロンなアプリなんて絶滅危惧種でしょ
そもそもそれ言い出したらWinRTから始まりWinUI含め近年迷走を続けているWindowsのモダンUIって、
どうせ今時のネイティブアプリなんてバックエンドのWebサービスに対する薄い皮にすぎないんだからシンプルな必要最低限の機能があればいいよね、
という思想が根底にあるのだし
2021/01/23(土) 11:53:22.54ID:3u/wIwRAa
reactive extensionってまだ存命なの?
async awaitだけやっとけばいい感じ?
2021/01/23(土) 12:06:47.52ID:hIt2ZLZ60
>>228
じゃあやっぱりelectronのことを言っているのか。
デスクトップアプリをこれから開発しようという時にFormsやWPFと同列に
electronが選択肢に挙がる?

前にやったことがあるけど、クロスプラットフォームにしたいとかどうしても
使いたいjsフレームワークがあるとかの理由でもなけりゃ、面倒くさすぎて
今のままじゃわざわざ使いたいとは思わなかったが。
2021/01/23(土) 12:11:41.19ID:2Kl/0dQh0
普通にレイアウト強化したwinform2でも出してくれたら良かったのにな
webは別でやればいいのになんでくっつけようとするんだろう
2021/01/23(土) 13:18:57.65ID:LnVZ1o8ia
>>226
ね、言った通りでしょ。

こういう人、本人はまったく自覚がない。
どちらの言い分に分があるかは>>189からのやり取りを見れば一目瞭然。
2021/01/23(土) 13:38:17.35ID:A5DB0QkA0
>>234
electron選択肢に上がるけどな。
C#アプリでも、もうすぐWebView2が出るから楽しみに待ってるぞ。
なんだかんだでだんだんリッチなUIが求められるようになってるし、ブラウザコンポーネントでやるのは合理的だと思ってる。
枯れてきて安定もしてるし充分速いしな。

最近UIをブラウザで作ること多いけどなかなか便利よ。
embedIOでサーバ起こして、Process.startで開くとかやったり。
Xamarinに持ってったときも一切変更せずにAndroid側でWebView貼り付けて終わりにできたし。
2021/01/23(土) 13:58:24.89ID:4VL29Q1J0
>>236
自覚がないやつの戯言乙w
具体的な反論できないから一目瞭然とかで誤魔化すしかないのが哀れ
2021/01/23(土) 15:17:23.23ID:2XdYRaxf0
Electronって.NET Coreの自前完結みたいにちょっとしたGUIアプリでも100MBくらいになるのは避けられないの?
2021/01/23(土) 15:23:50.73ID:A5DB0QkA0
>>239
これ辛いよね。
2021/01/23(土) 15:32:23.82ID:M9OdZ2iK0
Electron用にパッチをあてたchromiumを含んでるから仕方ないね
node.js系はflockすら標準機能に無いのがもにょる
2021/01/23(土) 15:38:16.51ID:A4wCeRTc0
edgeがchromium採用しているからそれを流用することって出来ないのかね
2021/01/23(土) 15:54:08.79ID:rSxKixC+0
msの人がwebview2使ったelectronもどき作ってた記憶あるけど忘れた
2021/01/23(土) 16:18:50.61ID:XGqYtf2f0
何のスレだよここ
2021/01/23(土) 16:25:03.06ID:kfSEiVWz0
>100MB
○avaみたいにランタイム別インスコよりは1つのEXEになってた方がマシ
2021/01/23(土) 16:50:48.24ID:MyEcyelN0
>>225
そうそう、一つだけどんな場面でも使えるかっちりした方法を用意してくれればいいのに、
〇〇の場合は方法1、△△の場合は方法2、みたいに場合分けがあるから分かりにくい

>>235
大賛成
WinFormの弱点を多少改善した版が欲しい
2021/01/23(土) 16:56:04.81ID:XHKedqhC0
>>246
最近思うんだけどそういうのって恐らくわざとやってない?
いいライブラリを作りたいんじゃなくて新しい仕様を出さないと入門書も売れないよねっていう
2021/01/23(土) 17:08:24.40ID:hIt2ZLZ60
周りの部署や付き合いのある外注はみんな「ふつーWPF」って感じなんだが、
2chでだけいまだにこんなにFormsにこだわってる人を見かけるのがすごく不思議な感覚。
2021/01/23(土) 17:30:20.73ID:RC6F3sECM
>>248
WPFも十分レガシーだよ
2021/01/23(土) 17:30:28.90ID:MyEcyelN0
>>247
わざとやってるのかもね
MS社員が今年の目標として「新規に○○の機能を実装する!」とか掲げて、
クソ機能を実装して今年のノルマ達成、とかね
俺らからしたら大きなお世話なんだけどな
XAMLが絡むGUIの部分はそんな気がする

C#の言語仕様自体は良い具合に他言語の良いとこ取りしてて結構好きなんだけどな
2021/01/23(土) 17:54:40.45ID:LhKkB5Axa
MSも子供の遊びじゃないんだからそんな幼稚な動機があるはずがないw

Silverlightは別物としてもWPF, Metro UI, UWPがコケた理由は単純に人、時間、金の投入量をケチって
周到さが足りなかったからだと思うよ。

Win32を作った時ぐらい気合を入れてたらもう少しマシなものが出来てたはず。

.NETやC#にも多少そういうところがあったよね。
頑張ればC#3(VS2008)を最初のバージョンにすることも出来たんじゃないか

どうでもいいけど「スレの趣旨と違う話をするな!」って人が現れないのは
きっとその人も話題に参加してるからだろうねw
言っても無駄だと思うけどそういうご都合主義を反省して欲しいよね
2021/01/23(土) 17:58:02.93ID:LhKkB5Axa
思えば、Vistaの時にWinFSなるものがとん挫する事件があったけど
あのあたりからMSはちょっとおかしくなってる気がするね。
2021/01/23(土) 18:06:49.31ID:hIt2ZLZ60
>>249
その「レガシー」ってどういう意味で言ってるんだろうか。
今デスクトップアプリ開発するのにWPFに替わるものが他にあるということかねぇ。
上で誰かが言っていたElectronもうちの周りじゃあ1プロジェクトくらいしか採用していないが。
2021/01/23(土) 18:12:08.90ID:4VL29Q1J0
>>246,250
> 〇〇の場合は方法1、△△の場合は方法2、みたいに場合分けがあるから分かりにくい
違う、〇〇は方法1でもできるし方法2でもできる、△△は方法3と方法4でできる
って言うのがまずいって思ってる
具体的には個人的にはWPFはデータ・バインディングとコマンドでやるべきだと思うけど、WinFormからの移行のためかボタンに名前付けてコードから参照するとかコードのイベントハンドラをxamlで指定するとかもできる
できるのはいいんだけどWeb上の解説も両方が説明されてたり下手すると混在して使用されてたりしてわかりにくくなってるような気がする
2021/01/23(土) 18:46:38.00ID:NjLwKFuQ0
>>254
その割には外部フレームワークを入れないといろいろ不便なのがね..。
例えばBindableBase程度のものはMSで準備して欲しかった。
ViewModelは通常このクラスをベースにして...という基本的なスタンスだったらもっと分かりやすかったと思う。
2021/01/23(土) 19:41:56.19ID:J/sR9Yyb0
>>255
Microsoft.Toolkit.MvvmってのがWindowsCommunityToolkitの一部としてもう直ぐ出るらしい
2021/01/23(土) 20:54:43.81ID:4VL29Q1J0
>>255
ああ、それは言えるな
ハードで言うリファレンス設計を示してほしいね
2021/01/23(土) 21:19:01.64ID:88Ok/30EM
>>255
だよな。
WPF当たりから雑に作って、使いにくいのが多すぎる。Delphiの方がましかも。
2021/01/23(土) 21:26:16.24ID:XHKedqhC0
データバインディング使わないほうがうまくいくことが多いよな
2021/01/23(土) 22:15:59.95ID:4VL29Q1J0
>>259
データバインディング使わない方が簡単なのは認めるけどうまく行かないのはお前さんの能力かと…
2021/01/23(土) 22:17:01.87ID:MyEcyelN0
>>254
いや、あるでしょ
例えば、CLRプロパティと依存関係プロパティはどう?

それと、

>〇〇は方法1でもできるし方法2でもできる、△△は方法3と方法4でできる
>って言うのがまずいって思ってる

それって、
△△は方法1と方法2じゃ出来ないんだよな?
〇〇は方法3と方法4じゃ出来ないんだよな?
俺はそれがまずいと思ってる

〇〇が方法1でも方法2でも最終的に可能になるなら別に構わないんじゃないか?何が問題?
逆に、〇〇を解決しようと思って方法3で始めたが、後々になって方法1か方法2でしか出来ないことが判明した方が痛い
2021/01/23(土) 22:27:19.36ID:H8XCArTD0
asp.netでデスクトップソフト開発ってどうなんだろうか
2021/01/23(土) 22:37:04.28ID:XHKedqhC0
>>260
開始日と終了日の最大期間が3ヶ月で
開始日のデフォルト値が2000年のときの2021年1月23日〜2月10日の設定方法に付いて悩みたいのか?
2021/01/23(土) 23:15:35.62ID:J/sR9Yyb0
WinUI3というかUWPではバインディングが改良されて
コンパイル時に厳密な方チェックやってくれてバグに悩まずに済む
2021/01/23(土) 23:30:17.78ID:4VL29Q1J0
>>261
> 〇〇が方法1でも方法2でも最終的に可能になるなら別に構わないんじゃないか?何が問題?
うん、問題ないと思うならそれはそれでいいと思うよ

>>263
何を言いたいのかさっぱりわからんけど、個別の不具合の話じゃないなら説明してみて
2021/01/23(土) 23:31:10.83ID:4VL29Q1J0
>>264
そう言うのもWPFに還元して欲しいね
2021/01/24(日) 00:29:30.39ID:H0Ke+o4H0
>>265
あったまわりぃなお前
データバインディングしてる変数に間違ったデータが入るようにしちゃって大丈夫か?

開始日と終了日に2000年1月1日が入ってるときに
開始日に2021年を入力したとき最大期間に反応してエラー出すだろ?
ここでエラーを出さなかったらバインドしてるGUIがおかしくなる
したらどうやって開始日と終了日に2021年を設定するんだよ
2021/01/24(日) 02:30:17.53ID:W8Ofgakl0
>>267
InotifyDataErrorInfoなどを使う場合、実装方法にもよるけど、間違った値や無効な値を保持する設計もおかしくないと思う。保持はするがエラーが発生しているという状態で、そのエラー内容を素直にViewが表示する設計。
逆にViewModelには正しい値しか保持しないとした場合、一時的にViewとViewModelで不整合が生じている状態になりますが、皆さんどのようにされてますか?
2021/01/24(日) 08:01:29.17ID:H0Ke+o4H0
>>268
それはバインドやめるって言ってるよね
GUIはそんなもん表現できないし
エラー値が入ってくるならそもそもバインドって仕組み使わないほうが楽だよね
2021/01/24(日) 08:34:20.11ID:G9QcBvFS0
>>267
想像以上にレベルが低かったw
なんでvalidateの仕組みがないと思った?
https://docs.microsoft.com/ja-jp/archive/msdn-magazine/2010/june/msdn-magazine-input-validation-enforcing-complex-business-data-rules-with-wpf
まあ、validateは色々なやり方あるし相互依存とかむっちゃ面倒になったりするからWPFも結構難しくて>>267あたりだと理解できないかもな
2021/01/24(日) 08:39:49.42ID:H0Ke+o4H0
>>270
エアプ乙
2021/01/24(日) 08:58:35.15ID:OUhuYnVtM
>>268
自前でエラー内容を保持するしかないように思う
http://sourcechord.はてなブログ.com/entry/2014/06/08/123738
個人的にはViewModelに不正な値を入れるのは気持ち悪い

>>269,271
そろそろ黙った方がいいと思うよ
顔真っ赤すぎだろw
2021/01/24(日) 09:06:53.70ID:H0Ke+o4H0
データバインディング使うのやめろやw
2021/01/24(日) 09:20:23.60ID:EJajcfhwd
わざと新しい難解な方法を作ってるって発想はすげえな。
新しい方法使ってみたらわかるけど、なるほど、一部の課題は解決したな、みたいな感じになるだろうに。
2021/01/24(日) 09:22:49.58ID:EJajcfhwd
ViewModelはModelではないんだから、別にエラーが入ろうが何でも良いだろ。
ViewModelからModelにするときにまとめてValidationしてるけど。
そうじゃないとそれこそ依存項目のチェックが出来んじゃん。

ViewModelとしてModelを使おうとするから変な話になるんじゃないの?
2021/01/24(日) 09:33:19.71ID:H0Ke+o4H0
>>274
でもさ1つの値でうまくいってても他と絡みだすとそれじゃうまくいかんのよ
開始日と終了日は一例ね
ベース値と複数の差分値で表現してるものもうまく行かない
将来的になにかの値と関連する可能性があるならこの仕組みは入れないほうがいいかも?

データバインドっていう複数の値が連動するときにこそ役に立つ仕組みと思いきや実は鬼門とかいうおマヌケなお話(笑)
2021/01/24(日) 11:17:06.24ID:9PCPJHwQ0
>>276
終了日のMaximunとMinimumバインドすりゃいいだけじゃね
開始日設定したらそこで変更すりゃ良い
2021/01/24(日) 11:20:17.45ID:+fPfkl180
>データバインディングしてる変数に間違ったデータが入るようにしちゃって大丈夫か?
大丈夫だろ
ビューモデルはあくまでビューの状態を表すんだから、ビュー(UI)の方で一時的に開始日と終了日が
ずれてもOKで別途最終確定ボタンみたいなUIを作るなら、
開始日と終了日の関係がずれた値(状態)になってもそれは

ビューモデル的には正しい値だぞ
モデル的には間違った値だけど

ちゃんと区別しよう
279デフォルトの名無しさん (ワッチョイ 275f-rvE3)
垢版 |
2021/01/24(日) 11:25:48.71ID:wSlEv8S70
>>251
>WPF, Metro UI, UWPがコケた理由は単純に人、時間、金の投入量をケチって周到さが足りなかったからだと思うよ

いや
センスが無いだけだよ
どれだけリソース有っても創れない
あいつらの限界
2021/01/24(日) 11:33:52.77ID:+fPfkl180
ビューモデルはあくまでビューの状態を表すように設計するんだぞ

最終的なモデルの状態に不整合があったらまずいが、

ビューモデルはあくまでもビューの状態を表すんだから、一時的に不整合を許すUIを
設計するなら、ビューモデルもそういう状態になるだけだし
ビューモデルからしたら別に間違った状態じゃない

だから、
>逆にViewModelには正しい値しか保持しないとした場合、一時的にViewとViewModelで不整合が生じている状態になりますが、皆さんどのようにされてますか?
とか、前提がおかしいやろ。ビューの状態を表すようにViewModelつくるのに不整合を生じるようにつくるとか意味がわからん
2021/01/24(日) 11:47:47.30ID:H0Ke+o4H0
>>278
それデータバインドいらないよねって言ってるよね?
2021/01/24(日) 12:13:40.42ID:+fPfkl180
ビューモデルに他にもテストしやすいとか利点あるだろ?
つか、数学じゃないから誰がもが納得する100%の
答えなんてないから君がそう思うならそう思えばいいと思う
2021/01/24(日) 12:18:43.65ID:H0Ke+o4H0
データバインド捨てちゃえよ
楽になるぞw
284デフォルトの名無しさん (ワッチョイ 7fbb-NoAX)
垢版 |
2021/01/24(日) 12:28:41.42ID:Mt48K89t0
MVVMがどうのって、今話題のMVUの話題絡みで出てきたのかと思いきや・・・・・なんも関係なかったぜ
2021/01/24(日) 13:48:48.78ID:3jwmj/rb0
>>276
うまく行かないか?
全部の値でやればいいだろ。
終了日と開始日、どっちにエラーメッセージ出す気なんだ?
俺は両方だと思ってるが。

>>281
要るだろ。
試験するときにUI生成しなくてもモックModelとのUnitTest通せるし楽じゃん。
2021/01/24(日) 14:24:10.62ID:H0Ke+o4H0
>>285
そうやってエアプでできるできる言いたいなら言ってろ
2021/01/24(日) 14:40:58.72ID:3jwmj/rb0
>>286
エアプというか…普段使ってるから自信を持って出来ると言えるんだけど。
別にWPFだけではなくて、他のプラットフォームでもViewModel使ってるぞ。
自分に出来ないからといって、みんな出来ないのに出来るってフカしてると思い込むのは良くないんじゃないか?
複数の値が連動するときにこそ役立ってると思うんだが。違うのか?
鬼門だと一切思わん。
将来的に何か他の値と関連する可能性があるなら尚更じゃん。

なんでViewModelでエラーを表示してる状態が不整合なのか俺には全然わからん。
2021/01/24(日) 14:50:18.37ID:H0Ke+o4H0
>>287
じゃあ、>>263>>267をどうやって実装してんの?

開始日と終了日なんて普通にアプリ組んでて出てこないわけないよね?
やったことあるんでしょ?
2021/01/24(日) 15:02:34.21ID:3jwmj/rb0
>>288
普通に入力可能にして、エラーメッセージの表示条件が、開始日>終了日であること。
保存チェックはエラーメッセージが一切表示されていない事。Modelには一切波及せずViewModelで完結する。
仮保存のみOK。仮保存はViewModelのうちシリアライズしてはいけない項目を殺して保存。

入力中に一時的に入れ替わるなんてよくある事なんだから、いちいち選択不可にしてたらユーザビリティ悪すぎでしょ。
開始日がデフォルトで今日〜空白の時に、一昨日から昨日までの値を入れるのに、いちいち開始日から入力させんの?アホらしいじゃん。
入れ替わった時点でエラーメッセージに「開始日と終了日が入れ替わっています」と出しておけば一発でしょ。ついでに保存ボタンのEnabledも変えとくと親切だな。

エラーメッセージも、保存ボタンのEnabledも、両方ともプロパティにバインドしとけば、値を変えるだけで制御も変わる。便利よね。
2021/01/24(日) 15:03:44.94ID:3jwmj/rb0
まさか今どきエラー項目をダイアログ表示するとかいう発想じゃ無いだろうな…。
2021/01/24(日) 15:04:38.53ID:F+2F2LGq0
>>289
それがVMの役割だよなぁ
VMはViewの値をバインドしてるんだから、どんな値だろうと関係ない。
VMにバインドされた値が範囲外なら赤枠などで注意を促し、保存ボタンを押せなくする。
モデルに渡すときに仕様の範囲内であればいい
2021/01/24(日) 15:05:11.26ID:H0Ke+o4H0
え?できたん?
ちょっとよくわからなかったけど
2021/01/24(日) 15:06:12.10ID:3jwmj/rb0
>>291
まさにそう。
ボタン一発でデフォルト日にしたい、なんて要件が生まれたら、Commandをバインド。
わかりやすいと思うよ、俺は。
2021/01/24(日) 15:07:13.99ID:3jwmj/rb0
>>292
何がわからんかった?
2021/01/24(日) 15:08:16.18ID:H0Ke+o4H0
>>294
え?値が範囲外で保存できちゃう?
2021/01/24(日) 15:09:00.14ID:3jwmj/rb0
>>295
保存ボタンがDisabledなので保存のしようがないだろ。
2021/01/24(日) 15:09:38.35ID:3jwmj/rb0
それでもできる仮保存は、ViewModelの保存であって実データではない。画面保存。
2021/01/24(日) 15:10:40.00ID:H0Ke+o4H0
>>296
チェックしなくしたん?
開始日と終了日の個別のバリデーションはあったら動くん?
2021/01/24(日) 15:11:59.27ID:H0Ke+o4H0
>>297
え?それもうデータバインドいらねーじゃんw
まあ、でも俺はその結論で満足だぜw
2021/01/24(日) 15:12:28.56ID:3jwmj/rb0
>>298
チェックしてるじゃん。
プロパティが変わるたびにチェックされるよ。
された結果エラーメッセージが確定して、エラーメッセージが確定したら保存ボタンのEnabledが確定するでしょ。
個別のバリデーションは好きにやれば良い。同様にエラーメッセージを吐いとけば、エラーが一つでもあれば保存ボタンがDisabledになるんだから問題無い。
2021/01/24(日) 15:13:36.69ID:3jwmj/rb0
>>299
要るじゃん。UIコード一切触らなくても、バリデーション増やせばエラーメッセージを増やせるんだぞ。
そしてテストはViewModelで完結する。
2021/01/24(日) 15:15:55.11ID:3jwmj/rb0
データバインドできるから、画面保存が、不要な項目を殺す程度の実質ただのシリアライズで実現できるんだけどな。
2021/01/24(日) 15:17:35.09ID:H0Ke+o4H0
開始日、終了日ダイアログボックス表示してOKボタンで値を保存するんです?
2021/01/24(日) 15:20:53.63ID:3jwmj/rb0
>>303
開始日の横、終了日の横に、エラーメッセージを表示するラベルを置いてバインディング、
必要ならエラー項目は赤地なんかにしてもいい。
HasErrorもあるし、IDataErrorInfoもあるだろ。
好きなクラス作っても構わん。
2021/01/24(日) 15:23:17.99ID:H0Ke+o4H0
保存とチェックはOKボタン?
2021/01/24(日) 15:24:54.20ID:H0Ke+o4H0
UNDO UNDO REDO REDO OK?
2021/01/24(日) 15:27:25.67ID:3jwmj/rb0
チェックは自動。PropertyChanged使ってもいいし、ReactivePropertyでも良い。
保存は保存ボタン。
Undo、RedoはViewModel保存してれば良いじゃん。
2021/01/24(日) 15:28:32.34ID:H0Ke+o4H0
キャンセルボタンで開始日終了日ダイアログ表示前の値だろ当然
2021/01/24(日) 15:31:18.19ID:3jwmj/rb0
>>308
ダイアログなんか出さねえよ。
間違えたらCtrl+Zで良いじゃん。
入れてる途中の数字を無理矢理戻されて気持ちいいわけ無いじゃん。
2021/01/24(日) 15:32:19.23ID:3jwmj/rb0
何?202/01/02って打ったらダイアログ出てきて2020/12/31にゴリ押しで戻されるようなのが良いの?
明らかに1だけ入れたほうが楽じゃん。
2021/01/24(日) 15:32:58.24ID:H0Ke+o4H0
え?範囲チェックいつするの?
2021/01/24(日) 15:33:11.21ID:3jwmj/rb0
>>311
いつでもしてる。
2021/01/24(日) 15:34:40.08ID:H0Ke+o4H0
じゃあ、エラーでたままを許容するんだ?
2021/01/24(日) 15:35:20.11ID:3jwmj/rb0
ViewModel使ってないから、プロパティ変更時にチェックかけるって発想が無いんだろうか。
ボタンクリック時に、if(xxx.Value)...ってひたすら列挙してんのかな。
2021/01/24(日) 15:35:48.04ID:H0Ke+o4H0
その間、GUIのグラフにはどう出しておけばいい?
2021/01/24(日) 15:37:14.85ID:3jwmj/rb0
>>313
ViewModelが「エラーを表示している」ってのは正常系。
Modelの開始日終了日は一時的にも逆転することは無い。
なぜならViewModelが「エラーを表示している」状態からは、Modelは生成されない。

Modelにエラー出たままは許容しない。
ViewModelにエラーが出てるのは正常系。許容も何もない。
2021/01/24(日) 15:38:28.95ID:3jwmj/rb0
>>315
そのレンジのグラフを表示するなら「描画できません」一択だろ。
業務アプリなら、画面入力しようとしたら一旦グラフ消すだろうし。
そうしないと、入力中のスクショ送られてきて混乱することになるぞ。
2021/01/24(日) 15:40:59.68ID:3jwmj/rb0
入力がおちつくまでグラフを描画しない、をやりたければReactivePropertyの方が楽だな。
2021/01/24(日) 15:47:17.96ID:H0Ke+o4H0
>>317
えー、死ぬ
たったこれだけのためにそれ用の処理用意すんの?w
2021/01/24(日) 15:52:16.29ID:3jwmj/rb0
>>319
バインディングしてれば、グラフと「描画できません」って書いたラベルの2つのVisibleをひっくり返すだけで良かろう。
なんの処理も無い。むしろ楽になる。
2021/01/24(日) 16:05:06.18ID:3jwmj/rb0
一応言っとくが、びっくり返すのも直接Visibleを変えるんじゃなくて、Visibleにエラーが有るか無いかから算出されるプロパティをバインディングすれば良いからな。
2021/01/24(日) 16:11:45.64ID:H0Ke+o4H0
データバインド使うためだけに余波が物凄くね?
開始日と終了日のエラーを許容してる間って他の値を変えたときはそっちは保存するの?
2021/01/24(日) 16:18:07.86ID:3jwmj/rb0
ViewModel使う事によって余波が減ってると思うが。

他の値は他の値でバリデーションかけたら良いだろ。
保存されるも何も、Modelとしてされないよ。一部がおかしいデータは全体として必ずおかしいだろ。
ViewModelとしては一時保存したければするかもしれんが、Modelにはならん。
その別のデータとやらが開始日と終了日に挟まれているべき日付、なんかだったらそもそもの定義が揺らいでくるじゃん。
全部Leaveするときにチェックするの?コントロール順とか、入力バリデーションに引っかかる順番ごとにテストする?組み合わせ爆発するし、ダイアログが出るかどうかなんてテスト、自動化しづらくて仕方ないじゃん。

明らかに、ViewModelとして帳尻が合ってるかをチェックする方が確実だし効率的でしょ。

だから許容も何もない。
2021/01/24(日) 16:46:04.32ID:H0Ke+o4H0
いや、UNDOどうなん?
本格的にエラー値を保存しちゃうの?
2021/01/24(日) 16:53:34.11ID:3jwmj/rb0
エラー値をViewModelとして表示するし、一時保存もするだろう。
Modelは保存しない(できない)から問題無い。
エラーも含めてUndo、Redoできて何かおかしいか?

未入力   2020/12/31
2021/01/02 2020/12/31
2021/01/02 2021/02/21
全部Undoすれば良いじゃん。
俺がよく使うのは、Undoはコントロールレベルに留めて、「入力破棄」とか「再読込」ってボタンを用意する事だけど。
変更はViewModelに留まってるから、普通に破棄してModelから再読み込みしてViewModel再構成したら終わる。

開始日終了日は確定してないけど一部だけ変更されたデータなんかを保存するつもりなの?
2021/01/24(日) 17:00:54.66ID:3jwmj/rb0
ViewModelにエラーを表示している状態を保存してなんの問題があるんだろう。
実データとは全く関係ないデータなんだが。
そのあと修正して確定させないとModelに落ちないなら問題なくね?
いっつもそうして「仮保存」やってるんだけど。
番号取っとかないとダメとかはまた別のやり方するけどさ。
2021/01/24(日) 17:51:29.07ID:VCT3oYN70
twitterでやれ
2021/01/24(日) 17:55:17.05ID:H0Ke+o4H0
この間別の正しい値はmodelまで保存できるの?
開始日と終了日に関わるすべての値が保存対象でなくなる?
2021/01/24(日) 18:03:41.68ID:zEWhRUHAa
何を争ってるのかいまいちよく分からないけどずいぶん盛り上がってるね。

さすがに誰かタオル投げた方がいいレベルのような気がするけど
こういう時はなぜかだんまりなのねw
2021/01/24(日) 18:06:22.86ID:RuSK0e8mM
続きはこっちでどうぞ

WPF(.NET4.x, .NET Core) GUIプログラミング Part24
https://mevius.5ch.net/test/read.cgi/tech/1575862574/
2021/01/24(日) 18:18:42.23ID:H0Ke+o4H0
>>329
実はみんな開始日終了日のデータバインドの解決方法が知りたかったけど
エラー値許容でがっかり回答だったと思う
エラー値許容は他の箇所での対処に追われるからできればやりたくないだろ
2021/01/24(日) 18:19:27.82ID:3jwmj/rb0
>>328
一つのModelに開始日終了日とその別の値が入ってるなら保存するべきじゃないし、保存しないと思うぞ。
開始日終了日に関わるんじゃなくて、その画面上に表示されてるデータが確定できるデータじゃないでしょ。
正しい値でもなんでもない。

あのさあ。結局データバインディング使ってどう解決したら良いか知らないから、データバインディング使わないほうがお前の場合良いって事にしかならんでしょ。
エアプそのものじゃん。
2021/01/24(日) 18:20:37.83ID:3jwmj/rb0
>>331
そのエラー値のデータは、確定されない、永続化されないから対応に追われることは無いよ。
だからViewModelに閉じ込めるんであって。
ViewModelとModelを区別できて無いじゃん。
何聞いてんの?
2021/01/24(日) 18:23:05.74ID:3jwmj/rb0
がっかり回答どころかがっかり理解力だわ。
俺が間違ってるなら指摘してくれ。
2021/01/24(日) 18:25:54.36ID:H0Ke+o4H0
いや、だったらデータバインドいらねーじゃん
だってそれ普通にダイアログ出してOKボタンでチェック&保存してんのと変わらんもん

なんかいい方法を知ってる神が舞い降りるのをみんな待っているのさ(笑)

俺はデータバインド使うのやめたけどw
2021/01/24(日) 18:38:06.15ID:3jwmj/rb0
>>335
UI層変わったらどうすんの?
WPFからUWPやXamarinなんかに移植するとき、全部コントロール貼り直して、コントロールへの値のSet,Get全部やり変えて、全部テストすんの?
新しいUIフレームワーク出たら?

アホでしょ、常識的に考えて。
2021/01/24(日) 18:39:44.53ID:3jwmj/rb0
テストするときにモックのUI差し替えて自動テスト出来るんだけど。

最終的には結合試験するだろうけど、その前の段階でも画面ポチポチしながら決定表みてテストしてくの?

工数の無駄遣いでしょ。
2021/01/24(日) 18:45:29.80ID:QhWu03/T0
元はデータバインディング使うと上手く行かないことがあるって話だったのにすり替わっているな
2021/01/24(日) 18:47:17.74ID:H0Ke+o4H0
>>338
うまくいってねぇじゃん
2021/01/24(日) 18:50:14.09ID:Ok705ENM0
NGでスッキリ
2021/01/24(日) 18:50:33.38ID:g03tv9KOM
横からだけど
いままでMVVMの意義が理解できてなかったのがID:3jwmj/rb0の説明で開眼したかもしれない

WPFスレで聞くべきかもしれないけど、
View=ViewModelの保持値を表示する&入力値が変わったりボタンが押されたらViewModelの当該プロパティやメソッドを呼び出すだけの存在
 (決してビジネスロジックやバリデーションをView自体に持たせてはいけない)
ViewModel=画面上のいろんなTextBoxやLabelのTextだったりButtonのEnabledだったりを一元的に保持することだけを担う存在
 (エラー入力値なんかもあるがままに保持すべきであり、
  ViewModelでバリデーションチェックを行ったうえでバリデーションNGとかの結果もエラー表示項目の値としてセットすべきである)
Model:極論してしまえばView/ViewModel以外のビジネスロジック的な処理すべて
(UIに依存しない処理は全部Modelで書く)
っていう理解でおおむねあってる?

なんとなくだけど、上記の考え方なのだとしたら
そもそも ID:H0Ke+o4H0 の人はMVVMでなかったとしてもMVVMでいうModelとそれ以外の処理もごちゃ混ぜで書いてそうな印象
2021/01/24(日) 18:59:46.81ID:H0Ke+o4H0
>>341
開始日と終了日エラーでたままじゃグラフの表示範囲も決まらんかもしれんのによくやるわ

ビジネスロジック入れないでグラフの表示範囲計算できると思ってるのかよ
夢見んな
んでエラー値許容のまま放置できちゃったらエラー箇所ユーザにわかるのかよ的な
visualstudioだって一発ビルドしないとエラー箇所わからん

ボクはうまくいってないと思います
2021/01/24(日) 19:01:12.31ID:zEWhRUHAa
やっぱり何の話をしてるのかよく分からんけど
UI上の値がモデルに今反映されているのかどうかはっきりしないUIはイラッとくるね。

UI上の値がモデルに反映されていない状態を許すなら>>335が言ってるように
ダイアログ出してくれる方がフレンドリーだと思う。

許さないならUI上の値も常に不整合を許すべきではないと思う。
数直線上の閉区間(a≦x≦b)を入力するUIがあったとして、
ユーザーによるaの入力が確定した時a>bになっちゃってたらb = aに変わるべき。
2021/01/24(日) 19:05:57.47ID:1wsdfsyQ0
WinFormsのコントロールは内部状態を抱え込んでたんでテストが面倒くさかったのを
VMで外出しにした、というくらいに理解しておけばいいと思う。

バインデングいらないの人はFormsじゃあどうしてたんだろうか。
2021/01/24(日) 19:09:39.64ID:g03tv9KOM
??
グラフ表示に必要な項目が入力エラーなら「日付が間違ってるのでグラフが表示できません」ってテキストで表示するだけだと思うんだけど

ていうか>>342のいう「グラフ作成」がbmpみたいな画像生成を指すのであれば
その処理はたぶんModelで持つのが正しい気がするし、
View/Modelが密接不可分に結合するような処理であれば
わざわざViewとModelの分離を意図してる(で合ってるよね?)MVVMにしないほうがいいのは当たり前の話だと思う
2021/01/24(日) 19:57:04.13ID:3jwmj/rb0
>>341
値にしなくてもプロパティとして表現すると読み書きの方向がはっきりするし良いよ。特にEnabledとかは。

>>342
表示範囲が決まってないのに、グラフが表示できるわけないんだから、「現在描画できません」って表示するのは正でしょ。
ビジネスロジックに通したとしても、それをModelとして保存するかどうかは別問題。

エラー値許容って考え方がおかしい。
エラー箇所がわかるようにバインドするのであって、
各変数がバインドできてるかはモックViewModelを使ったUIテスト、
各種バリデーションがきちんと発生するからモックUIを使ったViewModelテストで、疎に担保するべきもの。
コンパイルエラーとかそういう次元ではなくてUnitTestぐらい通すだろ、普通。
責任範囲がまぜこぜじゃん。

>>343
業務アプリで、画面表示中の項目と、入力項目が不一致になるのは禁忌に近いんじゃないかな。
スクリーンショットからトラブルシュートするのがほぼ不能になる。

>>345
そのグラフ作成、Modelではなくて、切り出しておくべきでは?
結局のところ、一定範囲のデータを与えられて、グラフを描画するって関数なりコントロールになって然るべきだと思うよ。
内部的にbmpを生成しようが、画面に描画する以上。
そうしといたら、グラフコントロールを差し替えたい時に気楽に差し替えられる。
2021/01/24(日) 20:50:20.30ID:ELcioWmtM
>>338
だって出来ない理由がvalidateなんだもん
そりゃ本人の能力だよねってなるわw
2021/01/24(日) 20:57:17.36ID:nmX/+8uTM
>>346にある「プロパティ」って他言語でいうComputed Property(ごめんC#で何て言うか分からない)のことでいいのかな
であれば(and>>344の理解で良いなら)MVVM完全に理解した
ただしく適用すればソースコードの見通しがめちゃくちゃよくなるだろうと思いました
といっても普段の開発がWinFormsかASPNETCoreばっかりなんで活かせる機会なんて来ないんだけどさ

グラフ作成はViewやViewModelに押し込むくらいならModelに置いてくれと思ったけど
別に切り出せるならそのほうがもっと良いのはごもっともです
層分けって大事だよねー・・・と普段メンテしてるようなソースを思い起こしながらため息をついてみたり
2021/01/24(日) 21:15:16.63ID:Ok705ENM0
>>348
C#でプロパティって言えば迷うはずないだろ
2021/01/24(日) 21:27:56.19ID:nmX/+8uTM
プロパティと聞いて「自動プロパティ」のほうがまっさきに思い浮かんじゃって
「自動プロパティじゃないほうのプロパティ」の呼び方が分からなかったんだけど・・・
何て呼ぶのが一般的なのかな
2021/01/24(日) 22:00:13.52ID:W8Ofgakl0
>>341
あってます。
ViewModelは具体的なUIを持たないViewだと思えば良いです。
なのでVisible等のViewに関するロジックはここが持ちます。

ViewはViewModelをそのまま具体的なUIで表現するだけです。
2021/01/24(日) 22:02:48.96ID:3jwmj/rb0
プロパティ、そりゃどれもプロパティだな、言葉足らず申し訳ない。
Computed Propertyググった。
そう、これの事。値を持たず他のプロパティの内容から算出されるプロパティ。
2021/01/25(月) 08:56:15.41ID:Qq8daOwnM
いい加減こっち行こうか

MVVMについて語ろう
https://mevius.5ch.net/test/read.cgi/tech/1338948213/
2021/01/25(月) 12:28:32.14ID:8A1Q9MV4d
ちゃんとスレあるんだな。
すまなんだ。
2021/01/25(月) 12:49:25.57ID:5TPK3+z7r
いえいえ
2021/01/25(月) 20:38:53.42ID:FWpwiUbb0
プログラマできちんと反省できる人はレア。
2021/01/26(火) 08:08:46.68ID:z9KCwqI+M
プログラマが反省してたら精神がもちません
2021/01/28(木) 12:09:38.85ID:ud5nmCvYM
Enumerable.OrderBy メソッドを呼び出す際に、
引数に送るデリゲート(Func<TSource,TKey>)を動的に指定したい。

具体的には、
List<Person> people = new List<Person>(basePeople.orderby(person => person.名前))
といった並べ替え処理を、Personクラスの各プロパティについて行いたい。
(年齢、整理番号、生年月日など)

現在はそれぞれのプロパティ(20以上)について上記メソッドを作成して
やりたいことは実現していますが、全くスマートじゃないです。

propertyinfoクラスを使って何かできないかと思ったんですが、
デリゲートの中に組み込むような使い方が全く思いつきませんでした。

どなたか分かる方教えて下さい。
2021/01/28(木) 12:59:34.80ID:ow1EdAwiM
Syatem.Linq.Dynamic
2021/01/28(木) 13:42:24.38ID:lJ0XEYQza
>>358
ひょっとして問題を誤解してるかもしれんけど、
OrderByのセレクターは使わずにIComparerで渡す
オブジェクトの方に実質的なセレクターの機能も兼任させれば
できるんじゃないの?
2021/01/28(木) 14:34:48.20ID:Em7sfuQzM
>>360
詳しくお願いします
2021/01/28(木) 14:49:10.30ID:5GS4w4/Ua
System.Linq.Dynamic
363デフォルトの名無しさん (オッペケ Sr7b-bv8J)
垢版 |
2021/01/28(木) 15:13:49.91ID:VSUe7hwUr
同一PC上でのアプリ同士の連動のさせかたを教えてください

フォームアプリケーションA.Bを作り、
Aが単独でも動くメインアプリ、Bは拡張機能付きリモコン、という風にしたいんですが、
Aのサブフォームではなく、別のexeファイルからBを起動したいです
そのうえで、同時起動中にBを操作することでAのtextboxを変更したり、Aを動かすためのメソッドをBのソースに書いてボタンイベントで呼び出し、等できると最高なんですが、
これはそもそも可能なことなのか、検索ワードすらわからず詰まってます
可能であればできるだけシンプルな方法を教えてください、
現在、C#、windowsformでAの途中まで制作中です
2021/01/28(木) 15:14:46.55ID:r2+Y9V1O0
つ UIAutomation
2021/01/28(木) 15:26:15.90ID:7g2F6RGP0
>>363
IPCっていうやつ使えばいいよ
WCFという似たようなやつは有るけど、そっちはMSが見捨てた
2021/01/28(木) 16:28:24.36ID:VSUe7hwUr
ありがとう、検索して試してみます!
2021/01/28(木) 16:33:51.84ID:lJ0XEYQza
>>361
こんなのとか。
ただの思い付きなので動作するか確認してないし欲しいものと違ったらごめんね。

class DynamicComparer<T>:IComparer<T>
{
  public string PropertyToCompare { get; set; }

  public DynamicComparer(string propertyToCompare)
  {
    this.PropertyToCompare = propertyToCompare;
  }

  int IComparer<T>.Compare(T x, T y)
  {
    var t = typeof(T);
    var p = t.GetProperty(PropertyToCompare, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
    var xp = p.GetValue(x);
    var yp = p.GetValue(y);
    return System.Collections.Comparer.Default.Compare(xp, yp);
  }
}
2021/01/28(木) 21:47:36.42ID:SNcV832D0
何回も上がっているけどSystem.Linq.Dynamicを使いなよ
2021/01/29(金) 00:11:56.19ID:SOOUWe4N0
System.Linq.Dynamic使うとどんな風に書けるの
2021/01/29(金) 00:14:38.17ID:hhAzUQXda
var list = customers
.Where("Name.Contains(@0)","ZZZ Projects")
.ToList();
2021/01/29(金) 13:25:03.45ID:Hs1mJoLC0
>>363
SendMessage PostMessageは
2021/01/29(金) 16:32:59.15ID:5pIDnM+SF
pipe
socket
2021/01/29(金) 19:24:38.38ID:IAlTEreC0
COM公開して操作とかできんか?
2021/01/30(土) 10:31:51.17ID:U3K72huj0
gRPC使ってプロセス間通信でよくね?
2021/01/30(土) 10:32:40.83ID:pteiWSPF0
もう何もかもなくなってしまったのか
2021/01/31(日) 09:44:26.84ID:RldRqHno0
入門書には、クラスの設定系のメンバーは、公開する必要が無ければprivateにせよ、
みたいなことがよく書かれています。

ですが、例えば自作クラス ClassA, ClassBがあるとして、
ClassA
{
 public int IntVal { get; private set; }
 public ClassB BVal { get; private set; }
}

IntValはいいとして、BValに関しては、getプロパティでBValへの参照を取得できてしまいます。
その参照を通してBValにある設定メソッドを呼べば、BValの内容を外部から変更し放題です。

これを防ぐ方法として
1. ClassBを不変にする(ClassB内には、コンストラクタ以外に設定方法を用意しない)
2. ClassBのクローンを返す
3. ClassB内の取得系メソッドのみを集めたインターフェースを返す
4. ClassBを値型(構造体)にする
一応、以上のようなことを思いつくのですが、ここで質問です。

この問題(メンバがクラス型の場合に、セッターを単にprivateにしてもカプセル化できない)について、
皆さんはどう対処してますか?

単に「カプセル化したければこんなテクニックもあるよ」というのを紹介してほしいのではありません。
皆さんが(使い捨てでない)プログラムを書く際に、実際に、どういう考え方で、どう対処しているのか、
あるいは特に対処していないのか、を知りたいです。

よろしくお願いします。
2021/01/31(日) 09:50:34.81ID:RldRqHno0
ちなみに、お前自身はどう対処するんだ?と聞かれるかもしれませんが、
C#の経験が乏しいこともあって、どうすればいいのか正直よくわからないです。
(だからみんなのやり方を参考にしたい)

C++なら、公開したい相手だけをfriendにするとか、constなポインタを返すとかするのですが。
2021/01/31(日) 09:55:53.85ID:wMusnPrAM
ClassBについても設定系のメンバがprivateになってれば何も問題ない
むしろprivateでないsetterがClassBにあるなら必要があって公開してるはず
2021/01/31(日) 10:14:39.41ID:8OVECKvh0
そもそもpublicじゃん
2021/01/31(日) 10:29:08.15ID:RldRqHno0
例えばint型は自由に値を設定できます(その必要があります)が、
ClassAにとっては、int型の内部データであるIntValを、ClassAの外から
変更されたくない(値の参照はしたい)ため、setのみをprivateにしています。

同様のことをClassBでもやりたいと考えているのですが・・・。
そもそもそういう考え方自体がおかしいのかな?
2021/01/31(日) 10:43:24.54ID:Xb450EhAa
とりあえずイミュータブルにしとけばいいよ
どうしてもイミュータブルではいけない理由が出来たときにどうするか悩めばいい
2021/01/31(日) 10:57:10.85ID:8OVECKvh0
>>380
まず前提だけど
publicやprivateで改修時の設計を制限しようと思ってるの?
正直、こんなもんお飾りだし
いざ自分がやりたい機能の邪魔になったら問答無用でpublicにする
俺だったら

まあちょっとしたメモアピールぐらいに思っておけばいいんじゃない?

会社として公開するライブラリやdllのクラスだったらそもそもクラスを丸ごと渡すような仕組みにしちゃ駄目だろ
やるにしてもアクセス用のクラス挟んでって長ったらしい設計になることは致し方ない
2021/01/31(日) 10:59:20.78ID:RldRqHno0
イミュータブルというのは、>>376の方法1のことですよね?

たしかに、.Netに標準で用意されているクラスの多くは、インスタンスを一度作成したら、
内容を変更できないようになっている気がします

内容の一部を変更したいとき(例えばFontのサイズだけを変更したいとか)は面倒ですが・・・
2021/01/31(日) 11:07:26.15ID:RldRqHno0
>>382
たしかに、あくまでメモ程度に考えて、気にしなければいいのかもしれません

以前、C++で、引数をポインタで渡す際、引数の中身を関数内で変更されたくないので
引数をconstポインタ型にしてたのに、関数の中でconstをキャストで外すように関数内を
書き換えられてしまっていたことがあります

気にしたらきりがないですね
2021/01/31(日) 11:14:00.48ID:Xb450EhAa
>>383
1のことでいいよ

イミュータブルの内容を少し変えたオブジェクトがほしいけどコード書くのめんどくさい問題は昔からあった
昔は言語サポートがなかったのでコード生成で対処していた
新しいC#ではwith構文が追加されたのでこの問題は解決済み
2021/01/31(日) 11:25:38.47ID:RldRqHno0
ありがとうございます
With構文というのは知りませんでした
2021/01/31(日) 12:05:56.26ID:+uTrKl1S0
with式の前にその前提となってるレコード型を調べるといい
2021/01/31(日) 13:37:12.02ID:RldRqHno0
レコード型とwithについてざっとですがWebで調べてみました。
これらの機能を実際に使うかどうかはともかくとして、イミュータブルにすべきという
指針が得られたのはとても参考になりました。
ありがとうございました。
2021/01/31(日) 14:24:54.16ID:pXICYBtJ0
俺はコードの仕組みまでいじってやるほどの問題ではないと思う
ちょっとした仕様の変更でprivateをpublicにしなければならないときクソ邪魔過ぎて作ったやつ呪うレベル
2021/01/31(日) 15:52:52.73ID:QuI6Fit80
C#で作ったアプリケーションをVS2019でビルドしました。

実行ファイルが作成されたbin>releaseのフォルダに、実行ファイルがあると正常に実行できるのですが、
他のフォルダにコピーすると実行できない(ダブルクリックしても反応しない)
状態です。

なぜなんでしょう?
2021/01/31(日) 15:55:01.39ID:AZLe64Sd0
releaseフォルダをまるっとコピーしたんか?
exeだけ移動させても、dllが不足してたら動かんぞ
2021/01/31(日) 16:02:29.10ID:RldRqHno0
>>389
既存のコードを書き直すことは、実際にはたぶんやらないと思います(手間のわりに得られる効果は少なそうなので)。

ただ、自分がプログラミングしてると、>>376に書いたような状況にしばしば出くわすので、
他の人はどうしてるのかな?と思い、今後の参考に質問させてもらいました。

・そういう状況になるような設計がそもそも悪いのか?
・他の人はそういう状況にならないように設計してるのか?
・不便を感じているのか?いないのか?
・不便を感じているなら、どう対処してるのか?
等を知りたかったのです。
2021/01/31(日) 16:24:40.13ID:Xb450EhAa
>>389
privateをpublicにするのは構わないがイミュータブルなクラスをミュタブルにするのは絶対に駄目
2021/01/31(日) 16:36:30.32ID:TH60xXxXM
>>392
そういう状況になるような設計がそもそも悪い、に一票
他のクラスAの内臓を引き摺り出さないといけないような処理があるなら、それはA自身に持たせるべき
Tell, Don't Ask でググるといい
2021/01/31(日) 17:15:07.79ID:QuI6Fit80
>>391
ありがとうございます
以前にtobii社のアイトラッカーを使っていてこのSDKをインストールしていたので、
知らないdllがたくさん生成されていました・・・
2021/01/31(日) 17:16:51.45ID:QuI6Fit80
ちょっとやっかいなことになったなぁ・・・
現在tobiiのアイトラッカーは使っていないので、
tobii抜きでビルドしたいのですが、どこで設定しているのかわからないので取り除けません
sdkのアンインストールツールなんてものもなさそうだし・・・
2021/01/31(日) 17:19:17.00ID:QuI6Fit80
開発したオブジェクトをtobiiを使っていない旧バージョンのプログラムにコピーしたらうまく行かないかと思ったんですが、
プロジェクト間でオブジェクトのコピーができない・・・
2021/01/31(日) 17:57:24.91ID:QuI6Fit80
プロジェクトをまたいでフォームをコピーしようとすると

「この操作のソースファイルがこのソリューションに見つかりません。」

と表示されるのですが、何が悪いのでしょうか?
2021/01/31(日) 18:13:15.24ID:Xb450EhAa
>>392
根本的な設計は問題ないよ
例えば注文と注文明細のようにオブジェクトが別のオブジェクトを含むという構造はよくあることだ
それ自体にはなんの問題もない

では何が問題かというとそれは注文明細をミュータブルにしてしまったこと
注文明細をミュータブルにしてしまうと
注文と注文明細の間にあったはずの不変条件を簡単に壊すことができてしまう
2021/01/31(日) 18:57:41.42ID:QuI6Fit80
C#というかVSではソリューションをまたいでフォームをコピーするとかは不可能なんでしょうか?
またいでコピーすると

「この操作のソースファイルがこのソリューションに見つかりません。」

と表示されコピーできないのですが、これが出来ないとフォームを別アプリとかで再利用できないですよね
コピーできないはずがないだろうと思って調べているのですがやり方が分からい・・・
2021/01/31(日) 19:36:48.60ID:N+Pm82Ll0
エクスプローラーでファイルをコピーするという発想は無いの?
2021/01/31(日) 20:20:00.00ID:QuI6Fit80
>>401
ありがとうございます
知りませんでした・・・

ファイルコピーしたらプロジェク内に表示されましたが、
SDK導入前のプロジェクトにSDK導入後開発したフォームを移植してもうまく動かないですね
SDKを一度導入すると取り除くのは不可能なのか・・・
全く使わないDLLファイルが大量にあるってなんか気持ち悪いですが、我慢するしかないのかな・・・
2021/01/31(日) 21:08:22.28ID:RldRqHno0
>>394
>>399

色々とアドバイスいただき、ありがとうございます。

Tell, Don't Askについても調べてみました。
より良いコーディングができるよう精進します!
2021/01/31(日) 21:42:41.93ID:1LV1XQdcr
>>400
共通のソリューションにあり納めてからだと
プロジェクトエクスプローラで
コピー、移動出来ない?
2021/01/31(日) 21:49:02.35ID:d4v/P7z60
List<int>の中で最大の数値の個数をLINQで数えたいのですが
どう書いたらいいのでしょうか?
2021/01/31(日) 22:20:10.23ID:AZLe64Sd0
>>405

var hoge = new List<int> { 1, 2, 3, 4, 5, 4, 5, 4, 5 };
var maxCount = hoge.Where( x => x == hoge.Max() ).Count();
2021/01/31(日) 22:20:29.15ID:nDa51Aej0
Max()で最大値取った後Count(x => x == max)すればいいんじゃない普通に
2021/01/31(日) 22:23:53.17ID:AZLe64Sd0
たしかに、Whereの中にhoge.Max()を書いちゃうと毎回評価されて効率わるいのかな。
すまん
2021/01/31(日) 22:24:43.04ID:6uii1UZd0
>>405
GroupByでキーを値、バリューを個数にしたグループを作ってキーで並び替えて最後の行を取得するってのが1回の実行で完結する時の一般的なやり方
2021/01/31(日) 22:24:51.03ID:tsmk7oeqa
計算量と可読性考えた素直に自分で書いた方がよい気がするよw
2021/01/31(日) 22:36:08.49ID:d4v/P7z60
みなさまありがとうございました
GroupBy調べてみます。
2021/01/31(日) 22:36:31.74ID:jjH+MY7o0
いえいえ
2021/01/31(日) 22:47:04.53ID:tsmk7oeqa
LINQというかその乱用者が嫌われる理由の一端を見た気がするw
2021/01/31(日) 23:08:40.21ID:r9k2b4HI0
>>413
あんたがついてけて無いだけ。
2021/01/31(日) 23:14:50.67ID:8OVECKvh0
ループでMax出しながらカウントも行けると思うんやけど
速度的にもわかりやすさ的にも
絶対こっちのが上やんか?
それに対する反省はないん?
けったいな方法使って性能も悪いなんてなんや最高にダッサイなぁ?
2021/01/31(日) 23:36:34.74ID:tsmk7oeqa
>>414
これ言ってる本人は語るに落ちてるって気付いてないんだろうねw

KISSの原則とか青臭いこと言いたくないけど、
ダメな人は自分が自己確証を目的にしてる自覚がないからダメなんだな

前にも書いたけどこの業界にはイキってる連中が群がってる技術は
絶対に衰退する法則があるけどそれも上記が理由の一つだねw
2021/02/01(月) 00:28:41.11ID:YBzqaDjv0
>>407
これすら理解できんの?
2021/02/01(月) 00:49:03.93ID:BmIrX0ai0
>>405
dotnet add package System.Interactive

using System;
using System.Collections.Generic;
using System.Linq;

var q = new List<int>() { ... };
var ans = q.MaxBy(x => x).Count();
System.Console.WriteLine(ans);
2021/02/01(月) 01:19:51.10ID:LuxfmHdua
>>417
そっちは可読性は問題ないので
2回スキャンすることになる非効率が問題ないなら
普通にありだと思うよ。
2021/02/01(月) 01:48:39.77ID:YBzqaDjv0
>>419
これはSQLでも一般的じゃん。
一回とか概念的に無理じゃない?
2021/02/01(月) 07:56:42.00ID:SHJOz7VI0
>>420

>>415に書いてあるよ
2021/02/01(月) 08:16:36.29ID:iKAM042Ld
ループでMax出しながらカウントはListに限って言えばまあ許容範囲内だけど、
IEnumerableに対する処理としては微妙じゃない?
全件かならず読み込む必要があるのと、裏がDBならクエリになって集計だけ行われるのではパフォーマンス差出ると思うが。
そのへん、バックエンドがどう、だからコードはこう、って考えるよりも、Linqで処理して弾力をもたせるってのは有りだと思うけど。
けったいな方法だとは思わん
2021/02/01(月) 08:39:43.77ID:70GW+0Z90
linq使わなきゃワンループ余裕でしょ?

max値更新するときカウンタリセットして同値見つかったらインクリメントすればいいっしょ?
2021/02/01(月) 08:49:27.91ID:f9q1oLiO0
foreachなら普通にループ一回で済むわな
2021/02/01(月) 08:59:56.25ID:YMWDOp3Pa
>>422
DBうんぬんはIQueryableなので関係ない
IEnumerableになってる時点で最も効率がいいのは1回スキャン
ソースが小さいListなら効率は気にしなくていい
ファイル読み込みとかだと無視できないので汎用化したいなら1回スキャンで済むようにするのがLinqのマナー
2021/02/01(月) 10:06:42.50ID:5LLgSMFp0
a.Aggregate((int.MinValue,0), (cur,next) => cur.Item1 < next ? (next, 1) : (cur.Item1 == next ? (next, cur.Item2 + 1) : cur));

これじゃダメなの?
2021/02/01(月) 10:24:56.67ID:laVzODdgM
>>426
さすがにこれはひどい
2021/02/01(月) 10:26:19.00ID:iKAM042Ld
>>425
あ、そうか。納得。
2021/02/01(月) 14:37:18.05ID:PZUYg2ag0
>>426
いいね。
何やってるかすぐ分かる
2021/02/01(月) 15:26:59.74ID:DEyQGLil0
MoreLinqにもMaxBy()あるよ
>>418と一緒でループ1回ですむ
標準だけでやりたければ自分でExtension定義すればいい
431デフォルトの名無しさん (ワッチョイ 6610-IZeX)
垢版 |
2021/02/02(火) 20:45:05.39ID:uZjppo1+0
すみません 教えてください
using Windows.System.Diagnostics;

SystemCpuUsageReport.UserTime
SystemCpuUsageReport.KernelTime
SystemCpuUsageReport.IdleTime
は それぞれ
ユーザーがCPUを使用していた時間(The amount of CPU user time consumed by the system.)
カーネルがCPUを使用していた時間(The amount of CPU kernel time consumed by the system.)
CPUがアイドルであった時間(The amount of time the CPU was idle.)
となっているのですが、 それぞれ、なにを表しているのでしょうか?
タイマー関数で、1秒ごとに、idoletime+Kernaltime+Usertime の差分をを求めても、
14秒から15秒になってしまうので、単純にな数字ではないと思うのですが、どのような理論で
この数字が出ているのかが皆目わかりません

よろしくお願いいたします。
2021/02/02(火) 21:08:40.40ID:kveRc3Dr0
CPUスレッド数
433デフォルトの名無しさん (ワッチョイ 3933-merL)
垢版 |
2021/02/03(水) 00:26:51.19ID:v8/308I10
publicなプロパティにはxmlコメントを付けると思いますが、
バッキングフィールドってどこに記入してますか?
クラスの先頭付近に書いても、
自動実装プロパティはコード上ではバッキングフィールドは無いし、
納まりが悪いです。

private string _name; //←これどこに書きますか?

/// <summary>名前</summary>
public string Name {
get => _name;
set => _name = value.ToUpper();
}

/// <summary>年齢</summary>
public int Age { get; set; }
2021/02/03(水) 01:43:39.37ID:1I0faZoba
>>433
質問の趣旨は要するにただ「バッキングフィールドをどこに書くべきか?」それだけ?

自分はスニペットのテンプレのままなのでプロパティー本体の直前に書くけど
そんなの別にどこでもお好みでいいと思うよ。
うるさいがこう書けと言うならおとなしくそれにしたがっておけばいいと思う。
2021/02/03(水) 02:41:30.85ID:7CsH6q/40
https://qiita.com/toshi0607/items/801a0d37fb48313cbdbd

C#6.0
自動プロパティ初期化子を与えて、初期値指定ができるようになりました。
public string Name { get; set; } = "Nyanchu"

以下と同意です。

private string _name = "Nyanchu";

public string Name
{
get { return _name; }
set { _name = value; }
}

これでいいんじゃね?
2021/02/03(水) 08:22:20.89ID:0ICj5PSn0
何がこれでいいの?質問を理解してる?
2021/02/03(水) 08:24:12.18ID:qNul9lFK0
久しぶりに触ってんだけど
vs2019でフォームにクラスファイルを追加するときは
右側のプロジェクトウィンドウみたいなところで右クリックして追加ないとダメなんだっけ?
メニューバーのだとただのクラスファイルを作るだけ?
2021/02/03(水) 08:42:49.88ID:7CsH6q/40
>>436
_nameを消したいのかとESP
2021/02/03(水) 08:55:41.75ID:9jfq2zZC0
>>438
そんなこと言ってないよ
ちゃんと質問読もうね
2021/02/03(水) 08:59:26.01ID:7CsH6q/40
そもそも書かなくて良くなるじゃん
set{value=略;}にすれば


なるっけ?
2021/02/03(水) 09:03:06.99ID:9jfq2zZC0
書きたくないんじゃなくて書く必要がある場合にどこに書くのか?だろ
勝手に質問変えないで
自動実装プロパティでは不都合があるため自前でバッキングフィールドを用意する、は大前提
2021/02/03(水) 09:05:26.44ID:7CsH6q/40
>>441
書く必要があるときってあるん?
2021/02/03(水) 09:10:29.51ID:drzEfAtQ0
>>437
「フォームにクラスファイルを追加する」が意味わからん プロジェクトにファイルを追加する?
「メニューバーの」が具体的にどれを指してるのか分からん
「ただのクラスファイルを作るだけ」がやりたいこととどう異なっているのか分からん
2021/02/03(水) 11:07:31.11ID:7CsH6q/40
>>440
自己レス

ホントだ
違う話なんだな
変数なしで初期化ができるのって
自動プロパティって処理の中身がないやつだけ?なのか
2021/02/03(水) 14:11:05.34ID:QuhKbcfMM
>>359
調べてみましたが、サンプルコードを見ても良く分かりませんでした。
あとで勉強してみます。

>>367
これでも出来そうでした。アドバイスありがとう。


結果報告ですが、ExpressionTreeを使って動的にラムダ式を生成することで解決しました。
完成したコードは以下の通り。

void DynamicOrderBy(string propName){
//引数の文字列に対応するプロパティを返すラムダ式の生成
Func<Person, string> keyFunc = GetDynamicPropertyExpression(propName).Compile();

//動的に生成したラムダ式を使ってOrderBy
var sortedPeople = people.OrderBy(keyFunc)
}

static Expression<Func<KoyouPerson, string>> GetDynamicPropertyExpression(string columnName){
var type = typeof(KoyouPerson);
var property = type.GetProperty(columnName);
var parameter = Expression.Parameter(type, "p");

//p.{columnName}
var propertyAccess = Expression.MakeMemberAccess(parameter, property);

//p => p.{columnName} というラムダ式を格納した式ツリーを返す
return Expression.Lambda<Func<KoyouPerson, string>>(propertyAccess, parameter);
}
2021/02/03(水) 15:14:33.67ID:qlx5EMsl0
>>441
code maid使うと、プライベートフィールドは纏められるからそのまま放置するな
大体メンテすることもないから特に困ることもない
2021/02/03(水) 15:24:45.11ID:q3Uucr840
>>445
OrderByのサンプル見れば分かるやろ
https://dotnetfiddle.net/GdxsMG

Customers.OrderBy(c => c.City)を
Customers.OrderBy("City”)にできる
2021/02/03(水) 16:56:36.24ID:ADWHn1WBd
>>432
ありがとうございます
4こあ8スレッドなのでその2倍いっているのが
やや気になります
今度 同時に計って見て検証してみます
2021/02/03(水) 17:10:24.98ID:PTI/2U/t0
Form上のテキストボックスにファイルのパスを記入してもらって、

このパスにあるファイルをpythonで起動したいのですが

var pass = this.passSetting.Text;
System.Diagnostics.Process.Start("python.exe", @pass);

では何も起動しません。
多分
@pass
ではパスを示せてないんだと思うんですが、どうすればテキストボックスから取得したパスをProcess,Startの引数にできるんでしょう?
2021/02/03(水) 17:33:43.76ID:PTI/2U/t0
System.Diagnostics.Process.Start("python.exe", @"""L:\AAAAAA\USN_analyzer\time_series_analysis26.py""");

だとpythonのファイルを実行できるんですが、

var pass = "L:\AAAAAA\USN_analyzer\time_series_analysis26.py"
System.Diagnostics.Process.Start("python.exe", @pass);

みたいに変数で実行ファイルのパスを渡すことってできないのでしょうか?
2021/02/03(水) 17:42:11.05ID:q3Uucr840
>>450
その2つだとpython.exeに渡す引数がquoteされてるかどうかの違い出るからうまく行くほうに合わせたら?

var pass = @"""L:¥AAAAAA¥USN_analyzer¥time_series_analysis26.py""";
System.Diagnostics.Process.Start("python.exe", pass);

ちなみにpassじゃなくてpath
2021/02/03(水) 18:29:48.39ID:dgpbKw5W0
>>450
頭の@は文字列リテラルに付けた時と変数に付けた時は意味が違う
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/tokens/verbatim
2021/02/03(水) 23:04:55.84ID:PTI/2U/t0
>>451
ありがとうございます。
解決しました!

これでようやっとC#とPythonのアプリケーションを統合することができました。
2021/02/04(木) 03:54:16.03ID:8ASdjdRY0
エクセルの表みたいな
一行に複数の列(項目が並んでる 二次元の配列って
ArrayListじゃだめなんだっけ?

独自のプロプロパティをもったクラスつくってそれを列に放り込むんだったっけ?
2021/02/04(木) 07:35:49.07ID:mMDqMLln0
フィールドがプロパティで
レコードが件数になりまつ
って言うと通じるの?

List<myclass> dtcls = new List<myclass>();

的な
myclassのメンバがプロパティで
456デフォルトの名無しさん (ラクッペペ MM3e-mj3q)
垢版 |
2021/02/04(木) 08:09:30.76ID:+vIUF0nDM
通じない
フィールド、プロパティ、メンバ
それぞれに言語上の意味がある
2021/02/04(木) 09:33:50.26ID:5uFosyLe0
書き込めない
2021/02/04(木) 09:37:28.17ID:5uFosyLe0
WebRequestでウェブページを取得しているのですが、POSTに必要なFormDataがうまく取得できません
普通なら対象ページのHTMLを見れば取得できるのですが、対象ページの”実行”ボタンを押した時にjavascriptでPOSTに必要な情報を
生成しているようで、この値を取得できないのです。
何か方法がありましたら教えてください
2021/02/04(木) 09:38:55.99ID:5uFosyLe0
HTMLはこんな感じです
<input type="submit" value="実行" onclick="sid()">
2021/02/04(木) 11:07:52.39ID:NUvwu5Ez0
自分でJavaScript解析できないならSeleniumで
461デフォルトの名無しさん (ワッチョイ a59b-qCTK)
垢版 |
2021/02/04(木) 11:24:29.52ID:ZzRKCYY/0
selenium
2021/02/04(木) 12:51:14.55ID:PDwRodWn0
ブラウザでF12押してネットワークになに流れてるかを見てみたら?
2021/02/04(木) 15:45:09.59ID:5uFosyLe0
>>461
seleniumってwebBrowserと同じようなものですか?
webBrowserなら操作できるのですが、画面遷移が鬱陶しいので、できればwebRequestで済ませようと思ったのです。

>>462
他でよく見るようなPOST情報しか流れていませんです。
ただhtmlではブランクになっているFormDataがjavascriptによってブランクではない値に修正されています。
javascriptの中身はこんな感じで、クリックと同時にsidの値を書き換えてそれをPOSTしています。
document.forms["form1"].sid.value = xxxxxxx
2021/02/04(木) 17:55:14.32ID:uLY+2761M
>>463
C#でそのJavaScriptと同じことをやって値を計算するか、C#からJavaScriptを実行して結果を取得するか
465デフォルトの名無しさん (ワッチョイ a52c-czmT)
垢版 |
2021/02/04(木) 18:17:04.90ID:SyfdH0Mz0
public class Test
{
public int data { get; set; }
}
Test b = new Test()

bをウオッチすると、dataが、「@data」となるのですが、なぜですかね?
2021/02/04(木) 21:33:17.59ID:Gk5V85vI0
Ruby on Rails ではシステムテストで、Selenium Webdriver を使う

Capybara で、Headless Chrome とか
2021/02/05(金) 01:41:49.08ID:RhinnOg60
なんでRoRの話が?
2021/02/05(金) 19:26:01.79ID:8Pa/tTU+0
C#でヤフーのメールサーバーからメールを送信できなくなってしまいました。
これまでのやり方はdobon.netにあるようなごくごく単純な方法です。
おそらく↓のせいだと思うのですが、ポート番号と通信方法を変更しても、固まってしまい送信ができません。
どなたか送信ができている方がいたらやり方を教えてください。

【2021年1月19日より】メールソフトで「Yahooメール」の送受信が出来ない!?Outlook・Windows Liveメール設定変更方法 | 大阪狭山びこ
https://osayama.com/security/36346

書き直したプログラムは次のとおりです。

//SmtpClientオブジェクトを作成する
System.Net.Mail.SmtpClient sc = new System.Net.Mail.SmtpClient();
//SMTPサーバーを指定する
sc.Host = "smtp.mail.yahoo.co.jp";
//ポート番号を指定する(既定値は25) SSL使用時は587→465
sc.Port = 465;
sc.Credentials = new NetworkCredential("hoge", "fuga");
//SSLを使用する
sc.EnableSsl = true;
//SMTPサーバーに送信する設定にする(既定はNetwork)
sc.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
//メールを送信する
sc.Send(senderMail, recipientMail, subject, body);
2021/02/05(金) 19:45:05.14ID:+3DA/7eT0
ちょっとググれば出るやんw
https://whatsnewmail.yahoo.co.jp/yahoo/20200824a.html
2021/02/05(金) 19:49:44.60ID:KQRmB00P0
https://docs.microsoft.com/ja-jp/dotnet/api/system.net.mail.smtpclient.enablessl
SMTP+STARTTLSにしか対応してないのでSMTPSに対応する他の方法を使う
2021/02/05(金) 21:14:07.85ID:wjTgrFbp0
SmtpClientってそもそも非推奨だしな
2021/02/05(金) 22:02:49.43ID:8Pa/tTU+0
>>470
ありがとうございます。
単純にポート番号と通信方法変えるだけじゃダメだったんですね。
SMTPSで検索してみたらMailKit使えと出てきたのでやってみたらできました。
ありがとうございました。
2021/02/06(土) 03:01:00.29ID:Yx7joU3b0
質問させてください。
c#でgoogle drive api を使ったWindowsアプリケーションを作ろうと思っているのですが、
ビルド後に出来た配布ファイルは実行ファイルはもちろんの事、NuGetで追加したDLL群や、
取得したJSONファイルも含めて配布すればいいのでしょうか?
2021/02/06(土) 03:29:14.46ID:Ygg5i19/0
インストーラー作れや
2021/02/06(土) 08:28:56.67ID:j0Q2R7my0
そのインストーラーを作るのにも必要なファイル群がわからないとダメだと思うけど
2021/02/06(土) 11:41:20.20ID:MqA6OGOW0
>>473
必要なファイル郡は何らかの形で入手できるようにしなければいけないので、
最低限の情報としてこのDLLとかこのJSON使ってますって情報をユーザに
与えてあげないと動かしようがないけど、配布ファイルに含めるか各自で
ダウンロードさせるかはアプリの作成者が決めること

ただし、アプリに含めて配布する場合には、自分の作ったもの以外は
再配布可能なものなのか、各々のDllとかのライセンスを確認しないとダメだよ

ものによって勝手に配布しちゃダメとか、配布にはこれを使えとか、コンパイル
済みのものは配布不可とか色々あるので
2021/02/06(土) 17:42:10.09ID:Bi5ar2460
>>473
そうだけど、GoogleTokenフォルダ下のものはそれぞれのアカウントのを利用させないと不正アクセス起こっちゃわないか
2021/02/06(土) 17:55:40.49ID:UYR2I7R3M
Unityでゲーム作りに挑戦しているのですが、自作クラスItemをリストにした

List<Item> itemList = new List<Item>();

があって、
クラスItemはint itemIDを持っています。

itemListをitemID順にソートするにはどうしたら良いのでしょうか?

itemList.Sort();

で出来ると思っていたのですが、よく考えたら出来る訳ありませんでした・・・。
Sort()のカッコ内にitemIDを指定したり出来るのでしょうか?
取り敢えず並び替え出来れば良いので一番かんたんな方法をどなたか教えて下さい。
よろしくお願いします。。
2021/02/06(土) 18:18:20.71ID:zn5WrP4C0
>>478
https://qiita.com/tetsu8/items/96b8b889c57eb55125d1
2021/02/06(土) 18:24:06.35ID:bSeS6eqZa
>>478
ItemにIComparable<Item>を実装するか、
SortのオーバーロードのうちComparison<T>かIComparer<T>を引数にとるバージョンを使う。
あるいは>>358

ちょっとぐらいドキュメントを読んだ方がよいと思うよ。
コミュニティーに質問を投げるのはその上で疑問が解消しなかった後で遅くないでしょ
2021/02/06(土) 18:44:12.48ID:UYR2I7R3M
>>480
一応自分で調べてはいるのでドキュメントも見るのですが、大体意味がわかりません。。

なぜ意味がわからないかというと例に
<T>などと書いてありますが、Tって何?<>の意味は?という所がわからない為です。
一度自分に近い実用例を見ないとメソッドの存在を知っても書き方がわからないのです。

>>479さんもありがとうございます。
もう少し頑張ってみます。
2021/02/06(土) 18:49:45.30ID:Kl671woR0
Tってなに?とか言ってるのに
List<Item>使ってるやん(笑)
2021/02/06(土) 18:59:51.25ID:UYR2I7R3M
>>482
サンプルなどで使って覚えたので。。
意味を理解しているというよりも、リストの書き方はこうって覚えています。
しかも私が言ってるのは<T>だけに限ったじゃありません。(わからないくせに偉そうですみません)

<T>に限って言えばClass名を入れるって事ですか?
2021/02/06(土) 19:04:04.81ID:uslvvrsY0
ジェネリックのことは黒柳さーんに聞くといいよ。
2021/02/06(土) 19:24:51.67ID:xuEfQm7n0
>>483
そのレベルでは自分のやりたいことのサンプルだけ真似しようとしても分からないことだらけで前に進まないと思うぞ
面倒がらずにC#の入門書とかで体系的に最低限の基礎は固めなよ
2021/02/06(土) 19:41:30.75ID:Kl671woR0
>>483
>>485さんが言っている通りで基礎から勉強した方がいいとは思うけど
Tは別にクラスじゃなくても、stringやらC#の基本型も指定出来ます
つまり、Listが扱う型を指定するという事です
2021/02/06(土) 19:58:10.04ID:pqKs8KDi0
List<Item>だとListにItemしか格納できなくて後々不便になるので、
普通はList<object>にするのが一般的だよ。
2021/02/06(土) 20:10:24.73ID:f+vO1TLm0
え?
2021/02/06(土) 20:20:56.81ID:zn5WrP4C0
>>481
いや、とりあえず真似ればいいやん

people.Sort((a, b) => a.Age - b.Age);

itemList.Sort((a, b) => a.itemID - b.itemID);

※ a, b は単なる引数だから (x, y) => x.itemID - y.itemID とかでもいい

>>487
氏ね、ボケ
2021/02/06(土) 21:00:57.90ID:xFqAsQE9M
最低限の基礎知識の勉強は必要だよね
そうしないと検索してもここで聞いても理解できない
「やりたいこと優先」という気持ちは分かるけど

>>487みたいに変なこと教える人もいるから…
2021/02/06(土) 21:04:16.10ID:UYR2I7R3M
>>489
何を書いてるのかまったくわからないのでちょうどラムダ式についての解説を読んでいました。

そのa,bはNameとは関係ない感じですか?
ラムダ式でしか指定できないのでしょうか?
2021/02/06(土) 21:21:06.73ID:UYR2I7R3M
>>490
今作ってるものが完成したら皆さんが言うとおり基礎の勉強したいと思います。

new Person(){Name = "a"}のaは普通の解説ならTaroとか書くはずで、のちのa,bとは関係ないって事ですね?
2021/02/06(土) 22:25:38.73ID:zn5WrP4C0
>>492
ああ、確かにPersonでName="a"は手を抜きすぎだな、"Taro"とか"田中"とかの方がいいね
その"a"とラムダ式のaは関係ない
それを示すために
> ※ a, b は単なる引数だから (x, y) => x.itemID - y.itemID とかでもいい
って書いたんだけどね
2021/02/06(土) 22:27:37.15ID:AyWHBNPF0
>>492
以下のメソッドの同じ意味
一々メソッドを定義するの面倒だし、型とか一々書くのが面倒で省略しまくったのがラムダ式と思うとイメージしやすい
int Hoge(Item a, Item b)
{
return a.itemID - b.itemID;
}
2021/02/06(土) 22:49:39.66ID:UYR2I7R3M
>>493
出来ました!ソートされました!
本当にありがとうございます!
2021/02/06(土) 23:20:37.38ID:b6D0c/Lh0
>>484
水虫でスヤスヤ
497デフォルトの名無しさん (エムゾネ FFbf-6HDI)
垢版 |
2021/02/07(日) 18:04:33.39ID:4v/nAOdwF
個々の人たちは若い女性には優しい
498デフォルトの名無しさん (ワッチョイ bfbb-5e/0)
垢版 |
2021/02/07(日) 20:57:57.25ID:knu7zqoU0
ラムダ式はちゃんと練習したいな、なんか練習問題集みたいなのないのかな?
特にキャプチャーの概念が自分の感覚と狂う狂う
2021/02/07(日) 21:21:20.13ID:S7zvZDvX0
意味不明
それでしか書けないものがあるならまだしも
結局モノが作りたいんじゃないなら
この職には近づかないほうがいいぞ
不幸になる
2021/02/07(日) 21:21:56.15ID:pmm7svGna
真面目な話、ラムダ式はそこまで奥は深くない気がする。
決していきがって言ってないつもり。

キャプチャーに関してはC#5.0での破壊的変更が逆に落とし穴になってるような
気がしないでもないけど、他に直感を裏切るような落とし穴があるわけでもないし
https://ufcpp.net/study/csharp/ap_ver5.html#foreach

川俣さんの記事が割とよく書けてると思うしあれ読めば十分じゃないのかな
2021/02/07(日) 22:40:06.94ID:emwEhLVE0
arcoderでもやってりゃいいんじゃないの?
2021/02/07(日) 23:10:43.01ID:YZfkY6ii0
>>500
あの人、川俣さんって言うんだ?
知らなんだ
2021/02/07(日) 23:56:40.34ID:zExDTdlVd
俺もラムダ式は最初意味不明すぎて苦労した
何で躓いたかって言うと一番は用途が不明な点
デリゲートとか覚えたらそこから理解できた
2021/02/08(月) 00:50:31.00ID:Vt5mMx+g0
ラムダ式のメリットってなによ
わざと難解に書いてるだけにしか見えん
2021/02/08(月) 00:57:45.90ID:GsV6CYPPd
>>504
絶対に一度しか使わないような処理を引数として渡したい時に
わざわざメソッドとして書かなくて済む
2021/02/08(月) 01:00:19.26ID:BqxWbjT60
お手軽処理をその場で書いて渡せることかな
2021/02/08(月) 01:06:18.03ID:hRlo1f3e0
c#でUSBカメラから録画・録音処理をするライブラリでいいのないですかね?
Accordを使ってみたところ、録画は上手くいったけど録音が上手く動かないしもうリポジトリもアーカイブされてるので乗り換え先を探しています。
2021/02/08(月) 01:25:17.22ID:EESpGXM5a
デリゲートを理解してればラムダ式自体を覚えるのは何の苦もないと思うけど
確かにデリゲート的な概念って、プログラミング自体初心者だったりお上品な言語しか
やったことない人だと理解しづらいよねたぶん。
それはそうだと思うわ。
2021/02/08(月) 01:52:41.04ID:YmxwiogA0
ラムダ式がメリットというより
引数として無名関数を指定出来るのがメリットという点を理解すれば良いだけかと
例えばよくあるソートだけど、大抵は2つの比較対象のオブジェクトがラムダ式の引数になるけど、ソート側からしたらそれをどう評価したらいいか分からないから、ラムダ式で評価する関数を戻り値として指定して、ソート側でそれを実行している訳で
この辺の説明でピンとこない人は中々理解できないかも知れない
2021/02/08(月) 08:20:16.41ID:PnrMZIJR0
>>504
名前をいちいち考えなくていい
引数に変数しか指定できなくて毎回
var I1 = I + 1;
foo(I1);
って書くより
foo(I + 1);
って書く方が楽でしょ
それと同じ
2021/02/08(月) 09:02:11.48ID:6em1tYAf0
無名関数は優れた概念だと思う。
問題はコピペが簡単にできる現代であれほど省略する必要があったのかってこと
2021/02/08(月) 10:12:50.26ID:asopwXX20
メソッドを記述するのが面倒なだけってのはお前の都合じゃん

あの処理だけどさって同じ開発者同士で話すときに
名前がないのが超超超超超超超超強烈なデメリットしかない
2021/02/08(月) 10:42:42.96ID:XTCsW3fgM
ラムダはその場かぎりのちっこい処理にだけ使うものだぞ
命名しておくべきような内容・ボリュームの処理をわざわざ無名のラムダにしておきながらなに言ってんだか
不便にしてるのはお前自身だろ
2021/02/08(月) 11:03:59.10ID:gKVPdjPN0
僕たまに一行だけのメソッドも作るんでその感覚よくわかりません

あと他でも同じ処理が必要になったときにラムダで書いたから5箇所同じことやってますとか言ったやつは死刑でつ
2021/02/08(月) 11:06:59.86ID:LrP4KWut0
>>512
いちいちコードの全処理に名前付けるのかって話よ
2021/02/08(月) 12:05:27.80ID:TxCBSk9L0
>>512
高階関数に渡す処理なので
「ここのWhereの指定だけどさ…」とか
「ここのGroupByに渡してるラムダの書き方だけどさ…」で問題なく話が通じる

話が通じないようなところにラムダを書いてるなら使い方のほうが間違ってるかも
2021/02/08(月) 12:07:08.93ID:QaH3FId2M
513はわからないんじゃなくて分かろうとするつもりが全く無いだけでしょ
その場限りじゃないことが明白なら1行の処理でも
メソッドにするのは当たり前

というか513はメソッドのラムダ表記すら難癖つけて全面禁止しそうだな
2021/02/08(月) 12:08:42.71ID:QaH3FId2M
レス番ずれてた
513じゃなくて>>512
2021/02/08(月) 12:13:39.02ID:gKVPdjPN0
>>516
じゃあ、メソッド名もそうしたほうがいいのかな?
2021/02/08(月) 12:16:19.29ID:TxCBSk9L0
Linqを使いやすくするためには高階関数を楽に使えるする必要があって
そのために導入されたのが無名関数とその表現形式であるラムダ式

Whereに渡す処理を必ず別の箇所で名前を付けて定義しなきゃいけないようだと面倒だし命名負荷が高い
2021/02/08(月) 12:17:03.96ID:TxCBSk9L0
>>519
そうしたほうとはどうしたほう?
2021/02/08(月) 12:52:14.43ID:NwJJp6aS0
>>512
LINQの記述を読めば分かるじゃん
2021/02/08(月) 12:53:18.46ID:nKGEYTSta
こういう話は抽象論より具体例挙げた方が早いね

例えば>>358に出てくるOrderByが引数に取るセレクターを
実際に自分でラムダ式とメソッドの両方で書いてみれば
ラムダ式の意義なんて自ずから分かるよね

理論的根拠はその後で考えればいい
端的に言えば、アホのな初心者がやる「なんでもグローバル変数(フィールド)」がダメなのと同じ理由よ
524デフォルトの名無しさん (アウアウエー Sadf-fCEL)
垢版 |
2021/02/08(月) 12:57:17.45ID:nKGEYTSta
>>522
というより、ローカル変数を禁止してすべてフィールドで書こうとしたらどうなるか、と言った方がたぶん通じると思う。
2021/02/08(月) 13:02:05.07ID:GsV6CYPPd
ここでどんなにラムダ式を否定しようと
大多数の業界人はそうは思わないからわざわざ作られたし普通に使われてるんだよ
マイノリティなの自覚したほうが良い
2021/02/08(月) 13:05:23.07ID:gKVPdjPN0
ラムダ式なんて書こうとした瞬間に明らかに特殊なことしようとしてんだからメソッドにしろよw
すくなくとももう一回その処理必要になった時点でメソッドにしたほうがいいだろ?
違うか?

検索一つとってもお前と別のやつは異なるラムダ式で同じことをやるかもしれなくて
そしてそれを見つけるのは異常に困難であると予想できる
2021/02/08(月) 13:05:46.79ID:WEC5Fu99M
>>504
LinQとの相性
2021/02/08(月) 13:13:24.77ID:nKGEYTSta
>>526
違うよ。
メソッドというのは「意味のあるある程度まとまった処理にその処理を表す名前をつけたもの」だ。

あまりに単純でアドホックな処理を無理にメソッドにしようとすると、

(1) 命名に困る(処理が単純すぎて他と区別できるような適切な名前がつけられない)
(2) メソッドの数が無意味に増えることで見通しが悪くなる

という問題が起こる。
だから、>>524をやったら起こるのと同じ問題を回避するためだよ
2021/02/08(月) 13:17:25.53ID:gKVPdjPN0
>>528
え?じゃあ、同じことやってるのにラムダ式1、ラムダ式2、ラムダ式じゃない方法1、ラムダ式じゃない方法2みたいなコードがソース中に散布されちゃうけど
何か防止する方法あるの?
検索一つとっても起きちゃうよね?
2021/02/08(月) 13:21:46.31ID:nKGEYTSta
>>529
馬鹿の一つ覚えはよくない。
もちろんケースバイケースで再利用を意識してメソッドにした方がよいケースもある。

今の論点は「ラムダ式に存在意義はあるのか?」ではないの?
誰も「デリゲート引数には必ずラムダ式を渡すべき」などとは言ってないでしょ
2021/02/08(月) 13:23:07.55ID:gKVPdjPN0
>>530
質問にこたえてよ
はぐらかさないでさ
一件でもあるなら最早使うべきではないでしょ?
2021/02/08(月) 13:26:13.21ID:nKGEYTSta
何を指してはぐらかしてると言ってるのか意味がわからないけどw
この人は暇つぶしがしたいだけなのかな?
まあ俺もそうだから文句はないけどねw
2021/02/08(月) 13:29:26.72ID:gKVPdjPN0
>>532
もういいよバイバイ
2021/02/08(月) 14:13:21.62ID:8emHxm3F0
LINQは難しくてよくわからないから使用禁止っていう会社本当に有るらしいよ
2021/02/08(月) 14:17:19.77ID:YmxwiogA0
同じようなものをコピペするのが嫌だったら
普通にメソッド定義して、それをthis.methodみたいに指定も出来る
var q = new List<int>();
q.Add(10);
q.Add(2);
q.Add(5);
q.Sort(this.method);
foreach(var r in q){Console.WriteLine(r.ToString());}
このthis.methodが
private int method(int x,int y)
{
return x - y;
}
にしても動く
C#ならこれらの条件式を別のクラスでstaticでおいていても、別のクラス.methodみたいな指定で動く
まぁ、何度も同じような式を使うなら別のクラスに集めておくというのも無くは無いけどね
536デフォルトの名無しさん (エムゾネ FFbf-6HDI)
垢版 |
2021/02/08(月) 14:30:19.75ID:5JxS4RLeF
>>507
NAudio
OpenCV.NET
2021/02/08(月) 15:07:36.60ID:hRlo1f3e0
>>536
opencvの画像処理とNAudioの音声処理って同期できるんでしょうか?
画像フレームイベントと音声フレームイベントでそれぞれ同じファイルに対して書き込んでいくイメージが浮かびましたが
2021/02/08(月) 19:08:17.30ID:xjBqJ/6J0
USBカメラでトラブルなくなんとかなりそうなのはUWPじゃね?
2021/02/08(月) 19:23:42.76ID:4Qyy9go20
ラムダ式使うなの人はvar使うなと同じ匂いがするな
540デフォルトの名無しさん (ワッチョイ 57e5-/W+d)
垢版 |
2021/02/08(月) 20:35:50.80ID:Pr1Hp8QQ0
λ式つかうとき、なんとなく不安なので()で囲みたくなる

()で囲むなら{return }ぐらい書いても対して変わらないような気がしてくる
2021/02/08(月) 20:45:30.47ID:7ndpGKbk0
一番優先すべきは自分が(グループが)理解しやすいかどうかだからいいんじゃない?
三項演算式も単純な物以外は使わない方がいいと思うし
()で囲むなら囲むで全部囲むと統一すべきとは思うけど
2021/02/08(月) 20:47:10.26ID:PnrMZIJR0
>>539
まあ身の回りにいないならどうでもいいや
2021/02/08(月) 21:00:30.48ID:NgGwlfwa0
>>507
MediaFoundationでいいじゃん。
2021/02/09(火) 02:08:46.17ID:W+QSEYkH0
c#はコードの記述量を減らす仕様の追加は多いよね
書き方も奇妙でなく今までの記述と整合性はあるし悪くない

でも増えた仕様を知らないとソースは読めないし覚える事が多くなって初心者が戸惑う事はないのかな
2021/02/09(火) 08:42:10.30ID:Y6/VWBkq0
varを使っていて読みにくいコードはvarを使ってなくても読みにくいって
ufcppの人が言ってた
2021/02/09(火) 08:42:13.95ID:k5T/Xgmha
>>544
知らない記述が出てきた時点で調べれば事足りるだろ
2021/02/09(火) 09:08:22.60ID:MQ4HPmPO0
>>544
いつまでたってもマクロを実装しない時点でコード量を減らしたいという意図があるとはとても思えない
ソースジェネレーターも全然違うしあくまで安全性第一な言語
2021/02/09(火) 09:08:35.67ID:Q6+voU8N0
それはそうだけど??とか.?とかは調べても分からんよねっていう(検索しても引っかからないので)
2021/02/09(火) 09:23:40.65ID:Ad7Y09LZ0
C# "??演算子"
とかで検索すればヒットしたよ
2021/02/09(火) 09:27:48.15ID:62rZ0qzr0
>>546
>>548が言うように調べにくいっていうのはあるわな
ラムダ式って呼び方知らなきゃググるだけでも大変だし
2021/02/09(火) 09:30:16.24ID:62rZ0qzr0
>>549
それ、"演算子" っていう知識があるから
まあ最近は C# ?? で 演算子 をサジェストされたりするけど
2021/02/09(火) 09:54:22.07ID:Ad7Y09LZ0
>>550,551
確かに初心者はラムダ式や演算子なんて用語は最初は知らないだろうけど、学習の過程で当然学ぶべき事柄でもあると思うよ。
だから、やりたいことだけググって断片的な知識を積み重ねるだけでは不十分で、最低一冊は入門書とかで基本的な用語や概念について一通りは理解できないまでも聞いたことはあるというくらいにはなっていくべきだと思う。
2021/02/09(火) 10:42:08.15ID:62rZ0qzr0
べきべき言われても…
2021/02/09(火) 12:10:30.66ID:5WPpwWTv0
他言語経験者が入門書をバーっと一通り見るなんて1日ありゃできるんだし、それすらやらずに演算子という単語も知らないんだから調べようがない!とかどんだけ甘えたいのとしか思えない
はじめてのプログラミングでC#やってますってのならなおさら入門書ちゃんと見ようねってだけでは
2021/02/09(火) 12:30:07.39ID:MQ4HPmPO0
ところで質問なんだけど、Jpegバイナリのポインタ、もしくはSpan<T>からBitmap作る事って標準ライブラリで可能?
byte[]にせずStreamでラップもせずに出来る方法があれば教えてもらいたい
2021/02/09(火) 12:47:47.15ID:eguAZIqj0
> Streamでラップもせず
の理由は?
これさえなければUnmanagedMemoryStreamで簡単だと思うけど
2021/02/09(火) 12:52:26.96ID:MQ4HPmPO0
>>556
別に大した理由じゃないから実際現状はImage.FromStreamにUnmanagedMemoryStream渡してやってるけど
瞬間的に大量のjpegを変換するから標準でSpan<byte>かbyte*で渡せる関数があるならそれに越したことはないなと
2021/02/09(火) 22:21:08.48ID:dAJwA0Wq0
.NET5って.NET Frameworkと.NET Coreを統合した奴になるんですか?
Windows10のデスクトップ用に書いたコードが自分のiPhoneでも走るようになるんですか?
2021/02/10(水) 00:44:02.96ID:PXY5WDG20
夢のある勘違いだな
俺もできるならそうあってほしい
2021/02/10(水) 01:36:35.72ID:eSNkeEaH0
じゃあ、統合する利点は?
2021/02/10(水) 07:33:17.31ID:9TuBJaQx0
>>526
車輪の再発明
562デフォルトの名無しさん (ラクッペペ MM8f-/W+d)
垢版 |
2021/02/10(水) 17:27:33.39ID:Eg7RIeNgM
frameworkはwin10を続ける限りサポートしなくちゃいけないけど
coreは3年間だけで済む

まったくかんたんだ
2021/02/10(水) 18:43:48.14ID:WeU5fM2j0
.NETなんて辞めればいいのにと思うけどねぇ
.NET Coreの事は全然詳しく無いけどGUIアプリ作るなら結局はWPFと殆ど同じぽいし
こんなの流行る訳無いよなぁ
WinFormsぐらいの気軽さが無いとちょっとしたアプリを作る気にもなれないw
もうそういうのも何でも感でもwebみたいな事になりつつあるけど
2021/02/10(水) 18:51:06.66ID:cIkntQZr0
>>560
別ける必要がなくなったから統合するだけ
2021/02/11(木) 06:25:03.02ID:z8KyJUiV0
>>562
で、.NET5ではどんだけサポートしなきゃならないの?
2021/02/11(木) 06:25:30.46ID:z8KyJUiV0
>>563
んだんだ
WPFは近所のコンビニに行くのにジェット機使うぐらい面倒臭い
2021/02/11(木) 06:26:05.10ID:z8KyJUiV0
>>564
じゃ、今までなんで分けてたの?
2021/02/11(木) 06:28:27.83ID:k5l1P+DH0
意識高い系が作ったから
XMLで画面デザイン、俺かっこいい
2021/02/11(木) 06:41:08.46ID:z8KyJUiV0
>>568
ちょっとなに言ってんのかよくわかんないな by 富澤

しかもXMLじゃなくてXAMLじゃないの?
2021/02/11(木) 06:45:22.54ID:k5l1P+DH0
XAMLがXMLでないならそうだろうな。
以下世に出たときの売り文句や

EXtensible Application Markup Language (XAML) is a XML based markup language developed by Microsoft. It is used in several Microsoft technologies like Windows Presentation Foundation (WPF), Silverlight, WinRT, Universal Windows Platform, etc. to define the User Interface for applications.
2021/02/11(木) 07:54:59.98ID:z8KyJUiV0
それでも「XAML=XML」じゃないだろ

じゃ、なにか?XMLで書けばデザインできるのか?

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="testxsl.xsl"?>
<おこづかい帳>
 <支出>
  <内容>
   <日付>1月20日</日付>
   <交通費>780</交通費>
   <食費>980</食費>
   <嗜好品>250</嗜好品>
  </内容>
  <内容>
   <日付>1月21日</日付>
   <交通費>950</交通費>
   <食費>1200</食費>
   <嗜好品>300</嗜好品>
  </内容>
  <内容>
   <日付>1月22日</日付>
   <交通費>500</交通費>
   <食費>1500</食費>
   <嗜好品>250</嗜好品>
  </内容>
 </支出>
</おこづかい帳>

・・・一体、どんなデザインになるんだろな、これ?
2021/02/11(木) 08:10:23.63ID:Xnd4NzfF0
馬鹿なのかしら…
2021/02/11(木) 08:39:30.15ID:k5l1P+DH0
日常生活に問題が出る程の馬鹿だな
2021/02/11(木) 09:00:10.84ID:bJBhJ33y0
>>567
出自が違うからだろ
合併した会社になんで今まで別だったの?
って聞くようなもんだ
2021/02/11(木) 09:14:28.30ID:zGBoORUF0
>>568
まあある意味意識高い系が作ったから自動テストが楽でCI/CDバッチリってところだよな。
2021/02/11(木) 09:27:06.58ID:k5l1P+DH0
デメリットもあるけど、メリットもあるね。

ザマリンは取り巻きがユーザーを馬鹿にして炎上したけど
2021/02/11(木) 09:58:06.70ID:w5wYX4n30
htmlを触れる程度の知識があればxamlでアニメーションをやらないレベルまでなら簡単に扱えるはずなのにな
webアプリを使える設定の人が何故そこまでxamlを拒否するのか理解に苦しむ
2021/02/11(木) 10:01:50.05ID:k5l1P+DH0
世の中業務アプリ屋だけだと思うなよw
2021/02/11(木) 10:04:15.26ID:zlnnHWka0
このまえ興味本位で「WinFormsぐらいの気軽」なソフトを WPF で作ってみたけど、別にタイヘンってことはなかったような。
まあ環境が違うから覚えることはあったけど。・・・もう忘れたけど。w
2021/02/11(木) 10:07:51.67ID:zGBoORUF0
一応Forms爺とWeb派は別勢力だと思いたいところだけど、たしかに
Forms爺がWPFをdisるためだけにwebを持ち出している感も否めない。
2021/02/11(木) 10:18:08.25ID:bJBhJ33y0
>>577
簡単だけど記述量が多くて結構面倒って感じ
css程度の記述量で済むようにして欲しいわ
あとstaticresourceやdynamicresourceとか使おうとすると結構ムズい
2021/02/11(木) 10:37:27.67ID:7XoW1ZA50
WebView2ってWPFみたいに重くないの?
2021/02/11(木) 11:00:57.44ID:K3umRmpBD
XAML∈XMLって理解できないバカがいるな
2021/02/11(木) 11:12:52.35ID:89K1HM4Z0
>>566
winFormsと同じように書けますよ。
イベントハンドラーで。

ただ、みんな苦行プレイ(mvvm)が好きなだけ。
2021/02/11(木) 11:16:29.74ID:89K1HM4Z0
>>566
WPFの実装みるとまず
コードベースの実装があってそれに対応する
XAMLベースの表現(記法)がありますね。

なのでその逆で考えれば良いです。
2021/02/11(木) 11:22:49.45ID:w5wYX4n30
Formsもそのまま使えば楽ちんだけど、ちょっと凝ったことやってオーナードローに手を出すと途端に面倒になる

>>584
WinUIになるとvmにイベントハンドラを書けるから、そこらへんは解消されるんだけどね
2021/02/11(木) 11:53:47.88ID:89K1HM4Z0
>>586
単にwinFormsの改良版としてWPFつかえますよ。
(テンプレートをXAMLで実装してるので
幸福になれます。)

その基礎の上にMVVMを追加してるだけです。
早く気づきましょう!
2021/02/11(木) 12:46:25.44ID:c/k7g2fva
WPF(XAML)固有の問題なのか宣言型に一般的な問題なのか判断するだけの
経験がないのでアレだけど、WPFの一番嫌なとことは
自分が書いたコードでも後から見たとき何をどうやって実現してるか、
理解するのに時間が掛かり過ぎること。これが他人の書いたコードならなおさら。

なんちゃらフレームワークでMVVMなんてやってるとこの傾向にさらに拍車がかかる。
こんなもの推進してる奴はメンテを考慮する必要性がなく他人のコードを読むことも
やらない人種なんじゃないか?というのが偽らざる感想。

ちょっと上のラムダ式批判とかはスタティックおじさん級の無理解か勘違いだろうけど、
誕生から15年とか経過してここまで普及しないXAML系はやっぱり根本的にどこか問題があるとは思うね。
2021/02/11(木) 12:51:30.38ID:zGBoORUF0
>ここまで普及しない

そもそもこれ事実かねぇ?単に5chでアンチWPFの声が大きいだけにも思うが。
2021/02/11(木) 13:01:06.47ID:bJBhJ33y0
初心者スレでイキってないでそろそろこっちへ行け

WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463/
2021/02/11(木) 13:05:05.39ID:h8j/NKIWM
だって専門スレだと笑い者にされる馬鹿にされるんだもの
2021/02/11(木) 16:31:22.52ID:PvN170ep0
>>588
これは同意

QtのQMLとかと比べると
XAMLが不必要に冗長でノイズが多いのがよく分かる
https://doc.qt.io/qt-5/qmlfirststeps.html
2021/02/11(木) 17:04:29.55ID:zGBoORUF0
その辺の印象はやっぱりxml自体に馴染みがあるかどうかで違うんだろうな。
自分は独自文法よりxmlの方がよっぽどありがたいが。

あと現実問題として、サードパーティのコンポーネントを追加するなら名前の
衝突をを考慮しないとならないが、xmlなら名前空間が規格に含まれているので
こういった用途に適している。
2021/02/11(木) 17:34:42.76ID:89K1HM4Z0
>>592
Blendを作る為に必要だった機能だからね。
使わなきゃ意味...

>>593
XAMLとその上に構築された
MVVMライブライリがゴッチャになってるね。

XAMLのタグはC#で簡単に作れる事に
気づけてない人の割合は99%ぐらいなのかな?
2021/02/11(木) 17:42:30.14ID:k5l1P+DH0
リソースに対する優位性は?
ロード時間を犠牲にするだけのメリットが
無いと選択されないな
2021/02/11(木) 18:13:31.33ID:MqaoYapD0
winformと同じくらいのコード量で作れるようにしてくれないと困るわ
2021/02/11(木) 18:28:09.94ID:bJBhJ33y0
>>596
老害はそのままWinForms使ってなよ
2021/02/11(木) 19:32:48.45ID:MqaoYapD0
なんかイキってるやつがいるな
2021/02/11(木) 19:47:54.21ID:k5l1P+DH0
pinta も paint.NET もWPFを採用していない
事が全て(=向き不向きがある)
だと思うのだけどね。

信者はそれを受け入れられないw
2021/02/11(木) 20:05:19.03ID:qDEqQMnn0
WinFormsに回帰せよ
見た目は最新のモダンなGUI部品、
中身はWinFormsってのも不可能じゃないでしよ、頑張れよMS
2021/02/11(木) 20:09:34.00ID:7n3rG35h0
もうQtでよくね?と思う
商用もOKっぽいし
2021/02/11(木) 20:13:58.80ID:k5l1P+DH0
QImageかQPixmapがMatサポートしたら
考える
2021/02/11(木) 20:22:34.99ID:zGBoORUF0
>>599
よりによってWPFリリースより前に開発されたソフトを持ち出す頭の悪さ
2021/02/11(木) 20:28:55.42ID:k5l1P+DH0
>>603
WPFは2006年。pintaは2010年。
4桁の比較も出来ない馬鹿は死ね
2021/02/11(木) 20:45:16.85ID:MZXX+vIJ0
>>600
賛成
2021/02/11(木) 20:48:28.14ID:zGBoORUF0
pintaはPaint.NETを参考にクロスプラットフォーム対応でGTKで開発したもの
元のPaint.NETの開発は2004年
2021/02/11(木) 23:20:50.41ID:89K1HM4Z0
ちょっと戻って整理してくれ。

WPFは従来型(コードビハインド)での実装も
根本レベルでサポートしてるのに、
なんでwinFormsに回帰したいん?
2021/02/11(木) 23:42:04.25ID:zlnnHWka0
>>596
自分で書かなきゃならないコード量ってそんなに違ったっけ?
このまえ「WinFormsぐらいの気軽」なソフトを WPF で作った時は自分で書いた量はそんなに違わなかったような。
2021/02/12(金) 00:29:54.50ID:STyCrufi0
Wpfは、Prism.Unity等のDIコンテナ使う前提で設計すると、コード量は却って少なくなるんじゃね?
DIそのものじゃないが、Event Aggregatorなんか凄く便利だ
610デフォルトの名無しさん (ワッチョイ 9354-cU8Z)
垢版 |
2021/02/12(金) 02:33:39.65ID:8skgNT+D0
非同期の勉強してるんですが、
1つの処理を非同期にしたら、それを呼び出すメソッドも、更にそのメソッドを呼び出すメソッドも非同期に・・・・
って感じになってしまうんですが、ピンポイントで非同期にして上手い設計にするコツを教えてください。
2021/02/12(金) 03:41:53.86ID:jLDSfmCza
>>610
煽る意図は全然ないつもりだけど、
そもそも非同期が何を意味してるのか理解しているように聞えないので
まずそれを理解するのが先だと思うよ。

設計とかその後の話でしょ。
2021/02/12(金) 04:13:40.25ID:BHIDBrst0
>>610
非同期の勉強を始めると一度はぶつかるよね
同期メソッドから非同期メソッドを呼び出せばいいだけでググれはすぐでてくると思う
2021/02/12(金) 04:24:05.42ID:BHIDBrst0
>>610
補足だけど設計という話になると、非同期メソッドを呼び出しているメソッドが非同期メソッドじゃない様な設計をいいとは思わない
614デフォルトの名無しさん (ワッチョイ 9ebb-9N8P)
垢版 |
2021/02/12(金) 04:35:12.34ID:0YHTI9ak0
でもこう間違ったのはよく理解できる
結構な数の入門書やブログに、こういった間違った記述があるんだよな
2021/02/12(金) 04:43:36.86ID:NIOdbtDV0
ありがとうございます。ググってみました。

非同期処理の結果を受け取るために、Result ばっかり使用していたのですが、デッドロックするという情報を見て脳死してました。

・戻り値が欲しい場合は呼び出し元の同期メソッドで、GetAwaiter(false).GetResult();
・非同期メソッド内で処理完結させたい場合は、GetAwaiter(false).OnCompleted();
・同期メソッド内で非同期処理を完結させたい場合は、Task.Run();
をすればとりあえず大丈夫そう?という感じみたいなので、これをベースに考えてみます。

今勉強で作ってるのが WinForms アプリですが、多くの処理の起点が戻り値 void のイベントハンドラで、
GetAwaiter(false) にすれば、空いてるスレッド使うことでデッドロックのリスクも下がる(なくなる?)みたいなので、試行錯誤してみます。
2021/02/12(金) 05:48:58.46ID:jWNhPSPe0
>>615
それはResult云々というより変な場所でawaitしてるとじゃないの?
Awaiterは直接扱う物じゃないしConfigureAwaitの間違いだと思うけど
基本的にはUIスレッドで待つ・結果を得るならTaskをawaitするだけ
ライブラリ作るとか、妙な組み方しなければ意識する必要はないはず

元スレッドを解放したい場所(多くの場合UIスレッド)でawaitを使う
非同期処理ならば結果を取り出して返すのではなくTaskを丸ごと返す
勿論それが絶対ではないが、大抵の場合はそれで済むんじゃないかな
あとはProgress<T>とかContinueWithとかTaskExtensions.Unwrapとか
2021/02/12(金) 09:14:15.17ID:Sw85Yz/U0
>>600
WinFormsは要素を大量生成するとバカ重くなるという現代GUIには向かない根本的欠陥がある
WinFormsもといWin32はコントロール一つ一つがCreateWindowで生成されるウインドウだからな

その点WPFはWindowクラス以外は基本「ただの絵」であるため大量生成してもそこまで重くならない
が、WPFは抽象化に抽象化を重ねまくったせいで初期の時点でかなり重いという元も子もない産物だが
2021/02/12(金) 09:30:08.77ID:1LnGwNFm0
WPFは無かった扱いにしてパフォーマンスも記述も洗練された奴を作り直してくんねえかな
悪くなかったとしても15年前のアーキテクチャだ
バージョン2が出てもいいだろう
619デフォルトの名無しさん (ワッチョイ a701-pCKf)
垢版 |
2021/02/12(金) 10:18:15.52ID:ecic4es+0
>>618
それが、こんどのMS流 MVU(Model-View-Update)ジャマイカ?
https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/
https://forest.watch.impress.co.jp/docs/news/1254643.html
620デフォルトの名無しさん (エムゾネ FF32-olyV)
垢版 |
2021/02/12(金) 13:13:53.93ID:x9NfpsA7F
yield
2021/02/12(金) 19:15:40.43ID:3JpcuYvx0
イエーイ
2021/02/12(金) 19:53:50.62ID:Ah/zVhy20
遺詠
2021/02/13(土) 23:26:09.07ID:zYMuRkWP0
WPFはもうサポート終了にして終わりでいいのではw
XAMLがクソ過ぎるw
もっとマシなものを作ってほしいわ
2021/02/13(土) 23:33:59.55ID:x5WG3KQe0
新しいものが出たってどうせついてこれないんだからそのままForms使ってればいいんでない?
2021/02/13(土) 23:36:28.82ID:+40inVMc0
>>623
XAMLじゃなくてMVVMじゃねえの?
WPFはwinFormsの上位互換だが。
2021/02/13(土) 23:36:39.68ID:gxnJuOwS0
あからさまにメリットなかったやん
書籍も全くない有様
2021/02/14(日) 00:04:22.88ID:a94i0UVza
メリットがないは言い過ぎで、レイアウトやデザイン性の自由度は明らかにFormより圧倒的に高い。
反面GDI+の機能を完全に包含してない、みたいな問題点もあった。
2021/02/14(日) 00:31:12.63ID:wyKYn9A/0
こんど WPF + VMU で
少し状況かわるんじゃねーーの。
2021/02/14(日) 00:31:45.69ID:wyKYn9A/0
WPF + MVU
2021/02/14(日) 00:44:18.09ID:D24G58JB0
>>624
ホントそう思うしMSも下手にWinFormsと同じようにイベントハンドラー書けるようにするもんだから>>625みたいに上位互換とか勘違いする奴が出てくる
別物としてMVVM守んねーと書けないからちゃんと勉強しろ、できねー奴は切り捨てる!
ぐらいすればいいのに
2021/02/14(日) 00:49:41.65ID:HSnUb3X8p
で、MSが開発者から切り捨てられるわけですね
笛吹いても誰も踊らない
2021/02/14(日) 00:50:37.43ID:x2D1GnEN0
じゃあ、それができてるサンプルないの?ってゆーたら1個も出てこなかったじゃない?
2021/02/14(日) 00:51:52.68ID:wyKYn9A/0
基本線で上位互換です。
@ WPF + イベントハンドラー
A WPF + MVVM
B WPF + MVU
メジャーなもんでもこんなに...
2021/02/14(日) 00:52:35.39ID:x2D1GnEN0
この世のどこにもないものを何故か偉そうに語ってたってのが真相
2021/02/14(日) 00:55:34.53ID:KRyWJVgF0
XPSをどうしたいのか?とか
疑問は尽きないよな
2021/02/14(日) 01:01:03.63ID:Vd2M5/i80
WinFormsと同じコントロールを用意しているなら上位互換だけど
WPFはコントロールの数は減っているし、同じ名前ですらないし
ちょっとしたツール作るだけならWPFで作る理由が全然無いな

世に売るようなものでデザインとかスケーリングとか考慮するなら
WPFでもアリだろうけど、今はelectronとかで作ったほうがmacにも対応出来るし
WPFはもう過去のものという感じがするわ
2021/02/14(日) 01:16:47.00ID:F5r/6Yw/0
業務アプリだけど、WPF出始めから採用して、全然問題なくみんな移行できたよ。
2021/02/14(日) 01:32:57.20ID:a94i0UVza
前も書いたかもしれんけどデータ数が多い折れ線グラフなんか実装しようとすると
行き詰るんだよねWPFは。これでWPFが嫌いになった。

あと、これは勉強不足で勘違いしてるかもしれないけどGDI+みたいに印刷と画面を
透過的に扱えない。
2021/02/14(日) 01:45:32.23ID:wyKYn9A/0
MVVMで使ってるコントロールも
内部実装はMVVMしてませんしねwww
2021/02/14(日) 01:46:58.58ID:x2D1GnEN0
酷い裏切り行為だな
2021/02/14(日) 01:51:03.43ID:rF0WajFI0
コントロールをMVVMにする意味あるのか
642デフォルトの名無しさん (ワッチョイ a701-pCKf)
垢版 |
2021/02/14(日) 02:02:16.26ID:wyKYn9A/0
>>641
無いです。
外向きにMVVM対応させて内部実装は普通の実装です。
まあ最短高速な実装です。

昔クラスが1000以上あるでかいグラフコントロールを改修したときも、
内部はMVVMじゃなく普通の実装でしたし、
それ以外の関連コントール(とある会社のWFPコントールスイート製品)
もそんな感じでした。
2021/02/14(日) 08:37:53.56ID:ZrfffQoz0
chartコントロールが標準で用意されてないのが気に入らん
上位互換ならコントロールもwinform以上用意しとけよ
2021/02/14(日) 09:03:10.41ID:D24G58JB0
そもそも上位互換って言ってるのはMSじゃなくて>>625だし
2021/02/14(日) 09:16:57.56ID:KRyWJVgF0
禿道
2021/02/14(日) 09:23:18.05ID:BvP4KASJ0
>>627
そのGDI+ももう明確にレガシーとされたしね。Forms使ってる人もDirectXにしろってことなんだろう。
2021/02/14(日) 09:25:17.46ID:KRyWJVgF0
ザマリンはskia
2021/02/14(日) 09:33:25.22ID:q1FxdJ8A0
formと互換性あるとかかなり痛い人だな
2021/02/14(日) 11:00:50.44ID:zLYzvO1s0
>>643
作ろうと思えば作れるだけマシ
WPFはちょっと頑張れば最新ゲームのUIかのようなトリッキーなものも普通に作れるからな
WinFormsで同様の事をしようとするとOnPaintオーバーライドするなりしてGDIやDirect2Dで自力描画しないといけない(描画のみならずマウスの感知動作なども自力計算)
実際俺は自力描画でWinForms版マテリアルデザインとか昔作ってたけど
650デフォルトの名無しさん (アウウィフ FFc3-olyV)
垢版 |
2021/02/14(日) 11:35:44.81ID:PGTjJwEIF
+1
2021/02/14(日) 13:02:54.63ID:QrfVAGKh0
>>649
俺もWPFでそれなりのことをやってるが、
そもそも業務アプリにはそんな「トリッキー」な機能は要らん
他の人も言ってるが、WinFormsで充分
…という話がまだ理解できないのか?
2021/02/14(日) 13:08:44.18ID:n35aAobg0
テンプレに書かれている日本語理解できないのか?
2021/02/14(日) 13:20:53.69ID:UC+EmpeR0
>>652
日本語初心者なんでしょう
2021/02/14(日) 13:22:05.52ID:BvP4KASJ0
作ろうと思えば作れるって話なのに、そんなもの要らん→だからFormsで充分、と
飛躍するところがいかにも頭が悪い。
2021/02/14(日) 13:25:35.27ID:zLYzvO1s0
>>651
別に俺はWinForms要らないとも言ってないしWPFマンセーする気はない
小規模アプリであれば「WinFormsで十分」は同意だけど、中規模以上だと何だかんだでMVVMのが生産性高いしカスタム要素が必要になる率も高いから「WPFで十分」も同様に言えるんだけどな
まぁ俺はそもそもqt派だからもう全然まともにデスクトップ開発でC#使ってないが
2021/02/14(日) 13:35:12.11ID:N/o0G9JEM
トリッキーな機能は要らないからプレゼンテーションはフレームワークにおまかせして
人間はモデルの実装に集中しようぜ
それができるのがMVVM、MVUだよって話だろ
WinFormsだと一番省力したいプレゼンテーションで疲弊するじゃん
657デフォルトの名無しさん (ワッチョイ a701-pCKf)
垢版 |
2021/02/14(日) 13:39:25.24ID:wyKYn9A/0
ご移動下さい。
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463
2021/02/14(日) 14:04:10.76ID:k4XbJN7x0
MVVMなんかいらないよ
いらないから誰も使ってないんじゃん
2021/02/14(日) 14:14:37.91ID:/ikZE8v50
MVVMは単なるXamlの付属品じゃなくて、Prism.Unityを中心としたページ遷移型のアプリケーション構築
EventAggregatorによる疎結合のイベント通知、DIコンテナによるモジュールの管理なども有る
勿論web系でも使われている技術だけど、Formsではあまり使わない技術だね
ここらへんを一度使っちまうとFormsには戻りたくなくなる
2021/02/14(日) 14:34:25.50ID:k4XbJN7x0
>>659
嘘じゃん
画面直したら処理も書き換えだよ
そんな嘘ばっかり言ってるから誰も相手にしなくなった
2021/02/14(日) 14:43:14.04ID:UC+EmpeR0
冗談のつもりだったのにホントに日本語理解できてないのか?

ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
https://mevius.5ch.net/test/read.cgi/tech/1612522463

移動できない奴は、バカなのでぼくの主張は間違ってますって言ってるのと一緒だと気付けよ
2021/02/14(日) 16:08:58.24ID:HSnUb3X8p
全部Microsoftが悪い
2021/02/14(日) 17:40:25.04ID:qsBeAXJea
何度も言うけどこんな過疎スレでなんで一生懸命「交通整理」してるのか、
その自分の動機の卑しさを自覚できない奴が一番バカっぽいと思うよw

誰かのため?みんなのため?
絶対違うよねそれ。
いやこれマジで大丈夫か。
2021/02/14(日) 19:57:36.92ID:xK5MF7GG0
>>616
615じゃないけど質問です
>基本的にはUIスレッドで待つ・結果を得るならTaskをawaitするだけ
wpfで結果を得てプロパティを変更しイベントが発生する場合
Dispatcher.BeginInvokeは必要ですか ?
2021/02/14(日) 20:12:15.63ID:ZZdmuf4k0
>>663
移動しない理由は何?
頭のいい回答を期待してる。
2021/02/14(日) 20:44:22.17ID:xqD1GcXH0
>>663
死ねよ
2021/02/14(日) 20:53:10.91ID:K2VDjDyL0
Ruby on Rails で、控えめなJS フレームワークの、Stimulu を使えば良い

規約で、HTML のdata-controller 属性で、JSファイル名・コントローラーが決まるので、
そこにイベント処理を書くだけ

DOM・コントローラーは、多対多

1つのDOMは、複数のコントローラーで処理できる。
HTML内で、同じコントローラーを複数定義できる
2021/02/14(日) 21:14:32.55ID:RwzQEShB0
>>664
引用してる文と質問内容が全然別物に見えるので回答できん
とりあえずINotifyPropertyChangedでのBindingならPropertyChangedは別スレッドで発生させても問題ない
2021/02/14(日) 21:22:32.21ID:EcQCs95s0
>>664
そのレスはTask使ってるのに一々同期的に取り出してそうに見えて
固まらせたくない箇所を非同期にすれば良い的な意味合いで質問と噛み合うかどうか

そのプロパティを変更するのがUIコントロールでスレッドが異なれば必要…なんだけど
TaskをConfigureAwait(false)してなければawaitは待機元スレッドに帰ってくるよ

BeginInvokeはTaskベースで使うかな?別スレッドから実行させるならProgress<T>とか
4.5未満としてもSynchronizationContext.PostやTaskSchedulerを指定してContinueWithかな
2021/02/15(月) 08:14:10.72ID:rMuvZP7r0
surfaceやipadなどで使えるクロスプラットフォームの、ペイントアプリを作ってみたいのですが、
C#が採用されているペイントソフトや3DCGソフトで有名なのってありますか?
2021/02/15(月) 08:52:18.66ID:URqj7Tc+0
>>670
Paint.NET
2021/02/15(月) 08:53:55.45ID:efsWz5OT0
>>670
Paint.NET
2021/02/15(月) 09:34:24.49ID:D0ANu2Du0
>>670
https://www.pinta-project.com/

なお paint.netのソースはwin32Api 知ってないと
キツいぞ。
projectはformだがwindow周りの実装は
ほぼwin32apiだ
2021/02/15(月) 11:14:53.43ID:r1R8Fv3d0
int port;
に対して
if( port < 1 && 65535 < port )
みたいなtrueになりえない条件文ってコンパイル時の警告出せないんでしたっけ?
2021/02/15(月) 15:06:53.89ID:Hxbo2jbM0
>>668,669
質問が下手ですみません。質問を変えます

private async void Button_Click(object sender, RoutedEventArgs e)
{
Button.IsEnabled = false;
await Task.Delay(2000);
Button.IsEnabled = true; // *1
}
タスクが完了したときにUIスレッドが作業中だったとします。
そうすると、UIスレッドは作業を中断して *1を呼びますよね。
この解釈で正しいですか ?

だとすると、Buttonに対して
Button.IsEnabled += Button_IsEnabled がある場合、
UIスレッドが作業中だとUIスレッドは混乱するのではないかと思っています。

混乱を解消するには、awaitの後処理にはUIスレッドが暇になるのを待つ必要があるのではと考え、Dispatchr.BeginInvokeを思いつきました。
ただし、BeginInvokeを追加した例が見当たらないので、もっとうまい手があるのかもしれないと思い、質問しました。

長文失礼
2021/02/15(月) 15:24:35.05ID:89MhGAsi0
実際の実装は知らんがWindowsのメッセージループを処理するスレッドがUIスレッド(メインスレッド)だろうから、その手のスレッドプールで処理されるものは処理が終わった時点でメインスレッドにメッセージをポストしてメインスレッドがメッセージを受信したときに終了後の処理がされると言う流れかと
2021/02/15(月) 16:12:35.84ID:CfDXxyFV0
>>675
TaskとThreadを混同してるってオチ?
君が懸念してることは別Threadを利用したときに起こる事であって、DispatcherInvoke類も"別Thread"からUI操作を行うときに使う機能
2021/02/15(月) 17:54:07.29ID:ytBU07x20
>>675
作業を中断して*1を呼ぶというのは不適切に感じます。中断というならButton_Clickがawaitで後続処理が保留になる所でしょうか
そうなると*1が再開される手順ですが、UI処理はメッセージ単位なので>>676が仰る様なその合間に完了を感知してになると思います
このメッセージキューがパフォーマンスや互換性問題から専用スレッドによる処理が前提なのでBeginInvokeなどが必要になる訳です

翻ってawaitを使うとその辺りをやってくれます。FormsやWPFで異なる手順を抽象化したものがSynchronizationContextやTaskSchedulerですが
それらを推し進めて簡便に扱えるようにしたのがasync/awaitです。※同期的待機内で非同期待機とかしなければそんなに留意する必要はありません

技術的な解説については↓等が参考になると思いますが、直下のコードについてはTaskベース世代のものではないですね
https://docs.microsoft.com/ja-jp/dotnet/desktop/wpf/advanced/threading-model?view=netframeworkdesktop-4.8
2021/02/15(月) 19:20:24.59ID:Hxbo2jbM0
>>677,678
私の例で *1のプロパティ変更と通知ではメッセージループを使っているのかもしれませんが、*1の呼び出しは awaitの後続処理ではないでしょうか

次の例はまずいのではないでしょうか。
private async void Button_Click(object sender, RoutedEventArgs e)
{
await Task.Delay(2000);
MyCLREvent(this, EventArgs.Empty);
}
2021/02/16(火) 00:47:37.27ID:yRjou++30
なにをしてまずいというのかはわからんが
各所でThread.CurrentThread.ManagedThreadId表示させて
どこでどのスレッドになってるか確認してみれば?
2021/02/16(火) 01:07:19.33ID:fNU3Qny80
>>679
*1はawaitの後続処理だけど、UIスレッドが空くまで実行されない
2021/02/16(火) 09:52:46.68ID:ZNVxOhBd0
ボタン2つ用意してこういうので確認してみては
async void btn1_Click(object sender, RoutedEventArgs e) {
await Task.Delay(2000);
Trace.WriteLine("btn1");
}
void btn2_Click(object sender, RoutedEventArgs e) {
for (int i = 0; i < 10; i++) {
Thread.Sleep(300);
Trace.WriteLine("btn2");
}
}
2021/02/16(火) 22:48:01.66ID:/yXZfRwG0
csvで数字を読み込んで、それをグラフ化して表示して、GUIの画面ごとスクリーンショットして保存するWPFプログラムを作ってます。
グラフはwindowsformhostを使ってchartコントロールで表示させています。

VisualTreeHelperでGUIの縦横サイズを取得して、RenderTargetBitmapにDrawingVisualを渡してスクリーンショットしているのですが、chart部分が保存されません
Graphics.CopyFromScreenというのも試してみましたがこちらではchartも表示されるものの、ウィンドウのドロップシャドウみたいなものが一緒に保存されてその分縦横がズレてGUIの右下が見切れます。
解決策を教えてください
2021/02/16(火) 22:58:23.73ID:92chE2An0
allowtransparencyがtrueになってるとか?
2021/02/17(水) 03:55:15.13ID:eRzk3aeWa
>>683
違ったらごめん
これじゃダメなの?
http://mevius.5ch.net/test/read.cgi/tech/1527325729/533-534
686デフォルトの名無しさん (オッペケ Src7-adQg)
垢版 |
2021/02/17(水) 14:41:28.07ID:UPYA2zP2r
ディスプレイ上の座標を指定して、
画面の指定部分をそのままフォームに表示させたいと思っています
まずこれが可能なのかが資料見つかりませんでした
可能なら、毎回スクショ切り取って保存して表示、とかせずに、リアルタイムで反映させたいです

また、そのようにして表示した画面に、拡大や色反転などの加工を行うことは可能でしょうか?
2021/02/17(水) 15:11:52.55ID:JjIbIhY/0
この辺使ってどうにかなりそうかな
試してないけど
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.screen
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.graphics.copyfromscreen
2021/02/17(水) 16:27:46.54ID:VhEokLWI0
可能かどうかで言えばWindows標準の拡大鏡ツールで実現できてるから可能といえる
C#で実現するのにはまあまず687を試してみればいいんじゃないかな
あと著作権保護されてるコンテンツを表示してる部分は多分無理
2021/02/17(水) 21:03:31.28ID:D9ZFiUm80
PaintWindowで取れないかな
690デフォルトの名無しさん (ササクッテロ Spc7-Jyxv)
垢版 |
2021/02/17(水) 23:31:19.68ID:5a8siaYVp
リアルアイムでやるならWindows.Graphics.CaptureやDesktop Duplication APIだな
2021/02/17(水) 23:35:50.45ID:wHZs7f540
VSのProjectの構成って何仕様書で定義するものでしょうか?
外部仕様では見たこと無いのですが世間様はどうしてるんだろうと
2021/02/18(木) 00:11:30.22ID:c2uEmfa00
安心の俺様仕様
2021/02/18(木) 00:19:08.60ID:80X4NLoW0
一般的には詳細設計で各プロジェクトの構成定義する
2021/02/18(木) 08:41:32.49ID:K3tSL8mT0
世間様じゃ詳細設計で決めてるのですね
参考になります
外仕作成でプロジェクトの構造考えずプロトタイプもりもり作っていたので気になってました
2021/02/18(木) 09:18:08.93ID:fjuXbMGDa
んなもん設計書にはかかないよ
696デフォルトの名無しさん (ワッチョイ 96bb-9N8P)
垢版 |
2021/02/18(木) 09:27:17.33ID:jXEmO6nJ0
Swiftスレにも似たようなこと書いてる奴がいるから、きっとこのことをまとめてアフィブログにでもするんだろう
697デフォルトの名無しさん (ラクッペペ MMde-HHI4)
垢版 |
2021/02/18(木) 10:41:06.50ID:4sNPnSsIM
Debug.Printの引数はリリース版でも評価されますか?
2021/02/18(木) 12:42:01.95ID:DdhrYGF40
現実的にプロジェクトの構造なんて誰も気にしない
2021/02/18(木) 18:00:30.64ID:EVRbmhyV0
プロジェクトの構成なのか構造なのか
そもそも構成とか構造って具体的に何?
2021/02/18(木) 22:14:18.02ID:UlBwu06v0
Ruby on Rails は、設定よりも規約

プロジェクト構成・名前付けルールなど、すべて決まっているから、
誰でも、同じ構成で作る

これが「レールに乗る」と言う事。
Rails のルールから外れて、独自なものを作ってはならない

オレオレ構成みたいなものを認めていない
2021/02/19(金) 00:45:43.92ID:GwnD0oPh0
なんでRoRの話が突然出てくるのか
2021/02/19(金) 01:48:24.06ID:8tmtltZz0
>>701
他のスレ追い出されたやつだから
2021/02/19(金) 02:16:52.43ID:+BesUuNA0
定期的に沸くたびに丁寧に相手するから居着いたパターン
2021/02/19(金) 05:03:59.49ID:Eig2tonS0
こいつわざわざpythonスレにやってきて時代遅れの遺物を押し付けに来る荒らしだろ
2021/02/19(金) 05:37:12.65ID:473cJTkx0
ム板全域にいるよねこのガイジ
bashスレにもいた時は頭が痛くなったな
ふれあい作業所とかで遊んでればいいのにね
2021/02/19(金) 08:26:30.93ID:qL15PbA4D
相手するから喜ぶ
粛々とNGしとけ
2021/02/19(金) 09:49:46.59ID:SQn3IdCjM
ルビキチが珍しく質問に合ったレスを返してるのにお前らヒドイなw
2021/02/19(金) 09:55:27.59ID:SQn3IdCjM
プロジェクトのディレクトリ構成はアーキテクチャ設計を反映したもの

アーキテクチャ設計が詳細設計に含まれてるならで詳細設計段階で決める

Railsのようにアプリの機能構成に関係なく一律同じディレクトリ構成にするのもそれなりのメリットがある
709デフォルトの名無しさん (エムゾネ FF1f-ZFay)
垢版 |
2021/02/19(金) 15:40:30.15ID:LoU7pdW5F
>>707
日頃の行いが相応に報われてるだけ
フェミフェミ噛みついて本気でフェミに迷惑掛けてるのがフェミ
710デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/19(金) 18:51:07.37ID:xy8YPNBA0
初心者です。画像の一部をクリックすると画面遷移を行うようなプログラムを
作りたいと考え、自分なりに作ってみたのですが
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class NG2to3 : MonoBehaviour
{

Vector2 Pos;
void Start()
{}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Pos = Input.mousePosition;
if (-15 <= this.Pos.x && this.Pos.x <= 15 &&
  -35 <= this.Pos.y && this.Pos.y <= -15 )

{
SceneManager.LoadScene("scene3");
}
}

}
}

このプログラムで指定したPosの範囲の場合画面遷移を行いたいのですが、
画面の至るところをタッチすれど遷移してくれません。
どこが間違っているのか教えていただきたいです。
2021/02/19(金) 19:22:01.16ID:YkVGv+Id0
>>710
https://docs.unity3d.com/ja/2018.4/ScriptReference/Input-mousePosition.html
読めよw
どっちにしても値は
xは0〜Screen.width - 1
yは0〜Screen.hright - 1
やろ
2021/02/19(金) 19:42:33.49ID:Eig2tonS0
ドキュメント読むのもそうだけど実際 にmousePositionの値を見たら良いと思うよ
2021/02/22(月) 02:08:01.45ID:aMOGcJaK0
構造体とリストどっちがいいとかあるの?
2021/02/22(月) 07:33:16.03ID:DBdQ6Dl10
どちらもいい
2021/02/22(月) 08:40:26.66ID:q2LnICsL0
構造体リストにしよう
2021/02/22(月) 09:21:08.61ID:KlgM0RdP0
>>713
まったく用途が違うから、普通はその二つでどちらにするかを迷うことはない
2021/02/22(月) 11:28:40.84ID:J1FRHNv90
>>713
夕食は弁当と定食どっちがいいと思う?
718デフォルトの名無しさん (ワッチョイ f361-cyI8)
垢版 |
2021/02/22(月) 18:39:45.74ID:5BxgjfJ50
リストじゃなくレコードじゃね?と言ってみるテスト
2021/02/22(月) 19:19:17.10ID:DBdQ6Dl10
structとclassの使い分けだったら質問の意図も分かるけど
720デフォルトの名無しさん (ラクッペペ MM7f-0TpN)
垢版 |
2021/02/22(月) 19:22:09.14ID:rk3Z26pVM
カレーとコンビニ、どっちにする?
721デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/22(月) 21:06:02.69ID:8s+nkcdt0
スクリプトから条件で画像を表示させたいんですが、張り替えは出来ても新しく出現させることってできない?
2021/02/22(月) 21:22:09.87ID:7Jd6R0uh0
質問下手すぎでしょ
2021/02/22(月) 21:26:08.64ID:6SeUKgvV0
日本語でよろ
2021/02/22(月) 21:42:20.42ID:0aX736QQ0
I want to display an image conditionally from a script,
but can I make it appear new even if I can replace it?
2021/02/22(月) 21:45:15.13ID:/lIHFE+b0
5W1Hでよろ
2021/02/22(月) 23:51:22.27ID:nluN8fGs0
C#でWin32のHeapAlloc(GetProcessHeap(), 0, 0x1000);みたいなことするとGCと競合してバグるったりするの?
727デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/23(火) 00:10:32.83ID:qmo9+9Uk0
すいませんw
2Dunityでボタンを押したら画像を表示できるようなプログラムを作りたいのですが、
調べてみても元々ある画像をスクリプトによって別の物に変更するものはあれど
ボタンを押して0から画像を表示させることができるようなものを
見つけられなかったので、できないのかなと。。。どうなんでしょう?
2021/02/23(火) 00:26:01.44ID:DnkfMlNP0
できる
729デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/23(火) 01:56:55.10ID:qmo9+9Uk0
>>728
詳細を教えていただきたいですw(__)
2021/02/23(火) 02:13:02.76ID:6EEdG0Ut0
>>726
アンマネージドだろうから特に影響なさそうだけどね
2021/02/23(火) 09:57:34.63ID:kvat21cB0
Windows下におけるmalloc = HeapAllocだけど
どこかしらでロードせざるを得ないネイティブdll内で当然の如くmallocは行われまくってる訳だからその程度でバグったら言語として成り立たない
2021/02/23(火) 10:05:27.49ID:IRMSQgrY0
バグったらHeapDestroyすれば良いじゃない。by マリー
2021/02/23(火) 10:05:48.25ID:OuCytsjB0
>>727
'c# image 生成' で調べれば?
2021/02/23(火) 10:07:40.79ID:8QyPv/It0
unityでの載せ方がわからないんじゃね?
2021/02/23(火) 10:10:41.92ID:8QyPv/It0
c# image create unity
でググった

こんなん?
https://teratail.com/questions/42899
736デフォルトの名無しさん (ワッチョイ 035f-pQAD)
垢版 |
2021/02/23(火) 12:52:43.06ID:qmo9+9Uk0
>>735
こちらを参考にSetaActiveを使えばできました!
ありがとうございます。
2021/02/23(火) 17:06:07.35ID:Ke2QO8XG0
質問よろしくお願いします。

uint 型の二つの値 x, y について、

x = 0b_0101, y = 0b_0110

のように最上位の 1 のビットの位置が同じなら true を返し、

x = 0b_0101, y = 0b_0011

のように最上位の 1 のビットの位置が違うなら false を返す関数を
作るというクイズをやっていて、

static bool BitsEquals(uint x, uint y) => (x ^ y) < (x & y);

という答えを考えました。
しかし、どうやらもっと演算の回数が少なくてすむ方法があるらしく、
それがどうしても分かりません。

どなたか良いアイディアをお持ちの方がいらっしゃれば教えていただけないでしょうか。
どうぞよろしくお願いいたします。
2021/02/23(火) 18:54:24.22ID:oVEFpcof0
>>737
あるらしいって、誰かが言ってたならその人に聞けばすむ話でないの?
クイズでも出されたの?
2021/02/23(火) 19:56:17.34ID:8AF7Ea+I0
クイズって書いてあるな・・

>>737
2つ目の例でも最上位ビットはどちらも0で同じように見えるが?
比較する2つの数値はビット長が一緒なのかとか、もうちょい仕様を詳しく
2021/02/23(火) 20:19:12.56ID:lNyBX+Rq0
>>739
最上位ビットではなくて1になってるビットの最上位だぞ
2021/02/23(火) 20:25:36.23ID:BNINfFnp0
>>727
ツー・デュニティって何のことかと思った
2021/02/23(火) 20:26:05.61ID:Ke2QO8XG0
レスありがとうございます!

>>738
> クイズでも出されたの?
おっしゃるとおりです。ネットで調べるのは OK なのですが、
外国語も含めて検索してみても私の力では解決できそうになかったので
こちらで質問させていただきました。


>>739
説明がうまくできなくて申し訳ありません。

x = 0b_0101, y = 0b_0110

の例だと、1 になっているビットで最上位のものが
両方とも下から数えて 3 番目なので true なのですが、

x = 0b_0101, y = 0b_0011

の例だと、x は先ほどと同じですが y のほうは 1 になっているビットで
最上位のものが下から数えて 2 番目なので、false になります。


>>740
補足どうもありがとうございます。
最上位ビット(MSB)というと普通は >>739 さんのおっしゃっているような
意味で捉えられそうなものなので、最初からもう少し丁寧に説明すべきでした。


どうぞよろしくお願いいたします。
2021/02/23(火) 20:26:52.22ID:iu17pC6m0
>>739
> 比較する2つの数値はビット長が一緒なのか
さすがにそれは仮定してもいいんじゃね?
2021/02/23(火) 20:47:25.97ID:8AF7Ea+I0
それなら
2*x<y
でいいんじゃないの?
trueなら一番左の1の位置は同じ
2021/02/23(火) 20:57:42.88ID:iu17pC6m0
>>744
x = 1, y = 1 がfalseになるんですけど…
2021/02/23(火) 21:04:05.18ID:8AF7Ea+I0
それは失礼w

難しいね
y:123456789abcdef
x:12 4   8
2021/02/23(火) 21:55:49.11ID:26JD/Fyv0
演算の回数っていうのがよくわからないが、
BitOperations.LeadingZeroCount(val)
の比較じゃダメなの?
2021/02/23(火) 22:04:06.39ID:6EEdG0Ut0
>>747
普通に考えたら命令ステップ数のことだろうな

今の時点でビット演算2つと比較が1つなので、boolを返す以上は比較は外せないから、これより少ない(軽い)となると、なかなか難しいね
2021/02/23(火) 22:07:00.98ID:iu17pC6m0
>>737みたいに4bit同士程度ならテーブル引くとかでもいいかも
2021/02/23(火) 22:14:05.32ID:6EEdG0Ut0
>>749
uint でって指定されてるわけだから、4ビットで書かれてるのはあくまで例でわかりやすくしてくれてるだけでしょ
2021/02/23(火) 22:33:00.48ID:W3jldd/z0
>>746
return x==y || (2x<y && y<=x);

って感じか?わかりづれぇw
2021/02/23(火) 22:53:10.92ID:W3jldd/z0
なんか違うな。
要は>>746に書いてある通り、xとyが1,2,4,8,16,32・・・みたいに
一番左の1が立ってる同じグループにいるかでしょ?
酔っぱらってて頭まわらんw
2021/02/24(水) 00:39:34.09ID:bQ0lAzRD0
(x^y)<(x<y?x:y)
こんなのはいいのかな?
細かくテストしてないからバグってたらごめん
演算1回比較2回だから演算回数は減ったとも言える
どっちが早いかは最適化とかCPUとか次第な気もするけど
2021/02/24(水) 00:52:24.83ID:jmWlpF6B0
皆様レスどうもありがとうございます。

>>743
> > 比較する2つの数値はビット長が一緒なのか
> さすがにそれは仮定してもいいんじゃね?
補足ありがとうございます。
ひとまず、符号なし32ビット長整数ということにさせてください。

>>744
> 2*x<y
> でいいんじゃないの?
実際、(x ^ y) < (x & y) より簡単なものを探そうとすると
もうそのくらい簡単なものくらいしか候補に残らないですよね。
もしくは、何か発想の転換が必要なんでしょうか。。。

>>745
> x = 1, y = 1 がfalseになるんですけど…
このレスを読んで思ったのですが、
(x ^ y) < (x & y) という計算も x = 0, y = 0 のときは
false になるんですよね。
最上位の 1 の位置を比較するのが目的なので
x や y が 0 のときは気にしなくてもいいのかもしれませんが、
やはりちょっと不自然なので (x ^ y) <= (x & y) のように
等号付き不等号にしたほうがベターでしょうか。
(ただ、
 Math.Floor(Math.Log(2, x)) == Math.Floor(Math.Log(2, y))
 という式は x = 0, y = 0 のとき false になるようです)
2021/02/24(水) 00:54:09.63ID:jmWlpF6B0
>>747
> BitOperations.LeadingZeroCount(val)
> の比較じゃダメなの?
なるほど!こんな関数があるんですね。
BitOperations クラスのドキュメントを読んでみると
「これらのメソッドでは、基になるプラットフォームで使用可能な場合、
 ハードウェアの組み込みを使用します。」
と書いてあるので、良い答えになりそうです。
アドバイスどうもありがとうございます。

>>748
> 今の時点でビット演算2つと比較が1つなので、boolを返す以上は比較は外せないから、
> これより少ない(軽い)となると、なかなか難しいね
難しいですよね?!
普通の演算子だけを使うなら考えられるパターンは限られているので、
やはり拡張命令を使うとかテーブルを用意するとか、
なにか根本的な発想の転換が必要なのかもしれません。

>>749
> 4bit同士程度ならテーブル引くとかでもいいかも
>>750
> uint でって指定されてるわけだから、4ビットで書かれてるのはあくまで例でわかりやすくしてくれてるだけでしょ
>>750 さんが言ってくださっているとおりなのですが、
逆にわかりにくくなってしまったかもしれません。失礼しました。
ただ、普通の演算子を組み合わせるだけの方法ではどうにも手詰まりな気がしてきたので、
テーブルというアイディア自体は検討する価値がありそうです。どうもありがとうございます。
2021/02/24(水) 00:54:22.31ID:bQ0lAzRD0
boolのために比較が必要という前提なら比較は6種
== != < <= > >=
2項演算子は加減乗除商、シフト、and or xorくらい?
演算→比較の順に評価することになるので1比較1演算のパターンはそんなに多くない
全部試したわけじゃないけど無理じゃない?
2021/02/24(水) 00:58:28.94ID:jmWlpF6B0
>>751
> return x==y || (2x<y && y<=x);

>>753
> (x^y)<(x<y?x:y)

色々と考えてくださってどうもありがとうございます。

>>745 さんの猿まねですが、
>>751 さんが書いてくださった式は x = 2, y = 3 のときに false となり、
>>753 さんが書いてくださった式は x = 1, y = 3 のときに true になってしまいますねw

ただ、こうやって苦労を分かち合ってくださるのはとても心が救われます。
本当にどうもありがとうございます。
2021/02/24(水) 01:04:08.81ID:jmWlpF6B0
>>756
> boolのために比較が必要という前提なら比較は6種
> == != < <= > >=
> 2項演算子は加減乗除商、シフト、and or xorくらい?
> 演算→比較の順に評価することになるので1比較1演算のパターンはそんなに多くない
> 全部試したわけじゃないけど無理じゃない?

レスどうもありがとうございます。確かにおっしゃるとおりのような気がしてきているところです。
とりあえずこの前提の場合だけでも (x ^ y) < (x & y) が最善なのかどうか結論を出したいので、
全パターンを網羅して確認するプログラムの作成に挑戦してみたいと思います。(できるかな…(汗)
2021/02/24(水) 01:07:30.18ID:OSOzzlvda
>>737
0を排除できるなら、たぶん
x/y + y/x == 1
になるような気がする。
全然演算の量が減ってる気はしないけどw
2021/02/24(水) 01:08:45.27ID:OSOzzlvda
あ、これじゃX == yの時2になるからダメかw
2021/02/24(水) 01:11:25.71ID:jmWlpF6B0
>>756
全部網羅と簡単に書きましたが、
例えば仮に (20210224 * x ^ y) < 12345 が正解だとして、
しらみつぶしに探してこれを見つけるのは至難のワザですよね。
う〜ん、難しい。。。。
2021/02/24(水) 01:15:30.76ID:bQ0lAzRD0
>>757
もともと提示された式と比較すると同じ結果になるんだけど?
https://sharplab.io/#v2:C4LgTgrgdgNAJiA1AHwAICYAMBYAUBgRjzwDMB7MACgDcBDMAAgEsGBeBzAbmYYB53MAIwD6mAuO5NEiAJR4GChuSp1GAKzYduG/hxFiJDNdLm5F55iQaUAxgAsApjYDWmSkxhqZDAITt7Ts4E7p4yphYRDKgEAJyUACQARFBkwAwOAI4QtAA2IADeTAC+MAz5akWJMpzykebE+AQAbAyCZGQ5DAEubkxQaQAepX1pAJ7erAB81gMMAHoM43wzDABki9V40S1tHV2OLsEjDEPM/Rts05SzC0u8K/ejDAD8JwwgGzW4QA
2021/02/24(水) 01:20:20.17ID:jmWlpF6B0
>>759
> 0を排除できるなら、たぶん
> x/y + y/x == 1
> になるような気がする。

!!!
確かにこれ自体は違うかもしれませんし、計算量も減っているとは思いませんが、
発想の新鮮さは私にとって正直感動を覚えるほどでした。

私は問題文にビットという言葉が出ている時点で数値をビットの並びとしか捉えていなくて、
このレスを読むまで数値を数値として扱うという発想がまったくもって出てきていませんでした。

貴重なアイディアどうもありがとうございます。
2021/02/24(水) 01:22:06.74ID:xxKZPG3j0
>>761
演算子のコストは概ね下記のようになってるので、今のところ 737 の式が一番高速だな

代入、加算、減産、ビット演算 < 乗算 < 分岐 < 除算
765デフォルトの名無しさん (ブーイモ MMe7-Dcdc)
垢版 |
2021/02/24(水) 09:43:01.27ID:BstpO7i2M
NOT(x ^ y) &x &y
766デフォルトの名無しさん (ブーイモ MMe7-Dcdc)
垢版 |
2021/02/24(水) 09:47:44.01ID:BstpO7i2M
ビット反転は ~か
~(x ^ y) &x &y
2021/02/24(水) 10:19:17.50ID:TFahGwNV0
>>764
代入とかってアセンブラ上はmov1命令だけど実際内部ではxorクリアしてから|=してるだろうからビット演算と同列で並べちゃダメだろ
2021/02/24(水) 16:56:51.55ID:seoVzzn4a
仕事でJavaをやるとC#って快適だったんだなと実感する
Javaは開発環境の準備からなにから全てが辛い
2021/02/24(水) 18:14:53.26ID:edAGB3A30
というかjavaはプロジェクト自体が辛いことが多い
客先しかり他のエンジニアしかり
2021/02/24(水) 19:34:45.11ID:lrBUkyKZ0
単価安いし
2021/02/24(水) 21:35:26.39ID:KW+DlOc20
この流れに乗って質問するが、
おまいらはこれからC#とどう付き合っていくつもり?

C#をとことん極めて、新しいバージョンが出れば追い、このまま一生C#と骨をうずめるつもり?
それとも、C#は腰かけ程度と考えて適当に付き合い、もっと良い言語が出たら乗り換えるつもり?

質問を言い換えると、C#ってあと何年ぐらい人気言語の一つとして君臨していられると思う?

Javaがオラ狂うによってほぼほぼ有償化された今、
Javaが失速するのは間違いない
あのJavaが、だ

C#だってそんな日が来るんじゃないの?
来るとしたらどんなオチ?
それとも、親方マイクロソフトだから大丈夫?
772デフォルトの名無しさん (ブーイモ MMff-cyI8)
垢版 |
2021/02/24(水) 21:58:03.72ID:NDokwu7RM
友達以上愛人未満
2021/02/24(水) 22:08:07.59ID:F5qWAR4O0
別れたいけど、できちゃったので。
2021/02/24(水) 22:13:18.72ID:KW+DlOc20
>>772
無駄に幅広いな
2021/02/24(水) 22:17:05.12ID:KW+DlOc20
>>773
惰性で一緒になっても幸せになれんぞ
2021/02/24(水) 22:58:18.77ID:UF3ntcxf0
都合のいい友人
2021/02/24(水) 23:51:18.96ID:K88oDGnD0
テキストエディタとWindowsにデフォで入ってるcsc.exeでできる範囲で付き合っていくわ
GUIもWinFormsで十分
2021/02/25(木) 02:48:18.40ID:A477YYD30
15年前にいつかは消えると思ってたjsが気づけば最前線にいるんだ
先のことなんてわからんからその時の仕事に合わせて適当に付き合ってくだけよ
2021/02/25(木) 07:47:32.19ID:ljkJPR6C0
>>771
プロダクトに最適な言語を使うだけよ
どんな業界でも、年々道具は新しくなるだろ?
プログラミング言語もそれと同じ

中には代々受け継がれた道具しか使わないような職もあるが、それは一般的じゃない
2021/02/25(木) 09:38:17.80ID:BkBvtXEC0
この問題をc#で解こうと思い
https://atcoder.jp/contests/abc106/tasks/abc106_c
このように書いてみたのですが入力例 3が通りません
https://pastebin.pl/view/raw/cbf5d3cd

大変お手数ですがご指摘いただけるとありがたいです。
2021/02/25(木) 09:38:17.80ID:BkBvtXEC0
この問題をc#で解こうと思い
https://atcoder.jp/contests/abc106/tasks/abc106_c
このように書いてみたのですが入力例 3が通りません
https://pastebin.pl/view/raw/cbf5d3cd

大変お手数ですがご指摘いただけるとありがたいです。
2021/02/25(木) 11:44:12.11ID:zlGf24tO0
文字数計算のためのCalcDだと思うけど正常に計算できてなさそう
何日後も引数にして、2日後とか3日後で想定した戻り値になってることをテストしてみた方がいいよ
メソッドを分離することとメソッド毎にテストすることの大切さがわかる典型例だな
2021/02/25(木) 11:45:33.33ID:Kp+Bp4Dl0
>>781
pow(2, 5000兆)の時点で制約のK番目のKはpow(10, 18)以下を楽々超えるな
要するに最初のシード値を律儀に全部計算するまでもない
2021/02/25(木) 13:46:32.79ID:5iIS9NC9a
>>781
https://ideone.com/mLheCz
書きなぐりで何の検証もしてないから違うかも
問題を間違って理解してなければ全然難しいと思わなかったよ
2021/02/25(木) 13:54:37.81ID:HJ9YlmBf0
ソースコード見えないけど5000兆なんて時間計算量も空間計算量も現実的な値にならんから愚直に文字列計算する方法じゃ無理
最初が1以外なら答えは常に最初の桁の数字になって、そうじゃないときは1じゃなくなるまでの桁数よりKが小さいか同じなら1でKがそれより大きいなら1以外で最初に現れた数字が答え
786デフォルトの名無しさん (アウアウエー Sadf-pQAD)
垢版 |
2021/02/25(木) 13:58:47.94ID:5iIS9NC9a
パラメータの与え方が間違ってるなw
Console.WriteLine(mi.GetDigit((long)5e15, 9460730472580800));
2021/02/25(木) 14:32:33.73ID:zlGf24tO0
>>785
競技プログラミングでそんなひねくれた回答に何の意味があるの?
知らんけどとんち問題じゃないんだから実行時間2sメモリ976MBという制限で作れてるのか、出来てなかったら減点とかそういう感じでしょ
2021/02/25(木) 14:45:28.54ID:lgRHqN3Y0
解法を自然言語で書き下しただけなのに対してひねくれた回答ってどういうことだ
2021/02/25(木) 14:48:23.79ID:Odue14P30
競技プログラミングって
そういうやつなのか
2021/02/25(木) 14:56:27.68ID:lnJvnVl60
処理時間短縮のために工夫したアルゴリズムを文章で書いただけじゃん
捻くれたと捉える方がどうかしてる
2021/02/25(木) 15:06:03.06ID:cAbWQIRq0
>>787
競技プログラミングってある種のとんち問題だぞ
2021/02/25(木) 15:24:52.06ID:A477YYD30
競技プログラミングって問題文を読み解きいかに計算量を少なくする解法を見つけるかに特化した問題が多い
プログラミング知識より数学的知識やひらめきのほうが重要なこと多い
大抵の問題はメモリも処理速度も大して必要とせずに数秒以内で解けるような解法が存在してる
2021/02/25(木) 16:05:21.75ID:WNWuE6ey0
若いなあ
2021/02/25(木) 17:09:26.66ID:zlGf24tO0
プログラミング技術を競うものかと思ってたけど関係ないのも多いんだな
まあ今回の問題がそうだったって感じなのかもしれないけど数値設定がやってくれと言わんばかりにおかしいもんな
2021/02/25(木) 17:23:13.48ID:Kp+Bp4Dl0
ちゃんとインプットのチェックロジックを作れば初っ端に気付ける事なんだよ
pow(10, 18)はqword範囲内なのに対して1以外の文字長は最小の2だとしても余裕で範囲外だからな
2021/02/25(木) 17:30:29.82ID:BkBvtXEC0
>>784
ありがとうございます、参考になります
でもこのコードだと入力が
1
1

1121
2
の時2を出力してしまうので不正解になります、正解は両方とも1です。

>>785
たぶん785さんが正解だと思います。私は問題文を愚直にシミュレートしたコードを
書いてしまいがちなせいでよく制限時間をオーバーします

>>794
プログラミングの技術力向上のためと思い、やり始めたのですが
これはむしろ算数、数学力の競い合いだなと感じています
2021/02/25(木) 17:46:07.28ID:zlGf24tO0
>>795
一応数学的な話で 2^5000兆>10^18 の比較になる
こんなんチェックしなくても一目で問題ないことがわかる
2021/02/25(木) 18:28:40.93ID:Kp+Bp4Dl0
>>797
だからこそ標準入力から渡された桁数指定であるKが10^18以下であるかのチェック構文をちゃんと書けばその時点で気付けるって話
781のコードはそれが書かれてないから「Kは10^18以下」っていう制約自体を見逃してるんだろうな
799デフォルトの名無しさん (エムゾネ FF1f-pQAD)
垢版 |
2021/02/25(木) 18:53:48.04ID:rcOltu0HF
>>789
競プロっていわゆる普通のプログラミングとか数学とかとは別の世界だと思う
2021/02/25(木) 19:05:19.81ID:mcXAAtHya
>>796
どっちもケースもちゃんと1を出力するよ
可読性重視で冗長に書いたけど合ってるんじゃないかな?
知らんけど。

非OOPで短く書き直すとこう
https://ideone.com/f58hKP
801デフォルトの名無しさん (ワッチョイ ffe6-0TpN)
垢版 |
2021/02/25(木) 19:49:45.24ID:BqNXMQx70
新聞紙を100回折りたたむと厚みが宇宙と同じぐらいになるって奴ね
2021/02/25(木) 20:05:35.05ID:84+MX2N/0
>>785
おまえアタマいいな。
自分は3分考えて分からなかった。

792 の言うようにひらめきの世界だわ。
3分の間にアタマに引っかかっていたところに手が届いてれば正解に行き着いてたかも、とか 785 を読んで思いましたまる
2021/02/25(木) 21:52:33.13ID:cAbWQIRq0
Math.Pow(2, 5e15)はInfinityになって計算できてないの気持ち悪いな
Kが10 ^ 19まで広がると日付次第ではバグる
2021/02/25(木) 22:02:36.79ID:OCB2UzGya
あーなるほどそういう問題なのね
まったく気づかなかったw
冷静に数字見りゃそりゃそうだよね

こんなスレでそんなひねくれた問題が出てくると夢にも思ってないし
2021/02/26(金) 15:03:06.02ID:JTr0u2pq0
Benchmark.netにてAllocatedのサイズは見れるんですが、何のオブジェクトかの内訳詳細は見れないんでしょうか?
2021/03/03(水) 21:31:29.25ID:GRpGW1SM0
closedxml初めて触ったけどすごいね
エクセル操作プログラミングで毎回うんざりしてたのがウソみたいに快適
gasのスプレッドシート制御と同じような感覚で書けるしusingも使える
2021/03/04(木) 12:19:55.97ID:RGW+RZMQ0
以下のような2つの構造体リストを重複除外して結合したいのですがどうすれば良いでしょうか。
Unionをすると重複したまま結合されてしまうので困っています。

public struct Menber
{
/// <summary>
/// 部署
/// </summary>
public int Id;
/// <summary>
/// 名前
/// </summary>
public string Name;
}

List<Menber> list1
list[0].id = 1
list[0].Name = 田中

List<Menber> list2
list[0].id = 1
list[0].Name = 鈴木
list[1].id = 1
list[1].Name = 田中
list[2].id = 2
list[2].Name = 吉田
2021/03/04(木) 12:41:03.43ID:7LtyX+sHa
>>807
Unionのドキュメントぐらい読もうよ。
IEquatable<T>を実装しろって書いてあるでしょ

構造体の場合はEqualsは全フィールドとプロパティが等価なら
trueを返すように自動実装されるはずだと思ったけど、UnionはEqualsの方は
使ってくれないんでしょうたぶん。

知らんけど。
2021/03/04(木) 14:28:31.44ID:JHtiE7pvM
デフォルト実装で特に問題無いけどな
https://dotnetfiddle.net/UIfYBX
2021/03/04(木) 18:58:02.93ID:wo0nxJ5c0
>>809
だよな。騙されてるんだよ、相手するだけ無駄。
2021/03/06(土) 02:12:29.40ID:t6oqPQ7k0
なんか久しぶりにc#に戻ってきたら
public int GetIntVal
{
get => _intVal;
}

とかプロパティの取得に=>とか使ってて意味がわからなかった
この手の構文って今から憶えるとしたらどこのサイトを見たらいいでしょう
2021/03/06(土) 02:24:50.57ID:+wsnPdhjM
MSのリファレンス
2021/03/06(土) 11:37:07.78ID:3bUl0e7xd
>>811
c# ラムダ式でググれ
2021/03/06(土) 11:52:26.43ID:+wsnPdhjM
public int IntVal => _intVal; の形式はよく使うけど、>>811の形式は個人的には嫌いだな
811の形式はgetだけなら冗長なだけなのでsetアクセサを書く必要のある場合のみ意味があるわけだが、
setは副作用そのものなのでexpression bodied syntaxで書くのはあまり良くないと思う
2021/03/06(土) 14:22:19.93ID:JTkugHrDd
構文調べんじゃなくてまずバージョンアップの変更点一通り見てきなよ
まずはそこからだろ
2021/03/06(土) 14:55:39.29ID:NkI+ANJT0
https://ufcpp.net/study/csharp/
バージョンごとの新機能はここに纏めてあるから、ダラダラ見てみるといいよ
2021/03/06(土) 15:23:05.91ID:F0Z1/6ce0
Class class = new();
が地味に便利。
2021/03/06(土) 16:05:50.67ID:2Vsiq+bMd
ラムダ式は初見で何じゃコリャって思ったけど、今じゃガンガン使ってる。
あっさりコーディングできていいね。
2021/03/06(土) 16:12:37.53ID:WRKHF19V0
>>818
慣れると分かりやすいよね
2021/03/06(土) 18:54:57.52ID:NwqNYXOS0
var hoge = new();

で、俺様が何をインスタンス化したいか的確に判断してコンパイルしてくれるAIできないかな
2021/03/06(土) 19:04:15.77ID:WRKHF19V0
>>820
それ出来たとしてもお前がインスタンス化しようと思ったものが正しいとは限らんから結局バグるだけやぞw
2021/03/06(土) 19:19:09.69ID:eoDpywBc0
>>821
その時はすぐに別のものを思うんだよ!
2021/03/06(土) 19:56:18.42ID:t6oqPQ7k0
思考をホットリロードするの?
また新しいUSBガジェット買わないとならないじゃん
2021/03/06(土) 20:22:48.44ID:wbV88shF0
そんなとこまで読み取ってくれるならもうコードすら書かなくて良いようにして欲しい
2021/03/06(土) 21:26:52.61ID:NwqNYXOS0
ObservableCollection<LongLongClassName>
とか
ConcurrentDictionary<Guid, ConcurrentDictionary<Guid, DeviceInfo>>
とか
見ただけで吐き気してくる宣言。
なげぇんだよ
2021/03/06(土) 21:55:10.56ID:c0Nk1tFyd
ReadOnlyReactivePropertySlim<List<string>>
2021/03/06(土) 22:44:49.40ID:iEqPiFd00
type alias使えば?
2021/03/06(土) 22:51:05.76ID:zakmvXbT0
INotifyCollectionChangedとか
BuildinglistCollectionViewとか
FrameworkContentElementとか
PolyQuadraticBezierSegmentとかな ←最長ぢゃねーか?

ObservableCollectionはクソいっぱい使ってるんでなんとかしてほしいわ
2021/03/06(土) 22:58:22.18ID:zakmvXbT0
>>812
MSのリファレンスほど無味乾燥な読み物は無いわ
図も表もスクリーンショットも無く、
ただただダラダラと書き連ねててまったく読む気せんわ
2021/03/06(土) 23:04:01.25ID:WRKHF19V0
辞書にストーリー求めるバカw
2021/03/06(土) 23:04:24.81ID:NkI+ANJT0
BindingOperations.EnableCollectionSynchronization
2021/03/06(土) 23:13:02.08ID:zakmvXbT0
>>830
箇条書きとか図を付けろっつってんだよ、ヴォケ
一般のブログが方がよほどうまく説明できてるわ
2021/03/06(土) 23:26:27.18ID:RvUIQ/dU0
別にリファレンス読めって人もMSのリファレンスが読みやすいとは言ってないぞ
2021/03/06(土) 23:50:16.20ID:2Vsiq+bMd
空白やアンダーバーで区切らないPascal形式だから余計に見づらいよね。
2021/03/06(土) 23:58:57.56ID:d/Tm++Xea
>>834
好みの問題と言えばそれまでだけど個人的には
Pascal形式が一番相対的にマシだと思うし、だから
比較的若い言語であるC#の文化では標準になってるんだと思う。

しかし、いつもの交通整理の人仕事しろよ。
いつまでこの状態を放っておくの?
やっぱり自分で自分に文句は言えないってご都合主義な事情かねw
2021/03/07(日) 07:51:51.56ID:m48VQs8o0
高い知識を持っている技術者や学者さんが
人に文章として伝える(分からない人に分かるように伝える)技術が高いとは限らない
むしろそれが下手な人が多いので、情報系の大学の講義はほにょつまらんしわかりづらい

別の仕事につきながら片手間に独学で勉強したあとに
学生時代のテキストや講義資料みると
いまじゃ簡単なことが、どんだけわかりづらい教え方してるんだろうと思った
いい先生がいればその頃からプログラムが楽しくて好きになってたんだろうなと
2021/03/07(日) 10:53:06.62ID:viNH5wsJ0
製造の人員に限ってみれば、分かりやすい(日本語の)文章を書けない人が、キレイなコードを書けるとも思えないんだけどね。
コードは機械に対する指示書だから、そう見ると「(人に対する)分かりやすい文章」との共通点は多い。

あと、教師の教え方についても、特定の人に分かりやすい教え方が万人に対してそうとも限らない。
自分の場合は振り返ってみれば開発環境が違うけど C のポインタはテキストを読んでもさっぱり分からなかった。
けどいつの間にか分かるようになってた。

分かるようになった後は「いまじゃ簡単なことが」なんで分からなかったのか分からない状態で、今も分からない。
ある意味での概念的な関門があるんだろうな、とか思う。「自転車に乗る」ってのとどこか似てるような気もしなくもない。
2021/03/07(日) 10:58:07.46ID:RNKpyeef0
それを突き詰めると日本語って欠陥言語じゃね?という結論に行き着くんだけどな
ポインタが難しいってのもカタカナ英語だからってだけの理由だから
2021/03/07(日) 11:11:35.58ID:N1SdY6iGa
コードと自然言語は別物だよ
自然言語には関数がない
2021/03/07(日) 12:32:34.07ID:LoC/rHxp0
>>838
その難しい理由ってお前さんがそう感じただけで別の人にとっては別の理由があるだろう
2021/03/07(日) 12:37:54.55ID:Fyhrh8y5a
ポエムのスレになってきてるなw

>>839
その通りだけど、人の能力という論点で言えば
「可読性を意識して書く能力」は恐らく作文とコーディングで共通部分が大きいと思う。
2021/03/07(日) 13:24:35.77ID:N1SdY6iGa
>>841
自然言語が達者な(しかし数理に弱い)人って、手続き型プログラミングの方向に進んじゃうんだよ
しかもどういうわけかみんな1つのルーチンを長く書きたがる
冗長な長文に慣れてる&関数を使わないで生きてきたから癖になってるんだと思う
意味があるなら1行でも関数にするなんてタイプはめったに居ない
2021/03/07(日) 13:55:29.41ID:c6XRgyJU0
リファレンスの理解力上がると無敵なんだよなあ
2021/03/07(日) 15:31:20.66ID:1wgjEUZz0
関係ないけど実装工程を製造って呼ぶ文化、アタシ嫌い
2021/03/07(日) 15:36:58.40ID:dfvBReb20
>>844
いちいち企業の方言に好き嫌い感想言うな
そこはそう表現する以上の意味ないだろ
2021/03/07(日) 15:39:52.85ID:dfvBReb20
大した理由もなく企業文化に文句付けるやつ客先で滅茶苦茶印象悪いから発言に気をつけろよ
2021/03/07(日) 15:55:22.31ID:RWgRWesX0
>>837
コードは機械に対する指示を機械が理解可能な範囲内で
人間とってできるだけ分かりやすいように書くもの
読み手として意識するのは機械じゃなく人間

だから自然言語で論理的な文章を書く力とかなり部分が共通なのは当然
2021/03/07(日) 16:01:59.94ID:TNmQ0Vam0
滅茶苦茶印象悪いから気を付けて頂きたく。
2021/03/07(日) 16:08:44.22ID:FZPehcc/0
>>844
実装工程の定義がわからんけどコーティングなら製造でいいんじゃないかと思う
やってる事は組立工員とあまり違わないし
2021/03/07(日) 16:12:50.50ID:FZPehcc/0
>>848
毎度お世話になっております
本件、拝承

御社のレベルに合わせて客先で「アタシ嫌い」とか言う奴を連れてきてしまい申し訳ないッスw
851デフォルトの名無しさん (ブーイモ MM7f-5Nd/)
垢版 |
2021/03/07(日) 16:22:51.53ID:hFyVV8HRM
>>844
現実を見ろよ。実装なんざ仕様書をプログラミング言語に置換しているだけだろ。製造って銘打ってもらえるだけありがたい。
2021/03/07(日) 16:32:47.46ID:j7St4ggd0
建設仮勘定たてるために原価計算ちゃんとしようとしたら、製造以外に入れようがないんじゃないの?
2021/03/07(日) 16:35:46.28ID:N1SdY6iGa
>>847
ぜんぜん違うよ
全くの別物
2021/03/07(日) 16:36:35.91ID:Htr3Z/NJ0
>>845みたいに発狂する奴って日本人ちゃうやろ
そもそも製造なんて言葉はおかしいのは事実やろ
流れ作業で作れるなら誰でもええやん
2021/03/07(日) 16:41:10.88ID:RNKpyeef0
日本人ちゃうなら何人なんだよ
2021/03/07(日) 16:42:46.48ID:DjMbSgMb0
何でスレ違いなのにこのスレに書き込まなきゃならないんだろう
義務感でもあるの?
2021/03/07(日) 16:52:12.98ID:j7St4ggd0
>>854
製造はラインのイメージが強いけど、流れ作業でしないものも立派な製造だよ。
一般的な商品開発に疎い人ばっかなのかな。
858デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 17:03:50.83ID:lpPFFuHs0
C#.NETの質問ですが
System.Web.Helpers
を参照しないといけないという情報までは辿り付きましたが
参照しようと検索しても出てきません(一覧にない)。どうすればいいんでしょうか?
2021/03/07(日) 17:24:03.46ID:DjMbSgMb0
>>858
ASP.NETを導入してください
https://docs.microsoft.com/ja-jp/dotnet/api/system.web.helpers
https://blog.shibayan.jp/entry/20110406/1302094656
2021/03/07(日) 17:26:58.17ID:lpPFFuHs0
>>859
NuGetから、Microsoft.AspNet.WebPagesをインストールすることでいけました!
ありがとうございました。
2021/03/07(日) 18:48:35.44ID:kXP4cZZ90
C# というか ASP の質問かもしれないのですが、

public class HiddenFieldEx : System.Web.UI.WebControls.HiddenField
{
 public string TextEx { get => (string)this.ViewState["TextEx"]; set => this.ViewState["TextEx"] = value; }
}

こういうの作りました。
普通にフォームに貼る分にはいいのですが、GridView の ItemTemplate のところに配置し
GridView.RowCreated あたりで TextEx を設定したとき
PostBack すると TextEx が消えてしまいます。

ViewState に保存してるつもりなのですが、
GridView の ItemTemplate でも大丈夫にするには特殊なことが必要なのでしょうか。
862デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 19:15:16.87ID:lpPFFuHs0
これを実行してボタンクリックすると処理が返って来ず固まります。
ちゃんと動かすにはどうしたらいいでしょう?

async System.Threading.Tasks.Task<string> Get(){
return await webView2.CoreWebView2.ExecuteScriptAsync("test");
}
private void Button_Click(object sender,EventArgs e) {
var task = this.Get();
System.Diagnostics.Debug.WriteLine(task.Result);
}
2021/03/07(日) 20:05:28.07ID:8OuV17PR0
var result = await this.Get();
System.Diagnostics.Debug.WriteLine(result);
2021/03/07(日) 20:51:26.38ID:lpPFFuHs0
>>863
Get()からのstringの戻り値を受け取るにはどうすればいいんでしょうか?
2021/03/07(日) 20:58:22.56ID:m48VQs8o0
>>847
可読性が良くなるように論理的に文章が書ける力と、
読み手が理解しやすくするように、伝え方を工夫する力とは全然違う
MSリファレンスは後者がさっぱりだから
図やイラストがない無味乾燥だと上の人が言ってるんじゃないの?

>>837
> 教師の教え方についても、特定の人に分かりやすい教え方が万人に対してそうとも限らない。
教師はそうならないように万人にわかりやすくなるよう教え方を工夫するのが仕事(俗に言う教材研究)
まぁ大学の役割がそうじゃないだろと言われてしまえばそれまでだし
誰にでも簡単だったら技術者や専門職として飯食いにくくなるから
世の中の仕組みとしてはそれでいいんだろうけど
2021/03/07(日) 21:02:50.60ID:HvxUUjRD0
>>864
>>863の1行目
resultにはstring型の戻り値が格納されてる
2021/03/07(日) 21:06:37.22ID:raVsxTVL0
>>864
Get()でasync, await 使ってExecuteScriptAsync()の戻り値を取得してるじゃないか。
それと同じ。
2021/03/07(日) 21:19:02.70ID:RWgRWesX0
>>865
良いか悪いかは別として
それは可読性をどういう範囲で捉えるかの違いだな

読み手が理解しやすくするように伝え方を工夫することが
可読性を良くしようとすることに含まれないと考えたことはなかったわ
2021/03/07(日) 21:22:42.06ID:lpPFFuHs0
>>866-867
Debug.WriteLine()で表示しても以下のようになるんですが…
System.Threading.Tasks.Task`1[System.String]
取得した中身を表示できないんでしょうか?
2021/03/07(日) 21:28:21.66ID:HR+EwL2z0
だからawait
2021/03/07(日) 21:34:04.57ID:KHBonaWT0
private async void Button_Click(object sender,EventArgs e) {

var result = await webView2.CoreWebView2.ExecuteScriptAsync("test");

System.Diagnostics.Debug.WriteLine(result);
}
ポイントは1行目にasync
2021/03/07(日) 21:48:02.10ID:lpPFFuHs0
>>870-871
そこに書けば表示できるんですね。
出来れば分けて書きたかったのですがこれでいきます。
async、await、の使い方がよくわかってないので
ちゃんと勉強します。ありがとうございました。
873デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/07(日) 22:13:34.28ID:lpPFFuHs0
>>871
これ戻り値決まってるメソッドの場合、どうすればいいでしょうかね。
2021/03/07(日) 23:07:47.45ID:hG4ECmLc0
戻り値が決まっているメソッドとは?
具体的なコードを出してくれないと分からん
2021/03/07(日) 23:13:32.78ID:/i694rT30
こんなカンジかな?
public string SayYes(string question){
return "Yes";
}
2021/03/07(日) 23:33:44.48ID:lpPFFuHs0
>>874
戻り値が決まってるメッソドを渡す必要がある場合に
async、awaitを使いたい時です。普通にスレッド使った方がいいでしょうか。
2021/03/07(日) 23:42:39.88ID:viNH5wsJ0
とりあえず、落ち着け。
2021/03/07(日) 23:43:28.55ID:/i694rT30
>>876
・戻り値が決まってるメッソド
・渡す必要がある場合
・普通にスレッドを使う
どの意味もおぢさんさっぱり分からん
2021/03/07(日) 23:53:49.57ID:hG4ECmLc0
意味わからんがとりあえずasync await を使わないコードを書いてくれ
まずはそこから
2021/03/08(月) 00:00:47.06ID:2O4m7huW0
>>876
やりたいことが良く分からないけれど
Task.Run()を使えば良いんじゃないかな。
var result = await Task.Run( () => SayYes( "hoge" ) );
2021/03/08(月) 00:21:38.35ID:qzvxIX+G0
>>878
上手く言えてなくてすみません。
既に定義された形のメソッドを渡す必要があって
戻り値の型を変えられないんです。変えられるかもしれないけど他人が書いた部分なので弄りたくない感じです。
その場合は無理でしょうか?
2021/03/08(月) 00:31:52.37ID:qzvxIX+G0
>>875
こういう形のメソッドの中で使いたいとしても
asyncをつけると戻り値がvoidやtask等しか使えなくなるので
無理なんでしょうかという質問です。
2021/03/08(月) 00:53:45.52ID:pnlhyJpZ0
>>862
https://www.kekyo.net/2016/12/06/6186

この記事が参考になるかも
2021/03/08(月) 01:01:23.25ID:8a53dPGk0
>>882
>>610 と同じ内容かな
ここら辺見返せばいいと思うよ
2021/03/08(月) 01:09:14.76ID:pnlhyJpZ0
asyncawait が前準備無しにドキュメントも無しに実装されているときは無意味な上に99.89%バグっているので安心してほしい
2021/03/08(月) 02:12:24.04ID:ZhwAN9h80
>>881
定義済みメソッドを非同期実行するなら>>880の方法でいいかと
此方もそんな感じでやってる
2021/03/08(月) 04:11:09.12ID:qzvxIX+G0
>>883
これの一番最初にあるサンプルコードをコピペして
Form1_Load()から呼び出すと止まるのですが
これは当然の結果なのでしょうか?

void Form1_Load(object sender, EventArgs e)
{
var radius = 1.0;
var area = CalculateCircleAreaAsync(radius).Result;
}
static async Task<double> CalculateCircleAreaAsync(double radius)
{
var π = await Task.Run(() =>
{
Thread.Sleep(3000);
return Math.PI; // 級数展開などで円周率を計算したとする
});
return π * Math.Pow(radius, 2); // 円の面積
}
2021/03/08(月) 04:37:29.21ID:V3d7DsS+0
どこからコピペしたか詳しく
2021/03/08(月) 08:35:47.21ID:lsfVgCLC0
>>887
はい、当然の結果です。
メインスレッドがデッドロックします。
2021/03/08(月) 08:55:46.45ID:pnlhyJpZ0
>>887
リンク先になくね?
891デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/08(月) 13:21:09.68ID:qzvxIX+G0
>>888-890
すみません。こっちでした。
https://www.atmarkit.co.jp/ait/articles/1211/02/news066.html

>>887みたいな感じでForm_Load()から呼び出したいんですけど
その場合はどうすればいいんでしょうか?
2021/03/08(月) 14:31:07.77ID:DDkttHUo0
>>891
前のと同じ問題
Form1_Load()をasyncに変更してCalculateCircleAreaAsync()をawaitで待つ
Task.Resultは直接触ったら駄目
2021/03/08(月) 14:51:25.43ID:ZiVdiQxH0
まずは落ち着いて自分に宛てられたレスをきちんと理解するところから始めたら?
いくつかの質問にはすでに答えが付いてるよ。
2021/03/08(月) 15:00:46.23ID:qzvxIX+G0
>>892
たしかにForm_Load()にasync付けたらいけました。ありがとうございます。
>>893
申し訳ない。ちゃんと読み取れてなかったようでした。
2021/03/08(月) 15:12:14.98ID:qzvxIX+G0
これってメソッドの戻り値の型を自分で指定したい場合は
Task<T>でラップしないといけないって解釈でいいですかね?
2021/03/08(月) 15:30:58.68ID:qzvxIX+G0
webView2.CoreWebView2.ExecuteScriptAsync()
がTask<T>を受け取らないといけないせいで
既に戻り値を定義された色々なメソッドにも影響が出てしまって
どうにかそれらを全て書き換えるかしないといけないのが困ってる点ですね。
これどうにかならないんですかね?
2021/03/08(月) 16:02:08.72ID:qzvxIX+G0
しかもこれ自作クラスを戻り値にしてるメソッドだと
GetAwaiter()がないとかって怒られてそれも実装しないといけないみたいで凄い面倒で困る…
2021/03/08(月) 16:05:05.45ID:qzvxIX+G0
もう非同期とかいいので普通にこれでデータ取得できないもんなんですかね。
webView2.CoreWebView2.ExecuteScriptAsync()
非同期とかしなくていいんですよ。必要なら1分くらい待ってもいいので。
たったこれだけのことなのに凄い面倒だ。
2021/03/08(月) 16:20:50.73ID:ZiVdiQxH0
まず落ち着いて自分に宛てられたレスを最初から読み直してみるといいんじゃないかな。
2021/03/08(月) 16:31:12.58ID:cnxTx+zha
task.ConfigureAwait(false).GetAwaiter().GetResult()
2021/03/08(月) 16:47:22.57ID:R5ZHjmWC0
素直にasync/await対応したほうが建設的
悩んでいる時間で修正終わるわ
2021/03/08(月) 18:11:10.07ID:c6FLXLbe0
このレベルだとこんな所で教えてもどうせ理解出来ない
2021/03/08(月) 18:39:35.08ID:2YZIHCv70
今時めずらしいタイプだ
こういうのから金を巻き上げてその辺に棄てるのがスクールの役目のはず
2021/03/08(月) 19:15:52.15ID:qzvxIX+G0
>>901
面倒だけどそうすることにしました。
ひとつずつ地道に置き換えていきます。
2021/03/08(月) 20:13:34.27ID:pnlhyJpZ0
使用者に非同期処理が必要ないのに非同期処理しか実装されてないクソライブラリはクソだからないのでクソとしか表現のしようがないんだぜ
そこはおk?

ああ、クソじゃん・・・

って話よ?
2021/03/08(月) 20:20:54.40ID:lWZwpqsv0
鶏糞と牛糞の詰め合わせでも送ってやろうか?
2021/03/08(月) 20:21:12.62ID:pnlhyJpZ0
散々罵った挙げ句に同期処理が用意されてることがわかったときは死にたくなるぐらい恥ずかしいので気をつけるんだぜ
2021/03/08(月) 20:54:37.86ID:qzvxIX+G0
>>907
どうやればいいんでしょうか?
2021/03/08(月) 21:39:32.19ID:lsfVgCLC0
>>908
理解せず簡単に済ますなら900の方法か、
UIスレッドから新しいTaskを作って、そのタスク内で非同期メソッドの結果をawaitして、UIスレッドは作ったTaskのResultを取得すれば良い。
2021/03/09(火) 02:15:52.82ID:Km1Y7VEG0
>>909
900さんの方法でもイケるんですね。ありがとうございます。
あとこんな風にやったら一応自分が求めてる感じにもなりました。
Invoke((MethodInvoker)(async () => {
var task = await func();
}));
2021/03/09(火) 13:25:20.94ID:/HWklS3sa
>>887
これ、今更だけど
var radius = 1.0;
Task<double> task = null;
Task.Run(() => task = CalculateCircleAreaAsync(radius)).Wait();
var area = task.Result;
じゃいかんのかな知らんけど。

しかし、非同期メソッドの結果をawaitせずに求めるなんて考えたこともなかったし、
一瞬そんなの簡単だろと思ったけど意外と面倒なのね。
というか非同期メソッドの戻り値は呼び出し元のスレッドで実行される自分自身になるのな。

っていうか、>>891の引用元のコードはバグ?
何年も前の記事なのに誰も突っ込んでないのかな
2021/03/09(火) 14:04:19.73ID:G6YhpKjy0
引用元はコンソールアプリケーションだからな
2021/03/09(火) 19:16:54.66ID:v67EGRm00
独習C#でもコンソールアプリ以外だとデッドロックするコードが書いてあるからな。
2021/03/09(火) 21:21:04.94ID:mjd4ZCLWa
コンソールかどうか関係ある?

コンソールだろうが何だろうが、「自分が宿題をやり終わるのを寝ながら待つ」子は
死ぬまで宿題完成しないでしょ。
2021/03/09(火) 21:25:50.24ID:zZk3I07S0
>>914
あるよ
SynchronizationContext.Currentが設定されていないから挙動が変わる
2021/03/09(火) 21:40:53.62ID:G6YhpKjy0
なんでタスクで実行すればデッドロックが発生しないか理解してなさそう
こことか分かりやすく書いてくれてるから見てくるといい
ttps://chronoir.net/cs-async-await-taskrun/
2021/03/09(火) 21:43:31.37ID:mjd4ZCLWa
>>915
へーなるほどそうなのか。

非同期メソッドをawaitせずに呼び出した時の挙動なんて
よく考えたことがなかったし知らんかったよ。
2021/03/09(火) 22:52:54.19ID:BIanm+fj0
そもそもTask型が帰ってくるのだから非同期前提だしなぁ
言わばスレッドで実行出来る形にしましたよという事なんだし
非同期だとスレッドセーフかどうかも本来なら問題になる事ではあるけど
2021/03/10(水) 10:40:32.47ID:ayODL1B00
stackallocが使われてる関数ってAggressiveInlining属性付けてもインライン展開されないの?
920デフォルトの名無しさん (ワッチョイ fb02-kkZq)
垢版 |
2021/03/11(木) 03:25:40.12ID:5JzLcMRo0
System.Web.Helpers.Json.Decode()これと同じ機能を持つのって他にないでしょうか?
使ってるとMaxJsonLength の値を超えています。とエラーがでる時があって。
2021/03/11(木) 12:01:38.32ID:YEgU3HLW0
Json.NET とか?
2021/03/11(木) 12:20:29.59ID:QyQtpTU4M
>>920
MaxJsonLengthは設定で拡張可能
2021/03/11(木) 16:20:05.07ID:5JzLcMRo0
921-922
ありがとうございます!
2021/03/11(木) 21:28:32.37ID:DBtckLkr0
いえいえ
925デフォルトの名無しさん (ワッチョイ a905-pfBZ)
垢版 |
2021/03/15(月) 11:36:48.53ID:hpWLXBIY0
C#でSocketIOサーバーを作りたいと思ったのですが、SocketIOのライブラリに思いっきりclientと書いてあるのでサーバーにはなれないんですかね?
926デフォルトの名無しさん (ワッチョイ 619b-IMun)
垢版 |
2021/03/15(月) 12:48:51.81ID:fhTxsYs40
表形式を扱うデータ構造といえばList<T>の入れ子、構造体、DataTableクラスとありますが
速度的に一番有利なのはどれでしょうか?
2021/03/15(月) 12:57:13.67ID:qxmjw6qQa
二次元配列、ジャグ配列、その他の順番でしょう。
2021/03/15(月) 13:14:39.26ID:dLPloTkj0
何をやるときの速度?
929デフォルトの名無しさん (ワッチョイ 619b-IMun)
垢版 |
2021/03/15(月) 13:19:09.67ID:fhTxsYs40
2つのテーブルから共通のコード番号を手掛かりに新しいテーブルを作る処理です

2次元配列が一番速いのですか
最初に件数をカウントしておく必要がありますね
2021/03/15(月) 13:25:10.25ID:dLPloTkj0
>>929
それって2つのテーブルをAとBとしたときBのテーブルはAの1レコードに対して全レコードアクセスは回避できないよね?
どう持っても早くはならないでFAじゃね?
2021/03/15(月) 15:18:17.81ID:W4mhVG7e0
>>929
SQLのJoinアルゴリズムと考え方は同じなのでそういうの解説してるサイトをググればいいんじゃない
基本はSort Merge Join, Nested Loop Join, Hash Joinの3種類
2021/03/16(火) 13:43:13.37ID:ClH9askc0
>>925
使ってないからリポジトリ眺めただけだけど、Socket.IOのサーバと接続するのに
手順を簡略化できるだけで、サーバは普通にWebサーバにjavascriptとかで
作れみたいだよ

https://github.com/doghappy/socket.io-client-csharp
2021/03/16(火) 21:36:32.98ID:Wl/nKXCF0
float[] array_A = new float[] { 0.2, 0.4, 0.6 };
float[] array_B = new float[] { 0.4, 0.6, 0.8 };

List<float[]> hoge = new List<float[]> { array_A, array_B };

floatの配列を要素に持つリストhogeがあったとして、配列の対応する要素の平均を算出してリストを返すスマートな方法ってありますか?
LINQでうまいことやれそうな気がしたものの、やり方が分からず今はfor文でゴリ押してしまっています

最終的にこういうリストが返ってきて欲しいです
{ 0.3, 0.5, 0.7 };
2021/03/16(火) 21:40:37.58ID:xlIBh31U0
>>933
普通にforでやりゃいいじゃん
それ以上は初心者じゃねぇだろ
相談室でも行け
2021/03/16(火) 22:22:56.72ID:6arf77iJ0
Enumerable.zipでも使っとけ
2021/03/17(水) 01:49:18.61ID:YSkJqwOsa
Zipって上手いネーミングだよね関係ないけど
2021/03/17(水) 21:54:38.73ID:96WF7Dou0
最近C#の勉強を始めて、オブジェクト指向に関して何となく分かったけどプログラムに落とし込むまでは理解出来ていません
手を動かさなきゃ身につかないと思うのですが練習になる例題などあったら教えて頂きたいです
2021/03/17(水) 22:43:21.99ID:EwAVXU9r0
作りたいものがないのにプログラミング言語の学習を始めるってつらくない?

あと大きく分けてコンソールアプリ、Windowsとかのアプリ、Webアプリ(サイト)とかあるけど、
(多分コンソールが一番勉強するには素直に始められそうだけど)
どれがやりたいとかないの?
VS使えるならそれぞれプロジェクト作れば大体helloworldくらいまでは勝手に作ってくれるよ
2021/03/17(水) 23:04:26.73ID:5t1i5SYf0
>>937
Unityとかだとオブジェクト指向を楽しく学べそう。
2021/03/17(水) 23:44:31.78ID:U0+PPwHU0
>>937
Microsoft VOTT を超えるアノテーションツール
を作ってみては?

マジレスするとpinta辺りのソースを読んで見たまえ
2021/03/18(木) 02:59:56.18ID:/DoLsZj+a
>>937
ライブラリのクラスで比較的単純そうなのを
あえて車輪の再発明してみるとか。
例えばList<T>の簡易版を自分で作ってみる。

ただ、オブジェクト指向を習得したいという目標設定自体が
本当に意味があるかどうかは疑った方がいいかもしれないね。

以下個人の見解ですだけど、オブジェクト指向なんて別に
そんな難しい話じゃない。

机上で本読んでる時にはもやもやしてても
コード書いてる間に自然に府に落ちてくる類のものかもしれないよ。
少なくとも俺はそうだった。
2021/03/18(木) 15:19:17.41ID:9YUM+NUH0
ソースファイル数十くらいの規模からじゃないとオブジェクト指向は必要にならないから
初心者は暫くstaticマンとして修業するしかない
2021/03/18(木) 15:24:02.53ID:8benOtEXa
えっ
メインだけならいらんけど
そうじゃないならオブジェクト指向したほうがいい
2021/03/18(木) 16:44:12.97ID:U1xZnkhE0
オブジェクト指向もカプセル化の恩恵は結構簡単に実感できるが
多態性のほうは有効な場面が可也少ない
2021/03/18(木) 21:08:28.76ID:e7yzUD160
オブジェクト指向の恩恵のほとんどはinterfaceだからなぁ。
自分で作ったのを他の人が使うようになって始めて、迂闊にクラスを参照させてはならない、
カプセル化していたとしても実装変えにくくなって詰みやすいと気づくわけで。

自分で作って自分だけで使ってる分には気づきにくい。
2021/03/18(木) 22:34:39.09ID:6dHUIFjDa
何がオブジェクト指向の本質かについてはいろんな人がいろんなこと言ってる
(要するに定説がない)けど、個人的には多態はあくまで付随的な物であって本質じゃないと思う。

オブジェクト指向というかOOPの本質は文字通りオブジェクトという仮想機械をクラスという形で
ストレートにコードに表現できることだと思う。

それが正しいかどうかはともかく、初心者が最初に理解すべき考え方はこれ、
つまりクラスとは仮想機械を記述するものだということだと思う。
2021/03/19(金) 00:55:17.23ID:ZleoXut0M
本来そんな小難しい話じゃなくて、プログラムを人間のメンタルモデルに合わせようというのがオブジェクト指向だよ
人間の感覚に合った設計は破綻しにくいという経験則というか仮説に基づいている
2021/03/19(金) 09:24:53.90ID:VtGgyeTV0
人間のメンタルモデルってか進化論モデルだよ
経験則どころか30億年以上の運用実績があるから信頼性が高い
2021/03/19(金) 10:10:47.26ID:kWUqr5xc0
進化の過程においてミッシングリンクというものが存在しててな。
30億年かどうかは怪しい
2021/03/19(金) 10:20:02.87ID:fdf62zP+M
進化の法則が乱れる!
2021/03/19(金) 10:30:15.00ID:B4QNkIexM
オブジェクト指向とか正直よくわからんが
クラスは、ラムダの変数キャプチャを冗長化、明示化、理解容易化したもの、として考えるようになってから、すべてがうまく噛み合うようになった
2021/03/19(金) 13:07:40.64ID:HbCpBKgza
メンタルモデル(笑)とか進化論モデル(笑)とか言い出すと
昔のJava界隈みたいな胡散臭さが出てくるなw
2021/03/19(金) 13:18:48.59ID:HbCpBKgza
まあ特定の機能を担う仮想的な装置(オブジェクト)に分割統治するのは
人間の脳というか認知能力の都合だというのはその通りだけどね。

繰り返しになるけど、重要なのはその「特定の機能を担う仮想的な装置」を
クラスで表現できることになったことなんだよね。

アルゴルズムの教科書に出てくるようなデータ構造はオブジェクト指向が提唱される前からあった。
画期的だったのは、それらをQueueとかDictionaryとか言ったまんまの名前を付けたクラスで書けるようになったこと。
2021/03/19(金) 13:31:05.56ID:Jtw21w2UM
昔あったJavaの月刊誌はやたら哲学用語を多用する記事とかあったな
2021/03/19(金) 13:40:56.61ID:Oem/eeea0
ニューロマンサーっぽく解説して
2021/03/19(金) 14:04:48.51ID:Qsi2J9ai0
世の中では「部品化」と言う、もう少し判りやすい言い方を使っているんじゃないかな
2021/03/19(金) 14:05:45.45ID:pO9QgyHvM
double[] real; double[] imag;でもってる値をComplex[] compへの変換を1行できれいに書けないでしょうか?
comp[0] = new Complex(real[0], imag[0])を配列に対して操作できればかけそうな気がするのですが、LINQとかで表現できますか?
2021/03/19(金) 14:20:19.54ID:gG/OqDxy0
>>957
var comp = real.Zip( imag, ( r, i ) => new Complex( r, i ) ).ToArray();
2021/03/19(金) 14:25:33.56ID:ysVgQ22g0
>>956
部品が関数でもいいよね?
2021/03/19(金) 14:28:10.86ID:pO9QgyHvM
>>958
ありがとうございます。
Linqにzipなんてものがあったんですね。
2021/03/19(金) 21:21:23.14ID:vK2IShGtM
ひょっとしなくても>>933のも
var hoge = array_A.Zip(array_B, (a, b) => new float[]{ a, b }).ToList()
でいけたのか

でもこれだったらちょっと冗長でも
var hoge = Enumerable.Zip(array_A, array_B, (a, b) => new float[]{ a, b }).ToList()
って書きたいなあ
2021/03/19(金) 21:30:14.38ID:vK2IShGtM
あ間違えた
var hoge = Enumerable.Zip(array_A, array_B, (a, b) => (a + b) / 2).ToList()
2021/03/19(金) 22:55:51.95ID:dz1o2wrK0
まだ間違ってる
2021/03/21(日) 08:33:37.34ID:O9O05/ov0
class OrderにはItemCodeとQuantityがあり、
List<Order> order1とorder2をまとめたいです
具体的にはItemCodeが同じならばQuantityを合計し、なければ新たに追加する、といった具合です
foreachを使えばできますが、Linqを使用して簡潔に書ける方法があれば教えてください
965デフォルトの名無しさん (ブーイモ MMcb-vxZl)
垢版 |
2021/03/21(日) 09:25:40.37ID:ai+yXZclM
ConcatしてitemCodeでGroupByしてSum
2021/03/21(日) 12:14:40.89ID:hh+THzL2M
>>965
ありがとうございます
今出先なのでまた帰ったら試してみます
2021/03/21(日) 18:29:47.64ID:O9O05/ov0
>>965
order1.Concat(order2).GroupBy(o => o.ItemCode).Select(x => new Order() {ItemCode = x.Key, Quantity = x.Sum(y => y.Quantity) });

こんな感じですか?
2021/03/21(日) 21:15:46.56ID:B8RMscJD0
>>967
こういうの現場でたまに見かけるけど、とても完結だとは思えない。
加算メソッドをOrderクラスに実装するべきだと思う。
2021/03/21(日) 21:28:25.98ID:rOmbGrT+0
え、簡潔と完結を書き間違えたんでしょ?
違うのかな…
2021/03/21(日) 21:56:25.09ID:S+S4XTWp0
>>967
こんなの書いてはいけませんっていういい見本
2021/03/21(日) 22:19:00.23ID:B8RMscJD0
>>969
誤字ですね。簡潔です。
2021/03/21(日) 22:31:46.08ID:S+S4XTWp0
>>967
こんなの現場で書くとどう扱われるか教えてやろうか?

○○さんの書くプログラムはわかりやすいけど
君のはわかりにくいね
読みにくいっていうか
これはどういう処理をしてるの?
仕様を書いてほしいんだけど
文章で書けなかったら
普通の.net2.0ぐらいの機能で書いてくれないかな?
それと○○さんと比べて進捗も遅いよね?
こんな書き方してるからじゃない?
あと処理経過がわかるログも出してほしいんだけど
この書き方のままじゃ出せないでしょ?

とかね
目立つことしないほうがいいよ
2021/03/21(日) 22:43:13.77ID:ejnWrGNOa
長いメソッドの途中でいきなりこれが出てきたら気持ち悪いけど
OrganizeOrdersとか名前つけてメソッドに切り出すなら許せるかな
正しいメソッド名は英語ネイティブに聞いて
2021/03/21(日) 22:47:23.75ID:4uqTNWnz0
>あと処理経過がわかるログも出してほしいんだけど
これは流石に設計書いた奴が無能すぎるわ
2021/03/21(日) 22:48:14.21ID:ejnWrGNOa
>>972
それほぼ全部カウンター食らうから気をつけたほうがいい

わかりにくい→感覚でしゃべるな、コードメトリクス測定したらLinqのほうが成績良い
どういう処理をしてるの→見たまんまorder1とorder2を繋いでItemCodeでグループ化してQuantityの合計を計算しtwる
使用を書いてほしい→↑が仕様
普通の.net2.0で書く→古い言語仕様に合わせる理由がない
進捗→状況次第
2021/03/21(日) 22:49:08.96ID:ejnWrGNOa
ログ出して→この程度の処理でいちいちログ出したらログが汚れるしパフォーマンスも悪化する
2021/03/21(日) 22:54:55.17ID:gB+oqGaT0
>>967
これってそんなに読みにくい?
自分も他の人もこのくらいなら普通に書くけど。
どうしてもなら、各メソッドの間に改行入れて各行ごとに処理内容のコメントを書いてもいいし。

こう言うのでログを出して欲しいって要望を受けたことはないけど自分でそれ用の拡張メソッドを書けば出せないこともないし。とか言ってみる。
2021/03/21(日) 22:58:09.33ID:S+S4XTWp0
>>975
いいよ別に
後はリアルで味わったらいいよ
みんな暖かく接してくれるよ
2021/03/21(日) 23:16:39.83ID:O9O05/ov0
>>967です
たくさんのレスがついていてビックリしています
書いていて思ったのは>>977さんがいうように各メソッドの間に改行を入れればまだ読みやすいと思ったのと、
Orderのプロパティが多いようだとどんどん読みづらくなっていくな、と思いました

foreachで書いたのはこんな感じですが、よりいい方法があれば知りたいです
var allItem = new List<Order>(order1);
foreach (var o in order2)
{
var duplicate = allItem.FirstOrDefault(x => x.ItemCode == o.ItemCode);

if (duplicate is null)
allItem.Add(o);
else
duplicate.Quantity += o.Quantity;
}
2021/03/21(日) 23:21:28.52ID:O9O05/ov0
>>979
最初にvar allItem = new List<Order>(order1);をしていますが、
duplicate.Quantity += o.Quantity;をするとorder1の内容も更新されてしまいますね
DeepCopyなどで複製するべきでした
2021/03/22(月) 00:13:51.82ID:dAcW2Slk0
>>971
質問者も簡潔と完結を間違えてるんじゃね?ってダブルの冗談さ
2021/03/22(月) 00:23:14.95ID:0zPdt/v20
C# Seleniumでブラウザを閉じるときに

Quit();
Close();

の動作が最近のChromeのアップデートでかなり遅くなっています。
私だけでしょうか?
983デフォルトの名無しさん (ワッチョイ 8bbb-Q5Cn)
垢版 |
2021/03/22(月) 01:09:40.25ID:RQGm3cmd0
>>967のコードは、ドットで改行したらいいぐらいでなんも悪くないだろう
984デフォルトの名無しさん (ブーイモ MM4d-vxZl)
垢版 |
2021/03/22(月) 02:12:24.15ID:GLNo6tkcM
ちゃんとしたテストコード書いてあるなら967のでかまわん
2021/03/22(月) 02:17:21.58ID:1s/2BcbO0
ログもちゃんと出力してね
指摘する人間に粒度が依存するけど
少なくとも俺はこんな一括でやられたらどこがバグってるのかわからない
2021/03/22(月) 02:21:02.72ID:1s/2BcbO0
まあ、もっとも指摘する人間の粒度に依存する部分に対応できない処理を書いちゃうあたり優秀とは程遠いというのが俺の感想だがね
2021/03/22(月) 03:06:05.30ID:ElndWJoU0
この程度のコードが理解出来ないで文句垂れてるとか恥ずかしくないのかな
足を引っ張りあって低い方に合わせて仲良くってのが日本のITで
生産性の低さに表れてるのだろうな
2021/03/22(月) 07:03:59.88ID:IJYAylQJM
これが読みにくかったら、簡単なSQL文すら書けない&読めない現場
20年前の現場ではSQLでとってきたレコードをループしながら集計しているコードがゴロゴロあった
2021/03/22(月) 07:27:03.21ID:68S3N7MUM
C#3.0リリース直後でLINQがまだ物珍しかった頃なら>>972の指摘もまあ分かるけど
C#の最新バージョンなんてもう9.0だぜ?
LINQだって10年くらい前の時点で十分スタンダードになってた技術なのに
いまだに真顔で>>972みたいな指摘する人がいるのか・・・・

>>985
>少なくとも俺はこんな一括でやられたらどこがバグってるのかわからない
え、この程度で分からないの?
「優秀とは程遠い」理解力しか持ち合わせてないのはあなたのほうじゃ
あなたの口ぶりベテランの人なのかと思ってたんだけどただの能力低いロートルだったりする?
2021/03/22(月) 08:20:54.66ID:IJYAylQJM
うちにもLINQ読めないからやめろ!って言うおっさんがいたな
最初年長者の言うことだからと素直に聞いていたけど
だんだん腹立ってきてボロカスに言ったら何も言わなくなった
2021/03/22(月) 09:33:10.92ID:1s/2BcbO0
>>989
あっそう
じゃ途中経過のログ出してよ
2021/03/22(月) 09:36:15.54ID:1s/2BcbO0
君のプログラムは
たったこれだけ、
ホントこれっぽちの、
普通のプログラマなら本当に誰でも可能な、
ことすらできないゴミカスなので


対応できませーん!(笑)(´∀`*)ウフフ
2021/03/22(月) 09:44:59.10ID:1pgrqUSA0
>>989
>>972の指摘は技術的な無知から真顔でやってるんじゃないよ。

和を乱すなら撤退しろ、ってメッセージなんだから、技術論で正しいって言っても無駄なんよ。

これが正しいってコンセンサスを先に取れば誰も何も言わない。
実際に工数が下がることを証明して、パフォーマンスが落ちていないことを証明して、コーディングルールにLinqの使い方を明示して、やってはいけない使い方なんかも書いて、それで通すもの。
俺は使いたかったからそうして通したから間違いない。

引っ張り合いではなくて、皆のレベルを上げる必要があるの。
一人が踊り狂っても、そいつが辞めたときに誰も面倒が見れない物が残るだけ。
おっさんになってからつくづく思うけど、お前らほんと自己中だな。
2021/03/22(月) 10:00:26.34ID:1s/2BcbO0
>>993
え?なんか長いけど延々と誰でもできることを自分ができない正当性を長文使って説明してるの?( ´,_ゝ`)プッ

控えめに言って

クソダッセw
2021/03/22(月) 10:02:49.77ID:1s/2BcbO0
と思ったら内容違うじゃん
はじめの一文で立場を明確にしろよ
2021/03/22(月) 10:18:56.38ID:e3BAbY2z0
>>991
途中経過をログ出力したければ普通にできるけど・・・
2021/03/22(月) 10:37:03.10ID:qAoMyjOy0
>>995
クソダッセw
2021/03/22(月) 10:39:26.64ID:1s/2BcbO0
>>996
ほう、やってみろ
2021/03/22(月) 10:41:32.69ID:1pgrqUSA0
>>994
ちゃんと読まないとかそういうところもだぞ。
2021/03/22(月) 10:54:40.38ID:NnPBdii70
>>1000なら俺は今年株で大儲けする
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 95日 23時間 25分 5秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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