ふらっと C#,C♯,C#(初心者用) Part149at TECH
ふらっと C#,C♯,C#(初心者用) Part149 - 暇つぶし2ch322:デフォルトの名無しさん
21/01/24 15:38:28.95 3jwmj/rb0.net
>>315
そのレンジのグラフを表示するなら「描画でき�


323:ワせん」一択だろ。 業務アプリなら、画面入力しようとしたら一旦グラフ消すだろうし。 そうしないと、入力中のスクショ送られてきて混乱することになるぞ。



324:デフォルトの名無しさん
21/01/24 15:40:59.68 3jwmj/rb0.net
入力がおちつくまでグラフを描画しない、をやりたければReactivePropertyの方が楽だな。

325:デフォルトの名無しさん
21/01/24 15:47:17.96 H0Ke+o4H0.net
>>317
えー、死ぬ
たったこれだけのためにそれ用の処理用意すんの?w

326:デフォルトの名無しさん
21/01/24 15:52:16.29 3jwmj/rb0.net
>>319
バインディングしてれば、グラフと「描画できません」って書いたラベルの2つのVisibleをひっくり返すだけで良かろう。
なんの処理も無い。むしろ楽になる。

327:デフォルトの名無しさん
21/01/24 16:05:06.18 3jwmj/rb0.net
一応言っとくが、びっくり返すのも直接Visibleを変えるんじゃなくて、Visibleにエラーが有るか無いかから算出されるプロパティをバインディングすれば良いからな。

328:デフォルトの名無しさん
21/01/24 16:11:45.64 H0Ke+o4H0.net
データバインド使うためだけに余波が物凄くね?
開始日と終了日のエラーを許容してる間って他の値を変えたときはそっちは保存するの?

329:デフォルトの名無しさん
21/01/24 16:18:07.86 3jwmj/rb0.net
ViewModel使う事によって余波が減ってると思うが。
他の値は他の値でバリデーションかけたら良いだろ。
保存されるも何も、Modelとしてされないよ。一部がおかしいデータは全体として必ずおかしいだろ。
ViewModelとしては一時保存したければするかもしれんが、Modelにはならん。
その別のデータとやらが開始日と終了日に挟まれているべき日付、なんかだったらそもそもの定義が揺らいでくるじゃん。
全部Leaveするときにチェックするの?コントロール順とか、入力バリデーションに引っかかる順番ごとにテストする?組み合わせ爆発するし、ダイアログが出るかどうかなんてテスト、自動化しづらくて仕方ないじゃん。
明らかに、ViewModelとして帳尻が合ってるかをチェックする方が確実だし効率的でしょ。
だから許容も何もない。

330:デフォルトの名無しさん
21/01/24 16:46:04.32 H0Ke+o4H0.net
いや、UNDOどうなん?
本格的にエラー値を保存しちゃうの?

331:デフォルトの名無しさん
21/01/24 16:53:34.11 3jwmj/rb0.net
エラー値をViewModelとして表示するし、一時保存もするだろう。
Modelは保存しない(できない)から問題無い。
エラーも含めてUndo、Redoできて何かおかしいか?
未入力   2020/12/31
2021/01/02 2020/12/31
2021/01/02 2021/02/21
全部Undoすれば良いじゃん。
俺がよく使うのは、Undoはコントロールレベルに留めて、「入力破棄」とか「再読込」ってボタンを用意する事だけど。
変更はViewModelに留まってるから、普通に破棄してModelから再読み込みしてViewModel再構成したら終わる。
開始日終了日は確定してないけど一部だけ変更されたデータなんかを保存するつもりなの?

332:デフォルトの名無しさん
21/01/24 17:00:54.66 3jwmj/rb0.net
ViewModelにエラーを表示している状態を保存してなんの問題があるんだろう。
実データとは全く関係ないデータなんだが。
そのあと修正して確定させないとModelに落ちないなら問題なくね?
いっつもそうして「仮保存」やってるんだけど。
番号取っとかないとダメとかはまた別のやり方するけどさ。

333:デフォルトの名無しさん
21/01/24 17:51:29.07 VCT3oYN70.net
twitterでやれ

334:デフォルトの名無しさん
21/01/24 17:55:17.05 H0Ke+o4H0.net
この間別の正しい値はmodelまで保存できるの?
開始日と終了日に関わるすべての値が保存対象でなくなる?

335:デフォルトの名無しさん
21/01/24 18:03:41.68 zEWhRUHAa.net
何を争ってるのかいまいちよく分からないけどずいぶん盛り上がってるね。
さすがに誰かタオル投げた方がいいレベルのような気がするけど
こういう時はなぜかだんまりなのねw

336:デフォルトの名無しさん
21/01/24 18:06:22.86 RuSK0e8mM.net
続きはこっちでどうぞ
WPF(.NET4.x, .NET Core) GUIプログラミング Part24
スレリンク(tech板)

337:デフォルトの名無しさん
21/01/24 18:18:42.23 H0Ke+o4H0.net
>>329
実はみんな開始日終了日のデータバインドの解決方法が知りたかったけど
エラー値許容でがっかり回答だったと思う
エラー値許容は他の箇所での対処に追われるからできればやりたくないだろ

338:デフォルトの名無しさん
21/01/24 18:19:27.82 3jwmj/rb0.net
>>328
一つのModelに開始日終了日とその別の値が入ってるなら保存するべきじゃないし、保存しないと思うぞ。
開始日終了日に関わるんじゃなくて、その画面上に表示されてるデータが確定できるデータじゃないでしょ。
正しい値でもなんでもない。
あのさあ。結局データバインディング使ってどう解決したら良いか知らないから、データバインディング使わないほうがお前の場合良いって事にしかならんでしょ。
エアプそのものじゃん。

339:デフォルトの名無しさん
21/01/24 18:20:37.83 3jwmj/rb0.net
>>331
そのエラー値のデータは、確定されない、永続化されないから対応に追われることは無いよ。
だからViewModelに閉じ込めるんであって。
ViewModelとModelを区別できて無いじゃん。
何聞いてんの?

340:デフォルトの名無しさん
21/01/24 18:23:05.74 3jwmj/rb0.net
がっかり回答どころかがっかり理解力だわ。
俺が間違ってるなら指摘してくれ。

341:デフォルトの名無しさん
21/01/24 18:25:54.36 H0Ke+o4H0.net
いや、だったらデータバインドいらねーじゃん
だってそれ普通にダイアログ出してOKボタンでチェック&保存してんのと変わらんもん
なんかいい方法を知ってる神が舞い降りるのをみんな待っているのさ(笑)
俺はデータバインド使うのやめたけどw

342:デフォルトの名無しさん
21/01/24 18:38:06.15 3jwmj/rb0.net
>>335
UI層変わったらどうすんの?
WPFからUWPやXamarinなんかに移植するとき、全部コントロール貼り直して、コントロールへの値のSet,Get全部やり変えて、全部テストすんの?
新しいUIフレームワーク出たら?
アホでしょ、常識的に考えて。

343:デフォルトの名無しさん
21/01/24 18:39:44.53 3jwmj/rb0.net
テストするときにモックのUI差し替えて自動テスト出来るんだけど。
最終的には結合試験するだろうけど、その前の段階でも画面ポチポチしながら決定表みてテストしてくの?
工数の無駄遣いでしょ。

344:デフォルトの名無しさん
21/01/24 18:45:29.80 QhWu03/T0.net
元はデータバインディング使うと上手く行かないことがあるって話だったのにすり替わっているな

345:デフォルトの名無しさん
21/01/24 18:47:17.74 H0Ke+o4H0.net
>>338
うまくいってねぇじゃん

346:デフォルトの名無しさん
21/01/24 18:50:14.09 Ok705ENM0.net
NGでス


347:ッキリ



348:デフォルトの名無しさん
21/01/24 18:50:33.38 g03tv9KOM.net
横からだけど
いままで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とそれ以外の処理もごちゃ混ぜで書いてそうな印象

349:デフォルトの名無しさん
21/01/24 18:59:46.81 H0Ke+o4H0.net
>>341
開始日と終了日エラーでたままじゃグラフの表示範囲も決まらんかもしれんのによくやるわ
ビジネスロジック入れないでグラフの表示範囲計算できると思ってるのかよ
夢見んな
んでエラー値許容のまま放置できちゃったらエラー箇所ユーザにわかるのかよ的な
visualstudioだって一発ビルドしないとエラー箇所わからん
ボクはうまくいってないと思います

350:デフォルトの名無しさん
21/01/24 19:01:12.31 zEWhRUHAa.net
やっぱり何の話をしてるのかよく分からんけど
UI上の値がモデルに今反映されているのかどうかはっきりしないUIはイラッとくるね。
UI上の値がモデルに反映されていない状態を許すなら>>335が言ってるように
ダイアログ出してくれる方がフレンドリーだと思う。
許さないならUI上の値も常に不整合を許すべきではないと思う。
数直線上の閉区間(a≦x≦b)を入力するUIがあったとして、
ユーザーによるaの入力が確定した時a>bになっちゃってたらb = aに変わるべき。

351:デフォルトの名無しさん
21/01/24 19:05:57.47 1wsdfsyQ0.net
WinFormsのコントロールは内部状態を抱え込んでたんでテストが面倒くさかったのを
VMで外出しにした、というくらいに理解しておけばいいと思う。
バインデングいらないの人はFormsじゃあどうしてたんだろうか。

352:デフォルトの名無しさん
21/01/24 19:09:39.64 g03tv9KOM.net
??
グラフ表示に必要な項目が入力エラーなら「日付が間違ってるのでグラフが表示できません」ってテキストで表示するだけだと思うんだけど
ていうか>>342のいう「グラフ作成」がbmpみたいな画像生成を指すのであれば
その処理はたぶんModelで持つのが正しい気がするし、
View/Modelが密接不可分に結合するような処理であれば
わざわざViewとModelの分離を意図してる(で合ってるよね?)MVVMにしないほうがいいのは当たり前の話だと思う

353:デフォルトの名無しさん
21/01/24 19:57:04.13 3jwmj/rb0.net
>>341
値にしなくてもプロパティとして表現すると読み書きの方向がはっきりするし良いよ。特にEnabledとかは。
>>342
表示範囲が決まってないのに、グラフが表示できるわけないんだから、「現在描画できません」って表示するのは正でしょ。
ビジネスロジックに通したとしても、それをModelとして保存するかどうかは別問題。
エラー値許容って考え方がおかしい。
エラー箇所がわかるようにバインドするのであって、
各変数がバインドできてるかはモックViewModelを使ったUIテスト、
各種バリデーションがきちんと発生するからモックUIを使ったViewModelテストで、疎に担保するべきもの。
コンパイルエラーとかそういう次元ではなくてUnitTestぐらい通すだろ、普通。
責任範囲がまぜこぜじゃん。
>>343
業務アプリで、画面表示中の項目と、入力項目が不一致になるのは禁忌に近いんじゃないかな。
スクリーンショットからトラブルシュートするのがほぼ不能になる。
>>345
そのグラフ作成、Modelではなくて、切り出しておくべきでは?
結局のところ、一定範囲のデータを与えられて、グラフを描画するって関数なりコントロールになって然るべきだと思うよ。
内部的にbmpを生成しようが、画面に描画する以上。
そうしといたら、グラフコントロールを差し替えたい時に気楽に差し替えられる。

354:デフォルトの名無しさん
21/01/24 20:50:20.30 ELcioWmtM.net
>>338
だって出来ない理由がvalidateなんだもん
そりゃ本人の能力だよねってなるわw

355:デフォルトの名無しさん
21/01/24 20:57:17.36 nmX/+8uTM.net
>>346にある「プロパティ」って他言語でいうComputed Property(ごめんC#で何て言うか分からない)のことでいいのかな
であれば(and>>344の理解で良いなら)MVVM完全に理解した
ただしく適用すればソースコードの見通しがめちゃくちゃよくなるだろうと思いました
といっても普段の開発がWinFormsかASPNETCoreばっかりなんで活かせる機会なんて来ないんだけどさ
グラフ作成はViewやViewModelに押し込むくらいならModelに置いてくれと思ったけど
別に切り出せるならそのほうがもっと良いのはごもっともです
層分けって大事だよねー・・・と普段メンテしてるようなソースを思い起こしながらため息をついてみたり

356:デフォルトの名無しさん
21/01/24 21:15:16.63 Ok705ENM0.net
>>348
C#でプロパティって言えば迷うはずないだろ

357:デフォルトの名無しさん
21/01/24 21:27:56.19 nmX/+8uTM.net
プロパティと聞いて「自動プロパティ」のほうがまっさきに思い浮かんじゃって
「自動プロパティじゃないほうのプロパティ」の呼び方が分からなかったんだけど・・・
何て呼ぶのが一般的なのかな

358:デフォルトの名無しさん
21/01/24 22:00:13.52 W8Ofgakl0.net
>>341
あってます。
ViewModelは具体的なUIを持たないViewだと思えば良いです。
なのでVisible等のViewに関するロジックはここが持ちます。
ViewはViewModelをそのまま具体的なUIで表現するだけです。

359:デフォルトの名無しさん
21/01/24 22:02:48.96 3jwmj/rb0.net
プロパティ、そりゃどれもプロパティだな、言葉足らず申し訳ない。
Computed Propertyググった。
そう、これの事。値を持たず他のプロパティの内容から算出されるプロパティ。

360:デフォルトの名無しさん
21/01/25 08:56:15.41 Qq8daOwnM.net
いい加減こっち行こうか
MVVMについて語ろう
スレリンク(tech板)

361:デフォルトの名無しさん
21/01/25 12:28:32.14 8A1Q9MV4d.net
ちゃんとスレあるんだな。
すまなんだ。

362:デフォルトの名無しさん
21/01/25 12:49:25.57 5TPK3+z7r.net
いえいえ

363:デフォルトの名無しさん
21/01/25 20:38:53.42 FWpwiUbb0.net
プログラマできちんと反省できる人はレア。

364:デフォルトの名無しさん
21/01/26 08:08:46.68 z9KCwqI+M.net
プログラマが反省してたら精神がもちません

365:デフォルトの名無しさん
21/01/28 12:09:38.85 ud5nmCvYM.net
Enumerable.OrderBy メソッドを呼び出す際に、
引数に送るデリゲート(Func<TSource,TKey>)を動的に指定したい。
具体的には、
List<Person> people = new List<Person>(basePeople.orderby(person => person.名前))
といった並べ替え処理を、Personクラスの各プロパティについて行いたい。
(年齢、整理番号、生年月日など)
現在はそれぞれのプロパティ(20以上)について上記メソッドを作成して
やりたいことは実現していますが、全くスマートじゃないです。
propertyinfoクラスを使って何かできないかと思ったんですが、
デリゲートの中に組み込むような使い方が全く思いつきませんでした。
どなたか分かる方教えて下さい。

366:デフォルトの名無しさん
21/01/28 12:59:34.80 ow1EdAwiM.net
Syatem.Linq.Dynamic

367:デフォルトの名無しさん
21/01/28 13:42:24.38 lJ0XEYQza.net
>>358
ひょっとして問題を誤解してるかもしれんけど、
OrderByのセレクターは使わずにIComparerで渡す
オブジェクトの方に実質的なセレクターの機能も兼任させれば
できるんじゃないの?

368:358
21/01/28 14:34:48.20 Em7sfuQzM.net
>>360
詳しくお願いします

369:デフォルトの名無しさん
21/01/28 14:49:10.30 5GS4w4/Ua.net
System.Linq.Dynamic

370:デフォルトの名無しさん
21/01/28 15:13:49.91 VSUe7hwUr.net
同一PC上でのアプリ同士の連動のさせかたを教えてください
フォームアプリケーションA.Bを作り、
Aが単独でも動くメインアプリ、Bは拡張機能付きリモコン、という風にしたいんですが、
Aのサブフォームではなく、別のexeファイルからBを起動したいです
そのうえで、同時起動中にBを操作することでAのtextboxを変更したり、Aを動かすためのメソッドをBのソースに書いてボタンイベントで呼び出し、等できると最高なんですが、
これはそもそも可能なことなのか、検索ワードすらわからず詰まってます
可能であればできるだけシンプルな方法を教えてください、
現在、C#、windowsformでAの途中まで制作中です

371:デフォルトの名無しさん
21/01/28 15:14:46.55 r2+Y9V1O0.net
つ UIAutomation

372:デフォルトの名無しさん
21/01/28 15:26:15.90 7g2F6RGP0.net
>>363
IPCっていうやつ使えばいいよ
WCFという似たようなやつは有るけど、そっちはMSが見捨てた

373:363
21/01/28 16:28:24.36 VSUe7hwUr.net
ありがとう、検索して試してみます!

374:デフォルトの名無しさん
21/01/28 16:33:51.84 lJ0XEYQza.net
>>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);
  }
}

375:デフォルトの名無しさん
21/01/28 21:47:36.42 SNcV832D0.net
何回も上がっているけどSystem.Linq.Dynamicを使いなよ

376:デフォルトの名無しさん
21/01/29 00:11:56.19 SOOUWe4N0.net
System.Linq.Dynamic使うとどんな風に書けるの

377:デフォルトの名無しさん
21/01/29 00:14:38.17 hhAzUQXda.net
var list = customers
.Where("Name.Contains(@0)","ZZZ Projects")
.ToList();

378:デフォルトの名無しさん
21/01/29 13:25:03.45 Hs1mJoLC0.net
>>363
SendMessage PostMessageは

379:デフォルトの名無しさん
21/01/29 16:32:59.15 5pIDnM+SF.net
pipe
socket

380:デフォルトの名無しさん
21/01/29 19:24:38.38 IAlTEreC0.net
COM公開して操作とかできんか?

381:デフォルトの名無しさん
21/01/30 10:31:51.17 U3K72huj0.net
gRPC使ってプロセス間通信でよくね?

382:デフォルトの名無しさん
21/01/30 10:32:40.83 pteiWSPF0.net
もう何もかもなくなってしまったのか

383:デフォルトの名無しさん
21/01/31 09:44:26.84 RldRqHno0.net
入門書には、クラスの設定系のメンバーは、公開する必要が無ければ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にしてもカプセル化できない)について、
皆さんはどう対処してますか?
単に「カプセル化したければこんなテクニックもあるよ」というのを紹介してほしいのではありません。
皆さんが(使い捨てでない)プログラムを書く際に、実際に、どういう考え方で、どう対処しているのか、
あるいは特に対処していないのか、を知りたいです。
よろしくお願いします。

384:デフォルトの名無しさん
21/01/31 09:50:34.81 RldRqHno0.net
ちなみに、お前自身はどう対処するんだ?と聞かれるかもしれませんが、
C#の経験が乏しいこともあって、どうすればいいのか正直よくわからないです。
(だからみんなのやり方を参考にしたい)
C++なら、公開したい相手だけをfriendにするとか、constなポインタを返すとかするのですが。

385:デフォルトの名無しさん
21/01/31 09:55:53.85 wMusnPrAM.net
ClassBについても設定系のメンバがprivateになってれば何も問題ない
むしろprivateでないsetterがClassBにあるなら必要があって公開してるはず

386:デフォルトの名無しさん
21/01/31 10:14:39.41 8OVECKvh0.net
そもそもpublicじゃん

387:デフォルトの名無しさん
21/01/31 10:29:08.15 RldRqHno0.net
例えばint型は自由に値を設定できます(その必要があります)が、
ClassAにとっては、int型の内部データであるIntValを、ClassAの外から
変更されたくない(値の参照はしたい)ため、setのみをprivateにしています。
同様のことをClassBでもやりたいと考えているのですが・・・。
そもそもそういう考え方自体がおかしいのかな?

388:デフォルトの名無しさん
21/01/31 10:43:24.54 Xb450EhAa.net
とりあえずイミュータブルにしとけばいいよ
どうしてもイミュータブルではいけない理由が出来たときにどうするか悩めばいい

389:デフォルトの名無しさん
21/01/31 10:57:10.85 8OVECKvh0.net
>>380
まず前提だけど
publicやprivateで改修時の設計を制限しようと思ってるの?
正直、こんなもんお飾りだし
いざ自分がやりたい機能の邪魔になったら問答無用でpublicにする
俺だったら
まあちょっとしたメモアピールぐらいに思っておけばいいんじゃない?
会社として公開するライブラリやdllのクラスだったらそもそもクラスを丸ごと渡すような仕組みにしちゃ駄目だろ
やるにしてもアクセス用のクラス挟んでって長ったらしい設計になることは致し方ない

390:デフォルトの名無しさん
21/01/31 10:59:20.78 RldRqHno0.net
イミュータブルというのは、>>376の方法1のことですよね?
たしかに、.Netに標準で用意されているクラスの多くは、インスタンスを一度作成したら、
内容を変更できないようになっている気がします
内容の一部を変更したいとき(例えばFontのサイズだけを変更したいとか)は面倒ですが・・・

391:デフォルトの名無しさん
21/01/31 11:07:26.15 RldRqHno0.net
>>382
たしかに、あくまでメモ程度に考えて、気にしなければいいのかもしれません
以前、C++で、引数をポインタで渡す際、引数の中身を関数内で変更されたくないので
引数をconstポインタ型にしてたのに、関数の中でconstをキャストで外すように関数内を
書き換えられてしまっていたことがあります
気にしたらきりがないですね

392:デフォルトの名無しさん
21/01/31 11:14:00.48 Xb450EhAa.net
>>383
1のことでいいよ
イミュータブルの内容を少し変えたオブジェクトがほしいけどコード書くのめんどくさい問題は昔からあった
昔は言語サポートがなかったのでコード生成で対処していた
新しいC#ではwith構文が追加されたのでこの問題は解決済み

393:デフォルトの名無しさん
21/01/31 11:25:38.47 RldRqHno0.net
ありがとうございます
With構文というのは知りませんでした

394:デフォルトの名無しさん
21/01/31 12:05:56.26 +uTrKl1S0.net
with式の前にその前提となってるレコード型を調べるといい

395:デフォルトの名無しさん
21/01/31 13:37:12.02 RldRqHno0.net
レコード型とwithについてざっとですがWebで調べてみました。
これらの機能を実際に使うかどうかはともかくとして、イミュータブルにすべきという
指針が得られたのはとても参考になりました。
ありがとうございました。

396:デフォルトの名無しさん
21/01/31 14:24:54.16 pXICYBtJ0.net
俺はコードの仕組みまでいじってやるほどの問題ではないと思う
ちょっとした仕様の変更でprivateをpublicにしなければならないときクソ邪魔過ぎて作ったやつ呪うレベル

397:デフォルトの名無しさん
21/01/31 15:52:52.73 QuI6Fit80.net
C#で作ったアプリケーションをVS2019でビルドしました。
実行ファイルが作成されたbin>releaseのフォルダに、実行ファイルがあると正常に実行できるのですが、
他のフォルダにコピーすると実行できない(ダブルクリックしても反応しない)
状態です。
なぜなんでしょう?

398:デフォルトの名無しさん
21/01/31 15:55:01.39 AZLe64Sd0.net
releaseフォルダをまるっとコピーしたんか?
exeだけ移動させても、dllが不足してたら動かんぞ

399:デフォルトの名無しさん
21/01/31 16:02:29.10 RldRqHno0.net
>>389
既存のコードを書き直すことは、実際にはたぶんやらないと思います(手間のわりに得られる効果は少なそうなので)。
ただ、自分がプログラミングしてると、>>376に書いたような状況にしばしば出くわすので、
他の人はどうしてるのかな?と思い、今後の参考に質問させてもらいました。
・そういう状況になるような設計がそもそも悪いのか?
・他の人はそういう状況にならないように設計してるのか?
・不便を感じているのか?いないのか?
・不便を感じているなら、どう対処してるのか?
等を知りたかったのです。

400:デフォルトの名無しさん
21/01/31 16:24:40.13 Xb450EhAa.net
>>389
privateをpublicにするのは構わないがイミュータブルなクラスをミュタブルにするのは絶対に駄目

401:デフォルトの名無しさん
21/01/31 16:36:30.32 TH60xXxXM.net
>>392
そういう状況になるような設計がそもそも悪い、に一票
他のクラスAの内臓を引き摺り出さないといけないような処理があるなら、それはA自身に持たせるべき
Tell, Don't Ask でググるといい

402:デフォルトの名無しさん
21/01/31 17:15:07.79 QuI6Fit80.net
>>391
ありがとうございます
以前にtobii社のアイトラッカーを使っていてこのSDKをインストールしていたので、
知らないdllがたくさん生成されていました・・・

403:デフォルトの名無しさん
21/01/31 17:16:51.45 QuI6Fit80.net
ちょっとやっかいなことになったなぁ・・・
現在tobiiのアイトラッカーは使っていないので、
tobii抜きでビルドしたいのですが、どこで設定しているのかわからないので取り除けません
sdkのアンインストールツールなんてものもなさそうだし・・・

404:デフォルトの名無しさん
21/01/31 17:19:17.00 QuI6Fit80.net
開発したオブジェクトをtobiiを使っていない旧バージョンのプログラムにコピーしたらうまく行かないかと思ったんですが、
プロジェクト間でオブジェクトのコピーができない・・・

405:デフォルトの名無しさん
21/01/31 17:57:24.91 QuI6Fit80.net
プロジェクトをまたいでフォームをコピーし�


406:謔、とすると 「この操作のソースファイルがこのソリューションに見つかりません。」 と表示されるのですが、何が悪いのでしょうか?



407:デフォルトの名無しさん
21/01/31 18:13:15.24 Xb450EhAa.net
>>392
根本的な設計は問題ないよ
例えば注文と注文明細のようにオブジェクトが別のオブジェクトを含むという構造はよくあることだ
それ自体にはなんの問題もない
では何が問題かというとそれは注文明細をミュータブルにしてしまったこと
注文明細をミュータブルにしてしまうと
注文と注文明細の間にあったはずの不変条件を簡単に壊すことができてしまう

408:デフォルトの名無しさん
21/01/31 18:57:41.42 QuI6Fit80.net
C#というかVSではソリューションをまたいでフォームをコピーするとかは不可能なんでしょうか?
またいでコピーすると
「この操作のソースファイルがこのソリューションに見つかりません。」
と表示されコピーできないのですが、これが出来ないとフォームを別アプリとかで再利用できないですよね
コピーできないはずがないだろうと思って調べているのですがやり方が分からい・・・

409:デフォルトの名無しさん
21/01/31 19:36:48.60 N+Pm82Ll0.net
エクスプローラーでファイルをコピーするという発想は無いの?

410:デフォルトの名無しさん
21/01/31 20:20:00.00 QuI6Fit80.net
>>401
ありがとうございます
知りませんでした・・・
ファイルコピーしたらプロジェク内に表示されましたが、
SDK導入前のプロジェクトにSDK導入後開発したフォームを移植してもうまく動かないですね
SDKを一度導入すると取り除くのは不可能なのか・・・
全く使わないDLLファイルが大量にあるってなんか気持ち悪いですが、我慢するしかないのかな・・・

411:デフォルトの名無しさん
21/01/31 21:08:22.28 RldRqHno0.net
>>394
>>399
色々とアドバイスいただき、ありがとうございます。
Tell, Don't Askについても調べてみました。
より良いコーディングができるよう精進します!

412:デフォルトの名無しさん
21/01/31 21:42:41.93 1LV1XQdcr.net
>>400
共通のソリューションにあり納めてからだと
プロジェクトエクスプローラで
コピー、移動出来ない?

413:デフォルトの名無しさん
21/01/31 21:49:02.35 d4v/P7z60.net
List<int>の中で最大の数値の個数をLINQで数えたいのですが
どう書いたらいいのでしょうか?

414:デフォルトの名無しさん
21/01/31 22:20:10.23 AZLe64Sd0.net
>>405
var hoge = new List<int> { 1, 2, 3, 4, 5, 4, 5, 4, 5 };
var maxCount = hoge.Where( x => x == hoge.Max() ).Count();

415:デフォルトの名無しさん
21/01/31 22:20:29.15 nDa51Aej0.net
Max()で最大値取った後Count(x => x == max)すればいいんじゃない普通に

416:デフォルトの名無しさん
21/01/31 22:23:53.17 AZLe64Sd0.net
たしかに、Whereの中にhoge.Max()を書いちゃうと毎回評価されて効率わるいのかな。
すまん

417:デフォルトの名無しさん
21/01/31 22:24:43.04 6uii1UZd0.net
>>405
GroupByでキーを値、バリューを個数にしたグループを作ってキーで並び替えて最後の行を取得するってのが1回の実行で完結する時の一般的なやり方

418:デフォルトの名無しさん
21/01/31 22:24:51.03 tsmk7oeqa.net
計算量と可読性考えた素直に自分で書いた方がよい気がするよw

419:デフォルトの名無しさん
21/01/31 22:36:08.49 d4v/P7z60.net
みなさまありがとうございました
GroupBy調べてみます。

420:デフォルトの名無しさん
21/01/31 22:36:31.74 jjH+MY7o0.net
いえいえ

421:デフォルトの名無しさん
21/01/31 22:47:04.53 tsmk7oeqa.net
LINQというかその乱用者が嫌われる理由の一端を見た気がするw

422:デフォルトの名無しさん
21/01/31 23:08:40.21 r9k2b4HI0.net
>>413
あんたがついてけて無いだけ。

423:デフォルトの名無しさん
21/01/31 23:14:50.67 8OVECKvh0.net
ループでMax出しながらカウントも行けると思うんやけど
速度的にもわかりやすさ的にも
絶対こっちのが上やんか?
それに対する反省はないん?
けったいな方法使って性能も悪いなんてなんや最高にダッサイなぁ?

424:デフォルトの名無しさん
21/01/31 23:36:34.74 tsmk7oeqa.net
>>414
これ言ってる本人は語るに落ちてるって気付いてないんだろうねw
KISSの原則とか青臭いこと言いたくないけど、
ダメな人は自分が自己確証を目的にしてる自覚がないからダメなんだな
前にも書いたけどこの業界にはイキってる連中が群がってる技術は
絶対に衰退する法則があるけどそれも上記が理由の一つだねw

425:デフォルトの名無しさん
21/02/01 00:28:41.11 YBzqaDjv0.net
>>407
これすら理解できんの?

426:デフォルトの名無しさん
21/02/01 00:49:03.93 BmIrX0ai0.net
>>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);

427:デフォルトの名無しさん
21/02/01 01:19:51.10 LuxfmHdua.net
>>417
そっちは可読性は問題ないので
2回スキャンすることになる非効率が問題ないなら
普通にありだと思うよ。

428:デフォルトの名無しさん
21/02/01 01:48:39.77 YBzqaDjv0.net
>>419
これはSQLでも一般的じゃん。
一回とか概念的に無理じゃない?

429:デフォルトの名無しさん
21/02/01 07:56:42.00 SHJOz7VI0.net
>>420
>>415に書いてあるよ

430:デフォルトの名無しさん
21/02/01 08:16:36.29 iKAM042Ld.net
ループでMax出しながらカウントはListに限って言えばまあ許容範囲内だけど、
IEnumerableに対する処理としては微妙じゃない?
全件かならず読み込む必要があるのと、裏がDBならクエリになって集計だけ行われるのではパフォーマンス差出ると思うが。
そのへん、バックエンドがどう、だからコードはこう、って考えるよりも、Linqで処理して弾力をもたせるってのは有りだと思うけど。
けったいな方法だとは思わん

431:デフォルトの名無しさん
21/02/01 08:39:43.77 70GW+0Z90.net
linq使わなきゃワンループ余裕でしょ?
max値更新するときカウンタリセットして同値見つかったらインクリメントすればいいっしょ?

432:デフォルトの名無しさん
21/02/01 08:49:27.91 f9q1oLiO0.net
foreachなら普通にループ一回で済むわな

433:デフォルトの名無しさん
21/02/01 08:59:56.25 YMWDOp3Pa.net
>>422
DBうんぬんはIQueryableなので関係ない
IEnumerableになってる時点で最も効率がいいのは1回スキャン
ソースが小さいListなら効率は気にしなくていい
ファイル読み込みとかだと無視できないので汎用化したいなら1回スキャンで済むようにするのがLinqのマナー

434:デフォルトの名無しさん
21/02/01 10:06:42.50 5LLgSMFp0.net
a.Aggregate((int.MinValue,0), (cur,next) => cur.Item1 < next ? (next, 1) : (cur.Item1 == next ? (next, cur.Item2 + 1) : cur));
これじゃダメなの?

435:デフォルトの名無しさん
21/02/01 10:24:56.67 laVzODdgM.net
>>426
さすがにこれはひどい

436:デフォルトの名無しさん
21/02/01 10:26:19.00 iKAM042Ld.net
>>425
あ、そうか。納得。

437:デフォルトの名無しさん
21/02/01 14:37:18.05 PZUYg2ag0.net
>>426
いいね。
何やってるかすぐ分かる

438:デフォルトの名無しさん
21/02/01 15:26:59.74 DEyQGLil0.net
MoreLinqにもMaxBy()あるよ
>>418と一緒でループ1回ですむ
標準だけでやりたければ自分でExtension定義すればいい

439:デフォルトの名無しさん
21/02/02 20:45:05.39 uZjppo1+0.net
すみません 教えてください
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.)
となっているのですが、 それぞれ


440:、なにを表しているのでしょうか? タイマー関数で、1秒ごとに、idoletime+Kernaltime+Usertime の差分をを求めても、 14秒から15秒になってしまうので、単純にな数字ではないと思うのですが、どのような理論で この数字が出ているのかが皆目わかりません よろしくお願いいたします。



441:デフォルトの名無しさん
21/02/02 21:08:40.40 kveRc3Dr0.net
CPUスレッド数

442:デフォルトの名無しさん
21/02/03 00:26:51.19 v8/308I10.net
publicなプロパティにはxmlコメントを付けると思いますが、
バッキングフィールドってどこに記入してますか?
クラスの先頭付近に書いても、
自動実装プロパティはコード上ではバッキングフィールドは無いし、
納まりが悪いです。
private string _name; //←これどこに書きますか?
/// <summary>名前</summary>
public string Name {
get => _name;
set => _name = value.ToUpper();
}
/// <summary>年齢</summary>
public int Age { get; set; }

443:デフォルトの名無しさん
21/02/03 01:43:39.37 1I0faZoba.net
>>433
質問の趣旨は要するにただ「バッキングフィールドをどこに書くべきか?」それだけ?
自分はスニペットのテンプレのままなのでプロパティー本体の直前に書くけど
そんなの別にどこでもお好みでいいと思うよ。
うるさいがこう書けと言うならおとなしくそれにしたがっておけばいいと思う。

444:デフォルトの名無しさん
21/02/03 02:41:30.85 7CsH6q/40.net
URLリンク(qiita.com)
C#6.0
自動プロパティ初期化子を与えて、初期値指定ができるようになりました。
public string Name { get; set; } = "Nyanchu"
以下と同意です。
private string _name = "Nyanchu";
public string Name
{
get { return _name; }
set { _name = value; }
}
これでいいんじゃね?

445:デフォルトの名無しさん
21/02/03 08:22:20.89 0ICj5PSn0.net
何がこれでいいの?質問を理解してる?

446:デフォルトの名無しさん
21/02/03 08:24:12.18 qNul9lFK0.net
久しぶりに触ってんだけど
vs2019でフォームにクラスファイルを追加するときは
右側のプロジェクトウィンドウみたいなところで右クリックして追加ないとダメなんだっけ?
メニューバーのだとただのクラスファイルを作るだけ?

447:デフォルトの名無しさん
21/02/03 08:42:49.88 7CsH6q/40.net
>>436
_nameを消したいのかとESP

448:デフォルトの名無しさん
21/02/03 08:55:41.75 9jfq2zZC0.net
>>438
そんなこと言ってないよ
ちゃんと質問読もうね

449:デフォルトの名無しさん
21/02/03 08:59:26.01 7CsH6q/40.net
そもそも書かなくて良くなるじゃん
set{value=略;}にすれば

なるっけ?

450:デフォルトの名無しさん
21/02/03 09:03:06.99 9jfq2zZC0.net
書きたくないんじゃなくて書く必要がある場合にどこに書くのか?だろ
勝手に質問変えないで
自動実装プロパティでは不都合があるため自前でバッキングフィールドを用意する、は大前提

451:デフォルトの名無しさん
21/02/03 09:05:26.44 7CsH6q/40.net
>>441
書く必要があるときってあるん?

452:デフォルトの名無しさん
21/02/03 09:10:29.51 drzEfAtQ0.net
>>437
「フォームにクラスファイルを追加する」が意味わからん プロジェクトにファイルを追加する?
「メニューバーの」が具体的にどれを指してるのか分からん
「ただのクラスファイルを作るだけ」がやりたいこととどう異なっているのか分からん

453:デフォルトの名無しさん
21/02/03 11:07:31.11 7CsH6q/40.net
>>440
自己レス
ホントだ
違う話なんだな
変数なしで初期化ができるのって
自動プロパティって処理の中身がないやつだけ?なのか

454:358
21/02/03 14:11:05.34 QuhKbcfMM.net
>>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);
}

455:デフォルトの名無しさん
21/02/03 15:14:33.67 qlx5EMsl0.net
>>441
code maid使うと、プライベートフィールドは纏められるからそのまま放置するな
大体メンテすることもないから特に困ることもない

456:デフォルトの名無しさん
21/02/03 15:24:45.11 q3Uucr840.net
>>445
OrderByのサンプル見れば分かるやろ
URLリンク(dotnetfiddle.net)
Customers.OrderBy(c => c.City)を
Customers.OrderBy("City”)にできる

457:デフォルトの名無しさん
21/02/03 16:56:36.24 ADWHn1WBd.net
>>432
ありがとうございます
4こあ8スレッドなのでその2倍いっているのが
やや気になります
今度 同時に計って見て検証してみます

458:デフォルトの名無しさん
21/02/03 17:10:24.98 PTI/2U/t0.net
Form上のテキストボックスにファイルのパスを記入してもらって、
このパスにあるファイルをpythonで起動したいのですが
var pass = this.passSetting.Text;
System.Diagnostics.Process.Start("python.exe", @pass);
では何も起動しません。
多分
@pass
ではパスを示せてないんだと思うんですが、どうすればテキストボックスから取得したパスをProcess,Startの引数にできるんでしょう?

459:デフォルトの名無しさん
21/02/03 17:33:43.76 PTI/2U/t0.net
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);
みたいに変数で実行ファイルのパスを渡すことってできないのでしょうか?

460:デフォルトの名無しさん
21/02/03 17:42:11.05 q3Uucr840.net
>>450
その2つだとpython.exeに渡す引数がquoteされてるかどうかの違い出るからうまく行くほうに合わせたら?
var pass = @"""L:¥AAAAAA¥USN_analyzer¥time_series_analysis26.py""";
System.Diagnostics.Process.Start("python.exe", pass);
ちなみにpassじゃなくてpath

461:デフォルトの名無しさん
21/02/03 18:29:48.39 dgpbKw5W0.net
>>450
頭の@は文字列リテラルに付けた時と変数に付けた時は意味が違う
URLリンク(docs.microsoft.com)

462:デフォルトの名無しさん
21/02/03 23:04:55.84 PTI/2U/t0.net
>>451
ありがとうございます。
解決しました!
これでようやっとC#とPythonのアプリケーションを統合することができました。

463:デフォルトの名無しさん
21/02/04 03:54:16.03 8ASdjdRY0.net
エクセルの表みたいな
一行に複数の列(項目が並んでる 二次元の配列って
ArrayListじゃだめなんだっけ?
独自のプロプロパティをもったクラスつくってそれを列に放り込むんだったっけ?

464:デフォルトの名無しさん
21/02/04 07:35:49.07 mMDqMLln0.net
フィールドがプロパティで
レコードが件数になりまつ
って言うと通じるの?
List<myclass> dtcls = new List<myclass>();
的な
myclassのメンバがプロパティで

465:デフォルトの名無しさん
21/02/04 08:09:30.76 +vIUF0nDM.net
通じない
フィールド、プロパティ、メンバ
それぞれに言語上の意味がある

466:デフォルトの名無しさん
21/02/04 09:33:50.26 5uFosyLe0.net
書き込めない

467:デフォルトの名無しさん
21/02/04 09:37:28.17 5uFosyLe0.net
WebRequestでウェブページを取得しているのですが、POSTに必要なFormDataがうまく取得できません
普通なら対象ページのHTMLを見れば取得できるのですが、対象ページの”実行”ボタンを押した時にjavascriptでPOSTに必要な情報を
生成しているようで、この値を取得できないのです。
何か方法がありましたら教えてください

468:デフォルトの名無しさん
21/02/04 09:38:55.99 5uFosyLe0.net
HTMLはこんな感じです
<input type="submit" value="実行" onclick="sid()">

469:デフォルトの名無しさん
21/02/04 11:07:52.39 NUvwu5Ez0.net
自分でJavaScript解析できないならSeleniumで

470:デフォルトの名無しさん
21/02/04 11:24:29.52 ZzRKCYY/0.net
selenium

471:デフォルトの名無しさん
21/02/04 12:51:14.55 PDwRodWn0.net
ブラウザでF12押してネットワークになに流れてるかを見てみたら?

472:デフォルトの名無しさん
21/02/04 15:45:09.59 5uFosyLe0.net
>>461
seleniumってwebBrowserと同じようなものですか?
webBrowserなら操作できるのですが、画面遷移が鬱陶しいので、できればwebRequestで済ませようと思ったのです。
>>462
他でよく見るようなPOST情報しか流れていませんです。
ただhtmlではブランクになっているFormDataがjavascriptによってブランクではない値に修正されています。
javascriptの中身はこんな感じで、クリックと同時にsidの値を書き換えてそれをPOSTしています。
document.forms["form1"].sid.value = xxxxxxx

473:デフォルトの名無しさん
21/02/04 17:55:14.32 uLY+2761M.net
>>463
C#でそのJavaScriptと同じことをやって値を計算するか、C#からJavaScriptを実行して結果を取得するか

474:デフォルトの名無しさん
21/02/04 18:17:04.90 SyfdH0Mz0.net
public class Test
{
public int data { get; set; }
}
Test b = new Test()
bをウオッチすると、dataが、「@data」となるのですが、なぜですかね?

475:デフォルトの名無しさん
21/02/04 21:33:17.59 Gk5V85vI0.net
Ruby on Rails ではシステムテストで、Selenium Webdriver を使う
Capybara で、Headless Chrome とか

476:デフォルトの名無しさん
21/02/05 01:41:49.08 RhinnOg60.net
なんでRoRの話が?

477:デフォルトの名無しさん
21/02/05 19:26:01.79 8Pa/tTU+0.net
C#でヤフーのメールサーバーからメールを送信できなくなってしまいました。
これまでのやり方はdobon.netにあるようなごくごく単純な方法です。
おそらく↓のせいだと思うのですが、ポート番号と通信方法を変更しても、固まってしまい送信ができません。
どなたか送信ができている方がいたらやり方を教えてください。
【2021年1月19日より】メールソフトで「Yahooメール」の送受信が出来ない!?Outlook・Windows Liveメール設定変更方法 | 大阪狭山びこ
URLリンク(osayama.com)
書き直したプログラムは次のとおりです。
//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,


478:body);



479:デフォルトの名無しさん
21/02/05 19:45:05.14 +3DA/7eT0.net
ちょっとググれば出るやんw
URLリンク(whatsnewmail.yahoo.co.jp)

480:デフォルトの名無しさん
21/02/05 19:49:44.60 KQRmB00P0.net
URLリンク(docs.microsoft.com)
SMTP+STARTTLSにしか対応してないのでSMTPSに対応する他の方法を使う

481:デフォルトの名無しさん
21/02/05 21:14:07.85 wjTgrFbp0.net
SmtpClientってそもそも非推奨だしな

482:デフォルトの名無しさん
21/02/05 22:02:49.43 8Pa/tTU+0.net
>>470
ありがとうございます。
単純にポート番号と通信方法変えるだけじゃダメだったんですね。
SMTPSで検索してみたらMailKit使えと出てきたのでやってみたらできました。
ありがとうございました。

483:デフォルトの名無しさん
21/02/06 03:01:00.29 Yx7joU3b0.net
質問させてください。
c#でgoogle drive api を使ったWindowsアプリケーションを作ろうと思っているのですが、
ビルド後に出来た配布ファイルは実行ファイルはもちろんの事、NuGetで追加したDLL群や、
取得したJSONファイルも含めて配布すればいいのでしょうか?

484:デフォルトの名無しさん
21/02/06 03:29:14.46 Ygg5i19/0.net
インストーラー作れや

485:デフォルトの名無しさん
21/02/06 08:28:56.67 j0Q2R7my0.net
そのインストーラーを作るのにも必要なファイル群がわからないとダメだと思うけど

486:デフォルトの名無しさん
21/02/06 11:41:20.20 MqA6OGOW0.net
>>473
必要なファイル郡は何らかの形で入手できるようにしなければいけないので、
最低限の情報としてこのDLLとかこのJSON使ってますって情報をユーザに
与えてあげないと動かしようがないけど、配布ファイルに含めるか各自で
ダウンロードさせるかはアプリの作成者が決めること
ただし、アプリに含めて配布する場合には、自分の作ったもの以外は
再配布可能なものなのか、各々のDllとかのライセンスを確認しないとダメだよ
ものによって勝手に配布しちゃダメとか、配布にはこれを使えとか、コンパイル
済みのものは配布不可とか色々あるので

487:デフォルトの名無しさん
21/02/06 17:42:10.09 Bi5ar2460.net
>>473
そうだけど、GoogleTokenフォルダ下のものはそれぞれのアカウントのを利用させないと不正アクセス起こっちゃわないか

488:デフォルトの名無しさん
21/02/06 17:55:40.49 UYR2I7R3M.net
Unityでゲーム作りに挑戦しているのですが、自作クラスItemをリストにした
List<Item> itemList = new List<Item>();
があって、
クラスItemはint itemIDを持っています。
itemListをitemID順にソートするにはどうしたら良いのでしょうか?
itemList.Sort();
で出来ると思っていたのですが、よく考えたら出来る訳ありませんでした・・・。
Sort()のカッコ内にitemIDを指定したり出来るのでしょうか?
取り敢えず並び替え出来れば良いので一番かんたんな方法をどなたか教えて下さい。
よろしくお願いします。。

489:デフォルトの名無しさん
21/02/06 18:18:20.71 zn5WrP4C0.net
>>478
URLリンク(qiita.com)

490:デフォルトの名無しさん
21/02/06 18:24:06.35 bSeS6eqZa.net
>>478
ItemにIComparable<Item>を実装するか、
SortのオーバーロードのうちComparison<T>かIComparer<T>を引数にとるバージョンを使う。
あるいは>>358
ちょっとぐらいドキュメントを読んだ方がよいと思うよ。
コミュニティーに質問を投げるのはその上で疑問が解消しなかった後で遅くないでしょ

491:デフォルトの名無しさん
21/02/06 18:44:12.48 UYR2I7R3M.net
>>480
一応自分で調べてはいるのでドキュメントも見るのですが、大体意味がわかりません。。
なぜ意味がわからないかというと例に
<T>などと書いてありますが、Tって何?<>の意味は?という所がわからない為です。
一度自分に近い実用例を見ないとメソッドの


492:存在を知っても書き方がわからないのです。 >>479さんもありがとうございます。 もう少し頑張ってみます。



493:デフォルトの名無しさん
21/02/06 18:49:45.30 Kl671woR0.net
Tってなに?とか言ってるのに
List<Item>使ってるやん(笑)

494:デフォルトの名無しさん
21/02/06 18:59:51.25 UYR2I7R3M.net
>>482
サンプルなどで使って覚えたので。。
意味を理解しているというよりも、リストの書き方はこうって覚えています。
しかも私が言ってるのは<T>だけに限ったじゃありません。(わからないくせに偉そうですみません)
<T>に限って言えばClass名を入れるって事ですか?

495:デフォルトの名無しさん
21/02/06 19:04:04.81 uslvvrsY0.net
ジェネリックのことは黒柳さーんに聞くといいよ。

496:デフォルトの名無しさん
21/02/06 19:24:51.67 xuEfQm7n0.net
>>483
そのレベルでは自分のやりたいことのサンプルだけ真似しようとしても分からないことだらけで前に進まないと思うぞ
面倒がらずにC#の入門書とかで体系的に最低限の基礎は固めなよ

497:デフォルトの名無しさん
21/02/06 19:41:30.75 Kl671woR0.net
>>483
>>485さんが言っている通りで基礎から勉強した方がいいとは思うけど
Tは別にクラスじゃなくても、stringやらC#の基本型も指定出来ます
つまり、Listが扱う型を指定するという事です

498:デフォルトの名無しさん
21/02/06 19:58:10.04 pqKs8KDi0.net
List<Item>だとListにItemしか格納できなくて後々不便になるので、
普通はList<object>にするのが一般的だよ。

499:デフォルトの名無しさん
21/02/06 20:10:24.73 f+vO1TLm0.net
え?

500:デフォルトの名無しさん
21/02/06 20:20:56.81 zn5WrP4C0.net
>>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
氏ね、ボケ

501:デフォルトの名無しさん
21/02/06 21:00:57.90 xFqAsQE9M.net
最低限の基礎知識の勉強は必要だよね
そうしないと検索してもここで聞いても理解できない
「やりたいこと優先」という気持ちは分かるけど
>>487みたいに変なこと教える人もいるから…

502:デフォルトの名無しさん
21/02/06 21:04:16.10 UYR2I7R3M.net
>>489
何を書いてるのかまったくわからないのでちょうどラムダ式についての解説を読んでいました。
そのa,bはNameとは関係ない感じですか?
ラムダ式でしか指定できないのでしょうか?

503:デフォルトの名無しさん
21/02/06 21:21:06.73 UYR2I7R3M.net
>>490
今作ってるものが完成したら皆さんが言うとおり基礎の勉強したいと思います。
new Person(){Name = "a"}のaは普通の解説ならTaroとか書くはずで、のちのa,bとは関係ないって事ですね?

504:デフォルトの名無しさん
21/02/06 22:25:38.73 zn5WrP4C0.net
>>492
ああ、確かにPersonでName="a"は手を抜きすぎだな、"Taro"とか"田中"とかの方がいいね
その"a"とラムダ式のaは関係ない
それを示すために
> ※ a, b は単なる引数だから (x, y) => x.itemID - y.itemID とかでもいい
って書いたんだけどね

505:デフォルトの名無しさん
21/02/06 22:27:37.15 AyWHBNPF0.net
>>492
以下のメソッドの同じ意味
一々メソッドを定義するの面倒だし、型とか一々書くのが面倒で省略しまくったのがラムダ式と思うとイメージしやすい
int Hoge(Item a, Item b)
{
return a.itemID - b.itemID;
}

506:デフォルトの名無しさん
21/02/06 22:49:39.66 UYR2I7R3M.net
>>493
出来ました!ソートされました!
本当にありがとうございます!

507:デフォルトの名無しさん
21/02/06 23:20:37.38 b6D0c/Lh0.net
>>484
水虫でスヤスヤ

508:デフォルトの名無しさん
21/02/07 18:04:33.39 4v/nAOdwF.net
個々の人たちは若い女性には優しい

509:デフォルトの名無しさん
21/02/07 20:57:57.25 knu7zqoU0.net
ラムダ式はちゃんと練習したいな、なんか練習問題集みたいなのないのかな?
特に


510:キャプチャーの概念が自分の感覚と狂う狂う



511:デフォルトの名無しさん
21/02/07 21:21:20.13 S7zvZDvX0.net
意味不明
それでしか書けないものがあるならまだしも
結局モノが作りたいんじゃないなら
この職には近づかないほうがいいぞ
不幸になる

512:デフォルトの名無しさん
21/02/07 21:21:56.15 pmm7svGna.net
真面目な話、ラムダ式はそこまで奥は深くない気がする。
決していきがって言ってないつもり。
キャプチャーに関してはC#5.0での破壊的変更が逆に落とし穴になってるような
気がしないでもないけど、他に直感を裏切るような落とし穴があるわけでもないし
URLリンク(ufcpp.net)
川俣さんの記事が割とよく書けてると思うしあれ読めば十分じゃないのかな

513:デフォルトの名無しさん
21/02/07 22:40:06.94 emwEhLVE0.net
arcoderでもやってりゃいいんじゃないの?

514:デフォルトの名無しさん
21/02/07 23:10:43.01 YZfkY6ii0.net
>>500
あの人、川俣さんって言うんだ?
知らなんだ

515:デフォルトの名無しさん
21/02/07 23:56:40.34 zExDTdlVd.net
俺もラムダ式は最初意味不明すぎて苦労した
何で躓いたかって言うと一番は用途が不明な点
デリゲートとか覚えたらそこから理解できた

516:デフォルトの名無しさん
21/02/08 00:50:31.00 Vt5mMx+g0.net
ラムダ式のメリットってなによ
わざと難解に書いてるだけにしか見えん

517:デフォルトの名無しさん
21/02/08 00:57:45.90 GsV6CYPPd.net
>>504
絶対に一度しか使わないような処理を引数として渡したい時に
わざわざメソッドとして書かなくて済む

518:デフォルトの名無しさん
21/02/08 01:00:19.26 BqxWbjT60.net
お手軽処理をその場で書いて渡せることかな

519:デフォルトの名無しさん
21/02/08 01:06:18.03 hRlo1f3e0.net
c#でUSBカメラから録画・録音処理をするライブラリでいいのないですかね?
Accordを使ってみたところ、録画は上手くいったけど録音が上手く動かないしもうリポジトリもアーカイブされてるので乗り換え先を探しています。

520:デフォルトの名無しさん
21/02/08 01:25:17.22 EESpGXM5a.net
デリゲートを理解してればラムダ式自体を覚えるのは何の苦もないと思うけど
確かにデリゲート的な概念って、プログラミング自体初心者だったりお上品な言語しか
やったことない人だと理解しづらいよねたぶん。
それはそうだと思うわ。

521:デフォルトの名無しさん
21/02/08 01:52:41.04 YmxwiogA0.net
ラムダ式がメリットというより
引数として無名関数を指定出来るのがメリットという点を理解すれば良いだけかと
例えばよくあるソートだけど、大抵は2つの比較対象のオブジェクトがラムダ式の引数になるけど、ソート側からしたらそれをどう評価したらいいか分からないから、ラムダ式で評価する関数を戻り値として指定して、ソート側でそれを実行している訳で
この辺の説明でピンとこない人は中々理解できないかも知れない

522:デフォルトの名無しさん
21/02/08 08:20:16.41 PnrMZIJR0.net
>>504
名前をいちいち考えなくていい
引数に変数しか指定できなくて毎回
var I1 = I + 1;
foo(I1);
って書くより
foo(I + 1);
って書く方が楽でしょ
それと同じ

523:デフォルトの名無しさん
21/02/08 09:02:11.48 6em1tYAf0.net
無名関数は優れた概念だと思う。
問題はコピペが簡単にできる現代であれほど省略する必要があったのかってこと

524:デフォルトの名無しさん
21/02/08 10:12:50.26 asopwXX20.net
メソッドを記述するのが面倒なだけってのはお前の都合じゃん
あの処理だけどさって同じ開発者同士で話すときに
名前がないのが超超超超超超超超強烈なデメリットしかない

525:デフォルトの名無しさん
21/02/08 10:42:42.96 XTCsW3fgM.net
ラムダはその場かぎりのちっこい処理にだけ使うものだぞ
命名しておくべきような内容・ボリュームの処理をわざわざ無名のラムダにしておきながらなに言ってんだか
不便にしてるのはお前自身だろ

526:デフォルトの名無しさん
21/02/08 11:03:59.10 gKVPdjPN0.net
僕たまに一行だけのメソッドも作るんでその感覚よくわかりません
あと他でも同じ処理が必要になったときにラムダで書いたから5箇所同じことやってますとか言ったやつは死刑でつ

527:デフォルトの名無しさん
21/02/08 11:06:59.86 LrP4KWut0.net
>>512
いちいちコードの全処理に名前付けるのかって話よ

528:デフォルトの名無しさん
21/02/08 12:05:27.80 TxCBSk9L0.net
>>512
高階関数に渡す処理なので
「ここのWhereの指定だけどさ…」とか
「ここのGroupByに渡してるラムダの書き方だけどさ…」で問題なく話が通じる
話が通じないようなところにラムダを書いてるなら使い方のほうが間違ってるかも

529:デフォルトの名無しさん
21/02/08 12:07:08.93 QaH3FId2M.net
513はわからないんじゃなくて分かろうとするつもりが全く無いだけでしょ
その場限りじゃないことが明白なら1行の処理でも
メソッドにするのは当たり前
というか513はメソッドのラムダ表記すら難癖つけて全面禁止しそうだな

530:デフォルトの名無しさん
21/02/08 12:08:42.71 QaH3FId2M.net
レス番ずれてた
513じゃなくて>>512

531:デフォルトの名無しさん
21/02/08 12:13:39.02 gKVPdjPN0.net
>>516
じゃあ、メソッド名もそうしたほうがいいのかな?

532:デフォルトの名無しさん
21/02/08 12:16:19.29 TxCBSk9L0.net
Linqを使いやすくするためには高階関数を楽に使えるする必要があって
そのために導入されたのが無名関数とその表現形式であるラムダ式
Whereに渡す処理を必ず別の箇所で名前を付けて定義しなきゃいけないようだと面倒だし命名負荷が高い

533:デフォルトの名無しさん
21/02/08 12:17:03.96 TxCBSk9L0.net
>>519
そうしたほうとはどうしたほう?

534:デフォルトの名無しさん
21/02/08 12:52:14.43 NwJJp6aS0.net
>>512
LINQの記述を読めば分かるじゃん

535:デフォルトの名無しさん
21/02/08 12:53:18.46 nKGEYTSta.net
こういう話は抽象論より具体例挙げた方が早いね
例えば>>358に出てくるOrderByが引数に取るセレクターを
実際に自分でラムダ式とメソッドの両方で書いてみれば
ラムダ式の意義なんて自ずから分かるよね
理論的根拠はその後で考えればいい
端的に言えば、アホのな初心者がやる「なんでもグローバル変数(フィールド)」がダメなのと同じ理由よ

536:デフォルトの名無しさん
21/02/08 12:57:17.45 nKGEYTSta.net
>>522
というより、ローカル変数を禁止してすべてフィールドで書こうとしたらどうなるか、と言った方がたぶん通じると思う。

537:デフォルトの名無しさん
21/02/08 13:02:05.07 GsV6CYPPd.net
ここでどんなにラムダ式を否定しようと
大多数の業界人はそうは思わないからわざわざ作られたし普通に使われてるんだよ
マイノリティなの自覚したほうが良い

538:デフォルトの名無しさん
21/02/08 13:05:23.07 gKVPdjPN0.net
ラムダ式なんて書こうとした瞬間に明らかに特殊なことしようとしてんだからメソッドにしろよw
すくなくとももう一回その処理必要になった時点でメソッドにしたほうがいいだろ?
違うか?
検索一つとってもお前と別のやつは異なるラムダ式で同じことをやるかもしれなくて
そしてそれを見つけるのは異常に困難であると予想できる

539:デフォルトの名無しさん
21/02/08 13:05:46.79 WEC5Fu99M.net
>>504
LinQとの相性

540:デフォルトの名無しさん
21/02/08 13:13:24.77 nKGEYTSta.net
>>526
違うよ。
メソッドというのは「意味のあるある程度まとまった処理にその処理を表す名前をつけたもの」だ。
あまりに単純でアドホックな処理を無理にメソッドにしようとすると、
(1) 命名に困る(処理が単純すぎて他と区別できるような適切な名前がつけられない)
(2) メソッドの数が無意味に増えることで見通しが悪くなる
という問題が起こる。
だから、>>524をやったら起こるのと同じ問題を回避するためだよ

541:デフォルトの名無しさん
21/02/08 13:17:25.53 gKVPdjPN0.net
>>528
え?じゃあ、同じことやってるのにラムダ式1、ラムダ式2、ラムダ式じゃない方法1、ラムダ式じゃない方法2みたいなコードがソース中に散布されちゃうけど
何か防止する方法あるの?
検索一つとっても起きちゃうよね?

542:デフォルトの名無しさん
21/02/08 13:21:46.31 nKGEYTSta.net
>>529
馬鹿の一つ覚えはよくない。
もちろんケースバイケースで再利用を意識してメソッドにした方がよいケースもある。
今の論点は「ラムダ式に存在意義はあるのか?」ではないの?
誰も「デリゲート引数には必ずラムダ式を渡すべき」などとは言ってないでしょ

543:デフォルトの名無しさん
21/02/08 13:23:07.55 gKVPdjPN0.net
>>530
質問にこたえてよ
はぐらかさないでさ
一件でもあるなら最早使うべきではないでしょ?

544:デフォルトの名無しさん
21/02/08 13:26:13.21 nKGEYTSta.net
何を指してはぐらかしてると言ってるのか意味がわからないけどw
この人は暇つぶしがしたいだけなのかな?
まあ俺もそうだから文句はないけどねw

545:デフォルトの名無しさん
21/02/08 13:29:26.72 gKVPdjPN0.net
>>532
もういいよバイバイ

546:デフォルトの名無しさん
21/02/08 14:13:21.62 8emHxm3F0.net
LINQは難しくてよくわからないから使用禁止っていう会社本当に有るらしいよ

547:デフォルトの名無しさん
21/02/08 14:17:19.77 YmxwiogA0.net
同じようなものをコピペするのが嫌だったら
普通にメソッド定義して、それを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みたいな指定で動く
まぁ、何度も同じような式を使うなら別のクラスに集めておくというのも無くは無いけどね

548:デフォルトの名無しさん
21/02/08 14:30:19.75 5JxS4RLeF.net
>>507
NAudio
OpenCV.NET

549:デフォルトの名無しさん
21/02/08 15:07:36.60 hRlo1f3e0.net
>>536
opencvの画像処理とNAudioの音声処理って同期できるんでしょうか?
画像フレームイベントと音声フレームイベントでそれぞれ同じファイルに対して書き込んでいくイメージが浮かびましたが

550:デフォルトの名無しさん
21/02/08 19:08:17.30 xjBqJ/6J0.net
USBカメラでトラブルなくなんとかなりそうなのはUWPじゃね?

551:デフォルトの名無しさん
21/02/08 19:23:42.76 4Qyy9go20.net
ラムダ式使うなの人はvar使うなと同じ匂いがするな

552:デフォルトの名無しさん
21/02/08 20:35:50.80 Pr1Hp8QQ0.net
λ式つかうとき、なんとなく不安なので()で囲みたくなる
()で囲むなら{return }ぐらい書いても対して変わらないような気がしてくる

553:デフォルトの名無しさん
21/02/08 20:45:30.47 7ndpGKbk0.net
一番優先すべきは自分が(グループが)理解しやすいかどうかだからいいんじゃない?
三項演算式も単純な物以外は使わない方がいいと思うし
()で囲むなら囲むで全部囲むと統一すべきとは思うけど

554:デフォルトの名無しさん
21/02/08 20:47:10.26 PnrMZIJR0.net
>>539
まあ身の回りにいないならどうでもいいや

555:デフォルトの名無しさん
21/02/08 21:00:30.48 NgGwlfwa0.net
>>507
MediaFoundationでいいじゃん。

556:デフォルトの名無しさん
21/02/09 02:08:46.17 W+QSEYkH0.net
c#はコードの記述量を減らす仕様の追加は多いよね
書き方も奇妙でなく今までの記述と整合性はあるし悪くない
でも増えた仕様を知らないとソースは読めないし覚える事が多くなって初心者が戸惑う事はないのかな

557:デフォルトの名無しさん
21/02/09 08:42:10.30 Y6/VWBkq0.net
varを使っていて読みにくいコードはvarを使ってなくても読みにくいって
ufcppの人が言ってた

558:デフォルトの名無しさん
21/02/09 08:42:13.95 k5T/Xgmha.net
>>544
知らない記述が出てきた時点で調べれば事足りるだろ

559:デフォルトの名無しさん
21/02/09 09:08:22.60 MQ4HPmPO0.net
>>544
いつまでたってもマクロを実装しない時点でコード量を減らしたいという意図があるとはとても思えない
ソースジェネレーターも全然違うしあくまで安全性第一な言語

560:デフォルトの名無しさん
21/02/09 09:08:35.67 Q6+voU8N0.net
それはそうだけど??とか.?とかは調べても分からんよねっていう(検索しても引っかからないので)

561:デフォルトの名無しさん
21/02/09 09:23:40.65 Ad7Y09LZ0.net
C# "??演算子"
とかで検索すればヒットしたよ

562:デフォルトの名無しさん
21/02/09 09:27:48.15 62rZ0qzr0.net
>>546
>>548が言うように調べにくいっていうのはあるわな
ラムダ式って呼び方知らなきゃググるだけでも大変だし

563:デフォルトの名無しさん
21/02/09 09:30:16.24 62rZ0qzr0.net
>>549
それ、"演算子" っていう知識があるから
まあ最近は C# ?? で 演算子 をサジェストされたりするけど

564:デフォルトの名無しさん
21/02/09 09:54:22.07 Ad7Y09LZ0.net
>>550,551
確かに初心者はラムダ式や演算子なんて用語は最初は知らないだろうけど、学習の過程で当然学ぶべき事柄でもあると思うよ。
だから、やりたいことだけググって断片的な知識を積み重ねるだけでは不十分で、最低一冊は入門書とかで基本的な用語や概念について一通りは理解できないまでも聞いたことはあるというくらいにはなっていくべきだと思う。

565:デフォルトの名無しさん
21/02/09 10:42:08.15 62rZ0qzr0.net
べきべき言われても…

566:デフォルトの名無しさん
21/02/09 12:10:30.66 5WPpwWTv0.net
他言語経験者が入門書をバーっと一通り見るなんて1日ありゃできるんだし、それすらやらずに演算子という単語も知らないんだから調べようがない!とかどんだけ甘えたいのとしか思えない
はじめてのプログラミングでC#やってますってのならなおさら入門書ちゃんと見ようねってだけでは

567:デフォルトの名無しさん
21/02/09 12:30:07.39 MQ4HPmPO0.net
ところで質問なんだけど、Jpegバイナリのポインタ、もしくはSpan<T>からBitmap作る事って標準ライブラリで可能?
byte[]にせずStreamでラップもせずに出来る方法があれば教えてもらいたい

568:デフォルトの名無しさん
21/02/09 12:47:47.15 eguAZIqj0.net
> Streamでラップもせず
の理由は?
これさえなければUnmanagedMemoryStreamで簡単だと思うけど

569:デフォルトの名無しさん
21/02/09 12:52:26.96 MQ4HPmPO0.net
>>556
別に大した理由じゃないから実際現状はImage.FromStreamにUnmanagedMemoryStream渡してやってるけど
瞬間的に大量のjpegを変換するから標準でSpan<byte>かbyte*で渡せる関数があるならそれに越したことはないなと

570:デフォルトの名無しさん
21/02/09 22:21:08.48 dAJwA0Wq0.net
.NET5って.NET Frameworkと.NET Coreを統合した奴になるんですか?
Windows10のデスクトップ用に書いたコードが自分のiPhoneでも走るようになるんですか?

571:デフォルトの名無しさん
21/02/10 00:44:02.96 PXY5WDG20.net



572:のある勘違いだな 俺もできるならそうあってほしい



573:デフォルトの名無しさん
21/02/10 01:36:35.72 eSNkeEaH0.net
じゃあ、統合する利点は?

574:デフォルトの名無しさん
21/02/10 07:33:17.31 9TuBJaQx0.net
>>526
車輪の再発明

575:デフォルトの名無しさん
21/02/10 17:27:33.39 Eg7RIeNgM.net
frameworkはwin10を続ける限りサポートしなくちゃいけないけど
coreは3年間だけで済む
まったくかんたんだ

576:デフォルトの名無しさん
21/02/10 18:43:48.14 WeU5fM2j0.net
.NETなんて辞めればいいのにと思うけどねぇ
.NET Coreの事は全然詳しく無いけどGUIアプリ作るなら結局はWPFと殆ど同じぽいし
こんなの流行る訳無いよなぁ
WinFormsぐらいの気軽さが無いとちょっとしたアプリを作る気にもなれないw
もうそういうのも何でも感でもwebみたいな事になりつつあるけど

577:デフォルトの名無しさん
21/02/10 18:51:06.66 cIkntQZr0.net
>>560
別ける必要がなくなったから統合するだけ

578:デフォルトの名無しさん
21/02/11 06:25:03.02 z8KyJUiV0.net
>>562
で、.NET5ではどんだけサポートしなきゃならないの?

579:デフォルトの名無しさん
21/02/11 06:25:30.46 z8KyJUiV0.net
>>563
んだんだ
WPFは近所のコンビニに行くのにジェット機使うぐらい面倒臭い

580:デフォルトの名無しさん
21/02/11 06:26:05.10 z8KyJUiV0.net
>>564
じゃ、今までなんで分けてたの?

581:デフォルトの名無しさん
21/02/11 06:28:27.83 k5l1P+DH0.net
意識高い系が作ったから
XMLで画面デザイン、俺かっこいい

582:デフォルトの名無しさん
21/02/11 06:41:08.46 z8KyJUiV0.net
>>568
ちょっとなに言ってんのかよくわかんないな by 富澤
しかもXMLじゃなくてXAMLじゃないの?

583:デフォルトの名無しさん
21/02/11 06:45:22.54 k5l1P+DH0.net
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.

584:デフォルトの名無しさん
21/02/11 07:54:59.98 z8KyJUiV0.net
それでも「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</嗜好品>
  </内容>
 </支出>
</おこづかい帳>
・・・一体、どんなデザインになるんだろな、これ?

585:デフォルトの名無しさん
21/02/11 08:10:23.63 Xnd4NzfF0.net
馬鹿なのかしら…

586:デフォルトの名無しさん
21/02/11 08:39:30.15 k5l1P+DH0.net
日常生活に問題が出る程の馬鹿だな

587:デフォルトの名無しさん
21/02/11 09:00:10.84 bJBhJ33y0.net
>>567
出自が違うからだろ
合併した会社になんで今まで別だったの?
って聞くようなもんだ

588:デフォルトの名無しさん
21/02/11 09:14:28.30 zGBoORUF0.net
>>568
まあある意味意識高い系が作ったから自動テストが楽でCI/CDバッチリってところだよな。

589:デフォルトの名無しさん
21/02/11 09:27:06.58 k5l1P+DH0.net
デメリットもあるけど、メリットもあるね。
ザマリンは取り巻きがユーザーを馬鹿にして炎上したけど

590:デフォルトの名無しさん
21/02/11 09:58:06.70 w5wYX4n30.net
htmlを触れる程度の知識があればxamlでアニメーションをやらないレベルまでなら簡単に扱えるはずなのにな
webアプリを使える設定の人が何故そこまでxamlを拒否するのか理解に苦しむ

591:デフォルトの名無しさん
21/02/11 10:01:50.05 k5l1P+DH0.net
世の中業務アプリ屋だけだと思うなよw

592:デフォルトの名無しさん
21/02/11 10:04:15.26 zlnnHWka0.net
このまえ興味本位で「WinFormsぐらいの気軽」なソフトを WPF で作ってみたけど、別にタイヘンってことはなかったような。
まあ環境が違うから覚えることはあったけど。・・・もう忘れたけど。w

593:デフォルトの名無しさん
21/02/11 10:07:51.67 zGBoORUF0.net
一応Forms爺とWeb派は別勢力だと思いたいところだけど、たしかに
Forms爺がWPFをdisるためだけにwebを持ち出している感も否めない。

594:デフォルトの名無しさん
21/02/11 10:18:08.25 bJBhJ33y0.net
>>577
簡単だけど記述量が多くて結構面倒って感じ
css程度の記述量で済むようにして欲しいわ
あとstaticresourceやdynamicresourceとか使おうとすると結構ムズい

595:デフォルトの名無しさん
21/02/11 10:37:27.67 7XoW1ZA50.net
WebView2ってWPFみたいに重くないの?

596:デフォルトの名無しさん
21/02/11 11:00:57.44 K3umRmpBD.net
XAML∈XMLって理解できないバカがいるな

597:デフォルトの名無しさん
21/02/11 11:12:52.35 89K1HM4Z0.net
>>566
winFormsと同じように書けますよ。
イベントハンドラーで。
ただ、みんな苦行プレイ(mvvm)が好きなだけ。

598:デフォルトの名無しさん
21/02/11 11:16:29.74 89K1HM4Z0.net
>>566
WPFの実装みるとまず
コードベースの実装があってそれに対応する
XAMLベースの表現(記法)がありますね。
なのでその逆で考えれば良いです。

599:デフォルトの名無しさん
21/02/11 11:22:49.45 w5wYX4n30.net
Formsもそのまま使えば楽ちんだけど、ちょっと凝ったことやってオーナードローに手を出すと途端に面倒になる
>>584
WinUIになるとvmにイベントハンドラを書けるから、そこらへんは解消されるんだけどね

600:デフォルトの名無しさん
21/02/11 11:53:47.88 89K1HM4Z0.net
>>586
単にwinFormsの改良版としてWPFつかえますよ。
(テンプレートをXAMLで実装してるので
幸福になれます。)
その基礎の上にMVVMを追加してるだけです。
早く気づきましょう!

601:デフォルトの名無しさん
21/02/11 12:46:25.44 c/k7g2fva.net
WPF(XAML)固有の問題なのか宣言型に一般的な問題なのか判断するだけの
経験がないのでアレだけど、WPFの一番嫌なとことは
自分が書いたコードでも後から見たとき何をどうやって実現してるか、
理解するのに時間が掛かり過ぎること。これが他人の書いたコードならなおさら。
なんちゃらフレームワークでMVVMなんてやってるとこの傾向にさらに拍車がかかる。
こんなもの推進してる奴はメンテを考慮する必要性がなく他人のコードを読むことも
やらない人種なんじゃないか?というのが偽らざる感想。
ちょっと上のラムダ式批判とかはスタティックおじさん級の無理解か勘違いだろうけど、
誕生から15年とか経過してここまで普及しないXAML系はやっぱり根本的にどこか問題があるとは思うね。

602:デフォルトの名無しさん
21/02/11 12:51:30.38 zGBoORUF0.net
>ここまで普及しない
そもそもこれ事実かねぇ?単に5chでアンチWPFの声が大きいだけにも思うが。

603:デフォルトの名無しさん
21/02/11 13:01:06.47 bJBhJ33y0.net
初心者スレでイキってないでそろそろこっちへ行け
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
スレリンク(tech板)

604:デフォルトの名無しさん
21/02/11 13:05:05.39 h8j/NKIWM.net
だって専門スレだと笑い者にされる馬鹿にされるんだもの

605:デフォルトの名無しさん
21/02/11 16:31:22.52 PvN170ep0.net
>>588
これは同意
QtのQMLとかと比べると
XAMLが不必要に冗長でノイズが多いのがよく分かる
URLリンク(doc.qt.io)

606:デフォルトの名無しさん
21/02/11 17:04:29.55 zGBoORUF0.net
その辺の印象はやっぱりxml自体に馴染みがあるかどうかで違うんだろうな。
自分は独自文法よりxmlの方がよっぽどありがたいが。
あと現実問題として、サードパーティのコンポーネントを追加するなら名前の
衝突をを考慮しないとならないが、xmlなら名前空間が規格に含まれているので
こういった用途に適している。

607:デフォルトの名無しさん
21/02/11 17:34:42.76 89K1HM4Z0.net
>>592
Blendを作る為に必要だった機能だからね。
使わなきゃ意味...
>>593
XAMLとその上に構築された
MVVMライブライリがゴッチャになってるね。
XAMLのタグはC#で簡単に作れる事に
気づけてない人の割合は99%ぐらいなのかな?

608:デフォルトの名無しさん
21/02/11 17:42:30.14 k5l1P+DH0.net
リソースに対する優位性は?
ロード時間を犠牲にするだけのメリットが
無いと選択されないな

609:デフォルトの名無しさん
21/02/11 18:13:31.33 MqaoYapD0.net
winformと同じくらいのコード量で作れるようにしてくれないと困るわ

610:デフォルトの名無しさん
21/02/11 18:28:09.94 bJBhJ33y0.net
>>596
老害はそのままWinForms使ってなよ

611:デフォルトの名無しさん
21/02/11 19:32:48.45 MqaoYapD0.net
なんかイキってるやつがいるな

612:デフォルトの名無しさん
21/02/11 19:47:54.21 k5l1P+DH0.net
pinta も paint.NET もWPFを採用していない
事が全て(=向き不向きがある)
だと思うのだけどね。
信者はそれを受け入れられないw

613:デフォルトの名無しさん
21/02/11 20:05:19.03 qDEqQMnn0.net
WinFormsに回帰せよ
見た目は最新のモダンなGUI部品、
中身はWinFormsってのも不可能じゃないでしよ、頑張れよMS

614:デフォルトの名無しさん
21/02/11 20:09:34.00 7n3rG35h0.net
もうQtでよくね?と思う
商用もOKっぽいし

615:デフォルトの名無しさん
21/02/11 20:13:58.80 k5l1P+DH0.net
QImageかQPixmapがMatサポートしたら
考える

616:デフォルトの名無しさん
21/02/11 20:22:34.99 zGBoORUF0.net
>>599
よりによってWPFリリースより前に開発されたソフトを持ち出す頭の悪さ

617:デフォルトの名無しさん
21/02/11 20:28:55.42 k5l1P+DH0.net
>>603
WPFは2006年。pintaは2010年。
4桁の比較も出来ない馬鹿は死ね

618:デフォルトの名無しさん
21/02/11 20:45:16.85 MZXX+vIJ0.net
>>600
賛成

619:デフォルトの名無しさん
21/02/11 20:48:28.14 zGBoORUF0.net
pintaはPaint.NETを参考にクロスプラットフォーム対応でGTKで開発したもの
元のPaint.NETの開発は2004年

620:デフォルトの名無しさん
21/02/11 23:20:50.41 89K1HM4Z0.net
ちょっと戻って整理してくれ。
WPFは従来型(コードビハインド)での実装も
根本レベルでサポートしてるのに、
なんでwinFormsに回帰したいん?

621:デフォルトの名無しさん
21/02/11 23:42:04.25 zlnnHWka0.net
>>596
自分で書かなきゃならないコード量ってそんなに違ったっけ?
このまえ「WinFormsぐらいの気軽」なソフトを WPF で作った時は自分で書いた量はそんなに違わなかったような。

622:デフォルトの名無しさん
21/02/12 00:29:54.50 STyCrufi0.net
Wpfは、Prism.Unity等のDIコンテナ使う前提で設計すると、コード量は却って少なくなるんじゃね?
DIそのものじゃないが、Event Aggregatorなんか凄く便利だ

623:デフォルトの名無しさん
21/02/12 02:33:39.65 8skgNT+D0.net
非同期の勉強してるんですが、
1つの処理を非同期にしたら、それを呼び出すメソッドも、更にそのメソッドを呼び出すメソッドも非同期に・・・・
って感じになってしまうんですが、ピンポイントで非同期にして上手い設計にするコツを教えてください。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch