2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

C#, C♯, C#相談室 Part93

1 :デフォルトの名無しさん(ワッチョイ 1e06-m8Mb):2017/04/22(土) 08:52:00.93 ID:iVvswOrb0.net
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

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

■前スレ
C#, C♯, C#相談室 Part92
http://echo.2ch.net/test/read.cgi/tech/1485589613/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2 :デフォルトの名無しさん (ワッチョイ de35-HDOw):2017/04/22(土) 10:57:42.55 ID:g8ZT1khs0.net
■過去スレ
C#, C♯, C#相談室 Part89
http://peace.2ch.net/test/read.cgi/tech/1443271409/
C#, C♯, C#相談室 Part90
http://echo.2ch.net/test/read.cgi/tech/1455160063/
C#, C♯, C#相談室 Part91
http://echo.2ch.net/test/read.cgi/tech/1467142749/
C#, C♯, C#相談室 Part91 (実質Part92)
http://echo.2ch.net/test/read.cgi/tech/1467211515/
C#, C♯, C#相談室 Part92 (実質Part93)
http://echo.2ch.net/test/read.cgi/tech/1485589613/

>>1
ここは、実質Part94

3 :デフォルトの名無しさん (ワッチョイ 1e06-m8Mb):2017/04/22(土) 13:39:44.03 ID:iVvswOrb0.net
■関連スレ
初心者の質問向けはこちら
ふらっと C#,C♯,C#(初心者用) Part127
http://echo.2ch.net/test/read.cgi/tech/1489498042/

>>2
補足thx。見逃していた

4 :デフォルトの名無しさん (ワッチョイ 7ff7-/JtG):2017/04/22(土) 14:55:56.60 ID:c4VI05+R0.net
おつかれ
キチガイの人(山口人生)は、複数回線もっていそうだからどこまで効果するかは分からんけれど
何もしないよりマシだね、今後もワッチョイ有りで行こう。
死ねばいいのに・・・・

5 :デフォルトの名無しさん (アウアウイー Sa63-wX6N):2017/04/22(土) 15:23:39.94 ID:FEVU7Q4Da.net
誰だよ山口人生ってww

6 :デフォルトの名無しさん (エムゾネ FFaa-TkTn):2017/04/22(土) 15:39:01.94 ID:S+KK7a41F.net
正しいスレ番と設定で立てました

C#, C♯, C#相談室 Part94
http://echo.2ch.net/test/read.cgi/tech/1492843013/

7 :デフォルトの名無しさん (ワッチョイ 7ff7-/JtG):2017/04/22(土) 16:06:32.09 ID:c4VI05+R0.net
>>5
ググッてみてば分かるw
東大出でイリノイ大学で不完全性定理で有名なゲーデルの弟子として著名な
竹内外史先生の弟子になってPh.Dを取るも、神奈川大学で万年講師、研究室の壁を蹴って騒音出していたらクビになってしまったヤツwww
経歴だけ見るとスーパーエリートwwww
学歴荒らしがあるところに山口人生あり、酷い学歴厨の60台後半じぃさん
実家はお金持ち、もう親は鬼籍かな?ビル持っていて資産が一億切っているとか、絶対ヤバそうw
P=NPを主張しているが誰にも相手にされず、学会では芸人扱いw

8 :デフォルトの名無しさん (アウアウイー Sa63-wX6N):2017/04/22(土) 17:40:53.42 ID:L9cy9Aq3a.net
統失くんいらっしゃい、ってかw

9 :デフォルトの名無しさん (ワッチョイ 7ff7-/JtG):2017/04/22(土) 17:57:12.00 ID:c4VI05+R0.net
敬意が足らないですね、糖質超教授と読んであげましょうwww
いらっしゃらなくていいです、迷惑なので死んでください

10 :デフォルトの名無しさん (ワッチョイ bb4c-VP69):2017/04/22(土) 19:18:48.92 ID:7MQLYtSw0.net
本当のその山口ってのなのか?

11 :デフォルトの名無しさん (ワッチョイ 7ff7-/JtG):2017/04/22(土) 19:41:05.45 ID:c4VI05+R0.net
張り付き方が異常、現役じゃ不可能
発言が山口人生と似ているし話が高齢者臭い、中年ですらない
Delphiを使っていて最近C#に移ってきている
ここまでのマジキチには普通日常で出会うことは無い、希少種

そんなヤツがこの日本に何人もいてたまるかwwww

12 :デフォルトの名無しさん (ワッチョイ bb4c-VP69):2017/04/22(土) 20:05:29.05 ID:7MQLYtSw0.net
このスレ、自分以外は全部同じ人が書き込んでたりしてw

ちょっとしたホラーだな

13 :デフォルトの名無しさん (ドコグロ MM33-MUXz):2017/04/22(土) 20:49:00.38 ID:IUEn1/EeM.net
なんかワッチョイ付いてると気に入らないみたいよ
俺は付いてるほうが好きだからこっちのスレのがいいな

14 :デフォルトの名無しさん :2017/05/03(水) 17:15:57.72 ID:crwmH6BQM.net
こっち使おうぜ

15 :デフォルトの名無しさん :2017/05/05(金) 16:32:19.84 ID:bVbNjYk40.net
今日発見した衝撃の事実
なぜWindowsUpdateの時ファイルがぶっ壊れるのかというのがずっと謎だった
Application.ThreadExit イベントで書き出しスレッドの終了処理していたのだが
手動のシャットダウンだと問題なく呼ばれるのに、リブートするとThreadExitが呼ばれない
それどころか、フォアグラウンドで作成していたスレッドが強制終了させられている上
System.Threading.ThreadAbortExceptionmもSystem.Threading.ThreadInterruptedExceptionも送出されないまま
突然中断で終了しやがってた・・・
ひでぇ終了の仕方だ・・・
なんでリブートに限りこんなシーケンスで強制終了しやがるんだ、この糞が・・・

16 :デフォルトの名無しさん :2017/05/05(金) 16:49:33.38 ID:tHPUBlll0.net
セキュリティ的にアプデは大事だからね
多少強引な手段で終了してもいいよね仕方ないね

17 :デフォルトの名無しさん :2017/05/05(金) 17:01:44.90 ID:3XrDrf840.net
シャットダウンと再起動で違うのか

18 :デフォルトの名無しさん :2017/05/05(金) 17:10:34.10 ID:pBlqXMv00.net
もっと詳しく知りたい。

SessionEndingイベントとかで捕まれないんか?
それ

19 :デフォルトの名無しさん :2017/05/05(金) 17:16:16.69 ID:bVbNjYk40.net
>>16
セキュリティは最終的には自分のファイルが壊れないことを目的にやるわけだが
そのセキュリティ対策が破壊してくれるのであれば、本末転倒なのでそんな対策は不必要って思うわけだよ。

20 :デフォルトの名無しさん :2017/05/05(金) 17:17:13.60 ID:bVbNjYk40.net
>>18
SessionEndingイベントが来たときはもう殺された後だねw
ここでは対策出来ない。

21 :デフォルトの名無しさん :2017/05/05(金) 18:09:02.57 ID:pBlqXMv00.net
>>20
おおう、そうなんか。

22 :デフォルトの名無しさん :2017/05/05(金) 18:13:33.93 ID:A3oUashQa.net
>>15
Windows Updateだろうが何だろうがリブート開始時に
ユーザーに確認なくプロセスの強制終了なんてそもそもされないと思うよw

何か勘違いしてない?

23 :デフォルトの名無しさん :2017/05/05(金) 18:24:50.53 ID:A3oUashQa.net
ちょっと調べた感じ
http://news.mynavi.jp/column/windows/270/
にあるような感じでレジストリいじっちゃったんだろうねw

24 :デフォルトの名無しさん :2017/05/05(金) 18:43:02.46 ID:PzvORh1V0.net
>>22
EWX_FORCEとかEWX_FORCEIFHUNGを指定してるんでしょ
https://msdn.microsoft.com/ja-jp/library/cc429713.aspx
セキュリティアップデートは確実にリブートする必要あるから多少の犠牲はやむを得ない
って思ってるんじゃね?

25 :デフォルトの名無しさん :2017/05/05(金) 19:11:23.54 ID:FiATWWo80.net
客側でこれを指定されたらたまらないなー

26 :デフォルトの名無しさん :2017/05/05(金) 19:58:14.99 ID:ueXs9gXt0.net
ExitWindowExの英文説明では、DWORD dwReservedのとこがdwReasonになってんね。

このへんかな

27 ::2017/05/05(金) 20:10:07.89 ID:05XvGSted.net
プロセスの終了確認はあるだろうか、その結果タイムアウトした時のスレッドの落とし方はものすごい強引だった気がする。
昔shutdown -s -t 01で落として確認した事ある。

28 :デフォルトの名無しさん :2017/05/05(金) 20:14:25.56 ID:3cKL/0El0.net
OSの仕様なのか.NET独特の挙動なのか>>23みたいな話なのかはっきりしないな
.NET独特の挙動だったら業務でアプリ作っている人は死活問題じゃね

29 :デフォルトの名無しさん :2017/05/05(金) 20:27:56.88 ID:PzvORh1V0.net
>>26
日本語版のドキュメントが更新されてないだけみたい
WindowsXPからdwReasonになってる

30 :デフォルトの名無しさん :2017/05/05(金) 20:30:18.07 ID:A3oUashQa.net
いやいやデフォではプロセス強制終了なんてないよ絶対w

Winduws Updateはデフォでは自動になってるんだから、Windows Updateが走るたびに
そんな無茶苦茶やってたら世界中で大騒ぎになってるってw

XPの時代はそんな経験したような記憶もあるけど
少なくともVista以降はないと思うよ

31 :デフォルトの名無しさん :2017/05/05(金) 20:34:57.11 ID:3cKL/0El0.net
俺は趣味でやっているだけだしアップデートも任意のタイミングでしかやらないからどうでもいいが
VSの有料ライセンス買っている人がいて心配だったら直にMSに聞いた方がいいな

32 ::2017/05/05(金) 20:48:13.06 ID:05XvGSted.net
>>28
業務アプリが走るような環境は、社内でKB単位で配布して、ログイン前に当たるようにしてると思う。
>>30
本人はプロセスじゃなくてスレッドを問題視してるのでは?

33 :デフォルトの名無しさん :2017/05/05(金) 22:27:29.53 ID:ueXs9gXt0.net
>>30
言いたい事はわかるw

まーもちつけ

34 :デフォルトの名無しさん :2017/05/06(土) 07:24:56.49 ID:KTPtsEWO0.net
>>30
10以前はWindowsUpdateをするタイミングをこちらの問題の無いタイミングで出来たから
そもそも問題自体が存在しなかったという事実。

35 :デフォルトの名無しさん :2017/05/06(土) 07:54:55.96 ID:rojhZA3i0.net
適度にトラブル起こしてあげないと窓際族の情シスの仕事がなくなっちゃうからね

36 :デフォルトの名無しさん :2017/05/06(土) 08:25:02.90 ID:2V5tVO5D0.net
>>27
これは良いこと聞いた。
うちも似たような仕組み作ってるグループあるから、ExitWindowsExも利用して調査してみるよう伝えてみるわ

37 ::2017/05/06(土) 08:57:56.21 ID:BE072L/9d.net
>>36
UIスレッドでメッセージボックス出しとくと、プロセスを落とす正規ルートからはずれて再現できるとか、なんか色々こねくり回したよ。
今だと仮想マシンあるから、マシンが上がってくるの待つ辛さ無いかもね。

38 :デフォルトの名無しさん :2017/05/25(木) 06:03:37.70 ID:OZ9w4Yf70.net
ロック処理についてちょっと相談です

●二つ以上のオブジェクトを同時にロックしたい
片側づつ順を追ってロックしていくのはダメ、デッドロックするので。
ロック出来ない状態である限り、ロックは限りなくしないようにしたい。
ロックに失敗までのタイムアウト処理もしたい。

●例えばこれだと、デッドロックを引き起こすので良くない
lock(obj1) lock(obj2) 処理;

●そこで、言語に以下のような構文があれば理想的なのだが
ないので、それらしいヘルパを作りたい、できれば効率的な物。
lock(obj1,obj2, ... ,timeout=1000) {
 ロック成功の場合の処理
}
timeout {
 タイムアウトした場合の処理
}

39 :デフォルトの名無しさん :2017/05/25(木) 06:03:54.24 ID:OZ9w4Yf70.net
●とりあえず簡単に考えた、しかし無駄が多そうに見える、もっと良いものが欲しい。
DateTime begin = DateTime.Now;
再試行:
bool l1 = Monitor.TryEnter(obj1, 0);
bool l2 = Monitor.TryEnter(obj2, 0);
if (l1 && l2) {
 goto ロック成功;
} else {
 if(l1) Monitor.Exit(obj1); // チェックと共にロックしてしまうので、このコードも残念賞
 if(l2) Monitor.Exit(obj2); // 同上
 if ((DateTime.Now - begin).TotalMilliseconds > 1000) {
  goto タイムアウト;
 } else {
  System.Threading.Thread.Sleep(10); // この待ち方も酷い
  goto 再試行;
 }
}
タイムアウト:
{
 タイムアウト処理
}
ロック成功:

40 :デフォルトの名無しさん :2017/05/25(木) 07:25:50.25 ID:zdaQwC0X0.net
ていうか普通にロック専用のオブジェクト作ってそれをロックすりゃいいんじゃねーの

41 :デフォルトの名無しさん :2017/05/25(木) 07:32:55.17 ID:OZ9w4Yf70.net
>>40
それだとロック粒度が大きくなりすぎて逆にデッドロックの可能性を拡大してしまいますね。

42 :デフォルトの名無しさん :2017/05/25(木) 07:34:38.83 ID:ZdIAUNK00.net
セマフォ使ったらどう?
資源数もタイムアウトもあるし

43 :デフォルトの名無しさん :2017/05/25(木) 07:36:13.98 ID:OZ9w4Yf70.net
>>42
セマフォは重いんですよねぇ
それをやるくらいなら>>39の例の方が効率的ですね。

44 :デフォルトの名無しさん :2017/05/25(木) 07:50:05.84 ID:OZ9w4Yf70.net
>http://article.higlabo.com/ja/thread_locking.html
lock(Monitor.Enter/Monitor.Exit) 同じプロセス 20ns
Mutex 違うプロセスも可能 1000ns
SemaphoreSlim 同じプロセス 200ns
Semaphore 違うプロセスも可能 1000ns
ReaderWriterLockSlim 同じプロセス 40ns
ReaderWriterLock 同じプロセス 100ns

Semaphoreは高機能すぎて、あまり軽々しくは使えない。
そのわりにはlockと違ってスレッドチェックがないので自家中毒を起こしたりするので、別途そのための対処が必要になったりする。
lock 20nsはやはり捨てがたいものです。

45 :デフォルトの名無しさん :2017/05/25(木) 08:14:43.50 ID:CNpknsWj0.net
見も蓋もないが、設計が間違ってる気がする。

46 :デフォルトの名無しさん :2017/05/25(木) 08:20:40.14 ID:OZ9w4Yf70.net
>>45
そんな事は無いと思うんだけどな、セマフォに標準で実装されているように
これはマルチスレッドデザインパターンとしては基本になるかと。
というか教科書にある典型ですし。
ところが、Monitorにはなかったので、おや何故ない?となっている所。
せっかく高性能なのに有効活用できないのは勿体ないと。

47 :デフォルトの名無しさん :2017/05/25(木) 08:30:18.43 ID:a8axhl9cd.net
>>46
そもそもなぜロックが必要なの?

48 :デフォルトの名無しさん :2017/05/25(木) 08:34:06.74 ID:OZ9w4Yf70.net
>>47
分からないならレスしないでもらえますか?
流されては叶いません。

49 :デフォルトの名無しさん :2017/05/25(木) 08:52:37.16 ID:CNpknsWj0.net
>>39
みたいなことをするぐらいならSpinLockを使った自前実装で処理したほうが良いかもしれない。

もしくは
>>lock(obj1) lock(obj2) 処理;
これでもデッドロックしないように、Lockする順番を厳格にしてコーディングするとか

というか、言葉遣いに気を付けたほうが良いと思うよ。

50 :デフォルトの名無しさん :2017/05/25(木) 08:54:51.29 ID:foQMlEN20.net
そんなにパフォーマンスが大事ならオプティミスティックロックも検討したら?
どうせ滅多に競合なんかしないでしょ

51 :デフォルトの名無しさん :2017/05/25(木) 09:01:40.08 ID:a8axhl9cd.net
>>48
そもそもロックが必要という判断に至った理由が明らかでない
ロックがベストな選択肢である保証はどこにもない

52 :デフォルトの名無しさん :2017/05/25(木) 09:04:40.54 ID:OZ9w4Yf70.net
>>49
ここにいる知らなくてもレスしないと死ぬ病気にかかっている奴はどうしょうもない。初心者の上にキチガイなら死ねって感じですが。
とりあえず、スピンロックは使いたくないですね、あれはCPUタイムをすり潰しながら高速動作を確保しようとするものだから
それの主用途は、激重計算タスクを並列処理するための物であって、目的とちょっと違いますね。
あと、排他処理をちゃんと勉強すると、順序等を考えていても意味が無くて
ロックする瞬間に作業に必要になるリソースをすべて確保して、必ず抜けられるという事の方がデッドロックに対する対処としては有用です。
でも、上に書かれているように一つのオブジェクトで粒度を上げてしまったら本末転倒になります。

53 :デフォルトの名無しさん :2017/05/25(木) 09:05:42.97 ID:OZ9w4Yf70.net
>>51
ちゃんとわかっている人を待っているんだから黙ってろ

54 :デフォルトの名無しさん :2017/05/25(木) 09:12:36.71 ID:foQMlEN20.net
アイデアを募るならもっと広い視野で考えたほうがいいってことでしょ
矮小な問題に限定されすぎていて、マイクロベンチマークレベルの不毛な議論にしかならない
状況によっては工夫すればロックフリーな実装もできるかもしれないよ

55 :デフォルトの名無しさん :2017/05/25(木) 09:21:45.74 ID:CcaoVCJwa.net
うわあ。これは無視すべき奴だw

56 :デフォルトの名無しさん :2017/05/25(木) 09:24:19.81 ID:CNpknsWj0.net
>>52
https://www.jpcert.or.jp/java-rules/lck07-j.html
ソースはそれっぽいものを適当に引っ張ってきた
ロックする順序は意味あると思うんだけど、、、

デッドロックが怖いってことだと思うんだけどさ
親から子へ順番守ってロックすればデッドロックしないじゃん?

57 :デフォルトの名無しさん :2017/05/25(木) 09:24:47.08 ID:OZ9w4Yf70.net
>>55
世の中上には上の奴がいるんだよ、俺なんかよりはるかに知識を持っている奴はいくらでも。
お前より俺の方が知識あるが、そんな俺よりもはるかに凄いやつは山のようにいるんだ。
そろそろ、中二病みたいな全能感は捨てな

58 :デフォルトの名無しさん :2017/05/25(木) 09:32:43.15 ID:OZ9w4Yf70.net
>>56
親子関係があれば、親についている操作ようのメソッドにロック処理をいれれば問題ないですね。
でも、今回のは完全に独立しているオブジェクト間です。
ちょっと難しいですね。
実際問題としては、順序を使う側にすべて守らせるというのは、理屈では語れても実践的ではないかもしれません。
やはり、ロック時間を短くする事が肝要であり、その為には粒度を小さくするのが基本となるかと。
汎用的なやり方としては、この方法がもっとも優れていると思います。
なので、この方法をより高パフォーマンスで実現できるヘルパーを実装して纏めて利用したい訳です。
だから、別の方法は考えていないです。Monitorを使った高速排他処理が今回の最終目標です。

59 :デフォルトの名無しさん :2017/05/25(木) 11:13:36.68 ID:5itOJ4P90.net
楽観的ロックのタイムアウトで、ロールバックするのが確実

人間には絶対にミス・バグがあるから、
デッドロックを100%、起こさないようにする事は、絶対に出来ないから

60 :デフォルトの名無しさん :2017/05/25(木) 11:20:25.49 ID:ts6Ek6dYM.net
これ触っちゃいけないやつじゃん・・・

61 :デフォルトの名無しさん :2017/05/25(木) 11:39:35.31 ID:OZ9w4Yf70.net
>>59-60
だから、もう来るなって、お前には何も聞きたいことは無いし、そんな話は聞かされたところで新たな何かには全くつながらない。
C#スレには、初心者用じゃないもう一本の匿名ゴミすれあるだろ、そっちいけよ。
分かっている人が来たときにコメントがゴミだらけになる。

62 :デフォルトの名無しさん :2017/05/25(木) 12:20:12.43 ID:XlAyjrlQa.net
たぶん質問者の方が俺よりずっと詳しそうだから釈迦に説法だと思うけど、

>●例えばこれだと、デッドロックを引き起こすので良くない
>lock(obj1) lock(obj2) 処理;

これがデッドロックしうるのはこのスレッドがobj1だけをロックした状態で
別のスレッドがobj2をロックして、そのスレッドがobj1を待機してる場合だよね?

この場合このスレッドがobj1をアンロックしない限りobj2もアンロックされないからデッドロック

だから、ネストの内側のock(obj2) だけをタイムアウト付きのMonitor.TryEnterに置き換えれば
効率的かどうかはどうかはともかく、要件は満たせるんじゃいないの?
知らんけど

63 :デフォルトの名無しさん :2017/05/25(木) 12:28:42.96 ID:OZ9w4Yf70.net
>>62
まさにその通りです、それが直下に書いた雑な例です。
このヘルパーを作りたいという訳です、見るからに美しくないので詳しい人の登場をお待ちしているという所です。
必要な全ロック取得に失敗したら即座に全て解放して、乱数時間まって次を伺う。
これはよくある教科書通りです。

64 :デフォルトの名無しさん :2017/05/25(木) 13:09:08.98 ID:a8axhl9cd.net
>>62
キチガイに触るなよ

65 :デフォルトの名無しさん :2017/05/25(木) 13:35:53.97 ID:Gj1BXJi/M.net
基地外大暴れワロタ

66 :デフォルトの名無しさん :2017/05/25(木) 13:51:23.71 ID:CNpknsWj0.net
http://ideone.com/GHvgKN
勢いで書いた。

67 :デフォルトの名無しさん :2017/05/25(木) 13:59:41.85 ID:OZ9w4Yf70.net
>>66
いいっすね、いいっすね
Thread.Sleep(100); ← ここがもうちょっとマシな待ち方になるといいんですがw
自分はインターフェイスは、IDispose使ってロック範囲を lock で書いたような雰囲気にしてます。
タイマーは、初ロック失敗の後にスタートさせて、ロック成功(大半のケース)でロスが少ないようにしてます。
なかなか素敵な感じになってくれませんw

68 :デフォルトの名無しさん (ワッチョイ 1f1b-6//c):2017/07/11(火) 08:22:12.16 ID:MCsEtOKi0.net
↓のテンプレートとジェネリックの違い、にある
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/generics/differences-between-cpp-templates-and-csharp-generics
トップ項目にある
・C# ジェネリック クラスでは、ユーザー定義演算子は呼び出すことができますが、算術演算子を呼び出すことはできません。
"算術演算子を呼び出すことはできません"ってどーいう意味っすか?
算術演算子って+-*/のこと?

69 :デフォルトの名無しさん (アウアウイー Sacb-G8QH):2017/07/11(火) 09:57:14.72 ID:t4lUkhAUa.net
遠まわしに制約について言ってるのかな。

算術演算子が使える型のみ受け入れるような制約はできないから
自動的に算術演算子は使えないことになるわけだけど...

70 :デフォルトの名無しさん (ワッチョイ 5eea-bL4e):2017/07/16(日) 01:54:50.85 ID:mMdQfX5s0.net
楽しそうだな。w

71 :デフォルトの名無しさん (ワッチョイ 6a90-qWRz):2017/07/29(土) 20:36:18.47 ID:Gw88XuqA0.net
ジェネリックに算術演算子を使うなら、そんなに速度が要求されないんなら
(dynamic)にキャストしてからなら演算子が使える
まあこれキャッシュ付きのリフレクションだから速度は期待しないでよー

72 :デフォルトの名無しさん :2017/08/21(月) 18:56:43.94 ID:LgNyTwHt0.net
C++ではテンプレートに焦点をあてた書籍はいくつかあるけど
C#でジェネリックに絞ったオススメ書物ってのはありますか?
C++のテンプレートテクニックのどれが使えないか?ってのは知りたい。

73 :デフォルトの名無しさん :2017/08/21(月) 19:55:10.65 ID:KmAQXiSua.net
C#のジェネリックって1時間で読める記事で網羅されるぐらいの内容しかないっすよ

74 :デフォルトの名無しさん :2017/08/21(月) 20:02:09.15 ID:vP5jpteT0.net
テンプレートテクニックとか全部忘れてOK

75 :デフォルトの名無しさん :2017/08/21(月) 21:10:14.69 ID:qdRqCzb30.net
プレートテクトニクス

76 :デフォルトの名無しさん :2017/08/27(日) 02:29:03.34 ID:/hywh0UG0.net
式テンプレートジェネリックでどー書くんだよ

77 :デフォルトの名無しさん :2017/10/09(月) 21:40:27.74 ID:dzl0TrLma.net
すみません。ちょっと急いでいます。

C#でクラスを宣言する際に、
class {...} とpublic class {...}
このふたつの違いが判りません。
教えてください。

78 :デフォルトの名無しさん :2017/10/09(月) 21:54:29.58 ID:rAF1hT8M0.net
お願いします。同じものですか?

79 :デフォルトの名無しさん :2017/10/09(月) 21:56:31.06 ID:28tAbNEV0.net
アクセス修飾子を省略したクラスは internal になる
public とか internal とかの意味については↓

アクセス修飾子 (C# プログラミング ガイド) | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers

80 :デフォルトの名無しさん :2017/10/09(月) 21:56:50.83 ID:u67WqECL0.net
>>77
外部から見えるか見えないか

81 :デフォルトの名無しさん :2017/10/09(月) 22:03:58.01 ID:rAF1hT8M0.net
ありがとうごぜます。
internalですね。アセンブリ言語レベルの話のようなので
まだそこまで至ってないのでpublic, private, protectedだけ使います。
すみませんでした。

82 :デフォルトの名無しさん :2017/10/09(月) 22:12:08.58 ID:Y4203ffV0.net
「アセンブリ」ってみて「アセンブリ言語」って理解するのは先が思いやられるな。全然意味が違う話なのに

83 :デフォルトの名無しさん :2017/10/09(月) 22:16:05.20 ID:28tAbNEV0.net
>>81
上記のページで「アセンブリ」と言ってるのはアセンブリ言語のことではなくて
「exe」とか「dll」とかのファイル単位での機械語のまとまりのことだよ

84 :デフォルトの名無しさん :2017/10/09(月) 22:41:05.37 ID:rAF1hT8M0.net
ありがとう。
今自分でも調べていてなんか違うなーって思ってました。

85 :デフォルトの名無しさん :2017/10/09(月) 23:04:42.97 ID:/pZGRYTm0.net
bin

バイナリ・ファイル

86 :デフォルトの名無しさん :2017/10/10(火) 00:40:47.02 ID:pliWVB3X0.net
今となっては、いや初めから忘れてもいい話だったけど
ファイル単位の物理的なまとまりはモジュール(.netmodule)で
モジュールをまとめた論理的まとまりがアセンブリ(.dll/.exe)
Visual Studioが2002の初めから一貫してサポートしてないこのモジュールって単位をMSはどう使うつもりだったんだろう

87 :デフォルトの名無しさん :2017/10/10(火) 21:13:43.71 ID:9Raz+qz10.net
最終的に1つのライブラリにしたいものをC#とF#で部分ごとに書き分けるとかそういう例は見た事あるけど
(ものによってはF#のほうが書きやすいとか)
実際それが必要なユーザがどれだけいるのかって話な

88 :デフォルトの名無しさん :2017/10/10(火) 23:25:11.21 ID:I+aeGBiR0.net
C++/CLIとC#の組み合わせがある。

最終的な呼び出し元はネイティブと同じ口なんだけど、
dynamicやasync/awaitなどを使いたいため、
dllexport付近の薄皮一枚だけ C++/CLI、
残りは全部C#で記述して1つの.dllにってのに.netmoduleを使う。

C#とF#の組み合わせとか、ほとんど無意味に思えるが…

89 :デフォルトの名無しさん :2017/10/11(水) 03:26:54.68 ID:rqqSAVqsM.net
iron python も?

90 :デフォルトの名無しさん :2017/10/18(水) 13:52:47.94 ID:ufsScDVj0.net
event解除ってnullぶっこんでもいいのかしら?
何処見ても-=でしろってのばかりで全解除の適切なやり方載ってないんだけど
一応null代入で動いてるぽいけどちと不安

91 :デフォルトの名無しさん :2017/10/18(水) 14:05:31.13 ID:4p9Ry6Jxa.net
まいなすはそれだけ消す、nullはすべて消す
できわるいコードだとnull入れると落ちるw

92 :デフォルトの名無しさん :2017/10/18(水) 14:18:32.71 ID:ufsScDVj0.net
全解除ってそれなりに需要あると思うんだが何処も扱ってない不思議
+=って内から外へ処理出しする訳だから
インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
nullぶっこめばGC回収されるみたいだけど正しいやり方なのかな

93 :デフォルトの名無しさん :2017/10/18(水) 15:17:21.27 ID:8oWZ+6kpM.net
設計次第じゃないの

94 :デフォルトの名無しさん :2017/10/18(水) 15:34:04.84 ID:jnsT8t6ma.net
購読側じゃなく発行側が勝手に解除ってのがちょっと...
むしろどういう場面で必要になるのか想像できないな

> +=って内から外へ処理出しする訳だから
> インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
ここは何を言ってるのかよく分からない

まあ、イベントというかデリゲートのマルキチャストの仕組みが分かりづらいのはわかる

95 :デフォルトの名無しさん :2017/10/18(水) 15:50:00.66 ID:h6dEijxza.net
>>92
正しいというかとりあえず安全なのは何もしないの放り込んどく
それでも勝手に消されて困るのがあるかもしれんがw

96 :デフォルトの名無しさん :2017/10/18(水) 16:11:03.50 ID:ufsScDVj0.net
>>94
例えば非同期通信でデシリアライズ終わったらイベント投げて後は勝手に死ね、って場合
-=だと発行側で解除するのが困難でリークしちまう
最新VerC#ならTaskで後処理書けばいいけど、Unityだとつい最近まで3.5だったから

97 :デフォルトの名無しさん :2017/10/18(水) 16:24:45.96 ID:jnsT8t6ma.net
>>96
俺の理解不足だったらごめん

リークするのはイベントの購読側のオブジェクトLがイベントの購読を解除しないまま
Lを参照する変数がなくなった場合で、発行側のオブジェクトPのイベントに
Lのメソッドが登録されたままPへの参照がなくなってもそれはリークにならないと思うんですが

98 :デフォルトの名無しさん :2017/10/18(水) 16:39:10.41 ID:ufsScDVj0.net
>>97
そう思ってた時期が俺にもありました
しかし実際はリークしてOutofMemoryが出る
どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい
本当にそういう理屈かは知らんけどnullぶち込むと例外でなくなる

99 :デフォルトの名無しさん :2017/10/18(水) 17:26:02.20 ID:jNhOnQNR0.net
思い込みって怖いネー

100 :デフォルトの名無しさん :2017/10/18(水) 17:46:05.16 ID:GswCLlj60.net
>>98
>どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい

登録解除してないから購読側は発行側から参照されてて回収されない
その状態で購読側が発行側を参照してるんなら発行側も回収されないよね

101 :デフォルトの名無しさん :2017/10/18(水) 19:19:26.31 ID:j/PgXgnk0.net
循環参照しててもルートから到達不能なら回収されるよ
されないなら単に循環参照以外の参照が何かしら残ってるだけ

いいや解放されないね!とかいう思い込みに付き合う気はないから
口ごたえがしたければ、VSのメモリーアナライザーで
リークしているというオブジェクトの参照状態のスナップショットを撮って
ここに貼り付けてから続けるように

102 :デフォルトの名無しさん :2017/10/18(水) 21:18:06.23 ID:GswCLlj60.net
>>101
すまんすまん、他の言語と勘違いしてた。

103 :デフォルトの名無しさん :2017/11/07(火) 14:20:16.62 ID:7CEykIkZ0.net
WebBrowserコントロールを使うと、レジストリ編集しないと自動的にIE7相当になってしまうんですが、
レジストリ編集無しでIE11相当にするにはどうしたらいいでしょうか?

もしくは、dllファイル1つで済むなら、他のブラウザコンポーネントでもいいです。

104 :デフォルトの名無しさん :2017/11/07(火) 14:42:48.60 ID:uJ4GX7RNM.net
IEは他にはhtmlのmeta要素使うとか
レジストリっていってもHKCUなんだからアプリ起動時に書き込むだけのことだけど

105 :デフォルトの名無しさん :2017/11/07(火) 18:40:38.64 ID:MJK6I9RA0.net
>>103
CefSharpっていうChromiumの実装がNuGetにあるよ
AnyCPUに対応してないんで導入が若干手間だけど気合いでがんばれ

106 :デフォルトの名無しさん :2017/11/08(水) 00:31:11.06 ID:NuL34q9d0.net
>>103
CoInternetSetFeatureEnabled

107 :デフォルトの名無しさん :2017/12/18(月) 07:59:20.53 ID:mWvJQqvN0.net
#EntityFrameworkの質問ってここでよいですか?

EFCore+Sqliteで開発してるんですが、".db"ファイルのパス指定で困ってます。

コネクション作成時に、以下でdbパス指定をしています。
var connectionString = new SqliteConnectionStringBuilder { DataSource = @"./app.db" }.ToString();

この場合、理由がよく分かってないのですが、
Update-Databaseを実行した時(CreateDatabaseが発行される時)、プロジェクトフォルダからの相対パスになり、
SaveChangesを実行した時(Insert文が発行される時)、/bin/debugからの相対パスになります。

毎回相対パス指定を変えるのが面倒で、かつ絶対パス指定はしたくないもので。
何か良い方法はありませんでしょうか。

108 :デフォルトの名無しさん :2017/12/18(月) 13:46:10.03 ID:325qmzymM.net
ここじゃないと思うの

109 :デフォルトの名無しさん :2017/12/18(月) 14:56:45.39 ID:dTBoNCZ50.net
>>107
で、app.dbはどこに有るのよ、

110 :デフォルトの名無しさん :2017/12/18(月) 14:57:20.68 ID:E4FIT7xPa.net
俺ならexeパス取得して絶対パス作ってそれ使うけど、
絶対パスいやならカレントフォルダ変更したら?

111 :107 :2017/12/18(月) 23:30:30.75 ID:mWvJQqvN0.net
>>109
プロジェクトフォルダにできます。
ただ、プログラム実行時は別のパス見てるからDBないエラーになります。

>>110
あー、それいいかもです。
やってみます。

112 :デフォルトの名無しさん :2017/12/31(日) 15:13:16.63 ID:n7dS7ECy0.net
個々の人ってWinFormとWPFどっちで作ってる?

113 :デフォルトの名無しさん :2017/12/31(日) 15:13:40.84 ID:K0nOGJob0.net
WPF

114 :デフォルトの名無しさん :2017/12/31(日) 16:15:17.15 ID:jcdX0HHma.net
何度聞かれてもformだ

115 :デフォルトの名無しさん :2017/12/31(日) 16:16:35.61 ID:PdI3PgJiM.net
オレも2年前からWPFにした。

116 :デフォルトの名無しさん :2017/12/31(日) 16:35:43.42 ID:GvxCaHuK0.net
新規は基本的にWPFだけど、使い捨てのツールはFormsのことも多い。

117 :デフォルトの名無しさん :2017/12/31(日) 16:54:40.12 ID:Jm0z8SXaF.net
昔はVSが何かっつと即堕ちして使いもんにならんかったが
今はまともになったんかねWPF

118 :デフォルトの名無しさん :2017/12/31(日) 17:32:53.36 ID:n7dS7ECy0.net
WPFって技術資料があんまないから、つっかかりにくいんだよなあ

119 :デフォルトの名無しさん :2017/12/31(日) 18:07:24.15 ID:jSVu2Yi+0.net
>>118
日本語が変だな
外国人?

120 :デフォルトの名無しさん :2017/12/31(日) 18:22:11.56 ID:OKQGXBiEx.net
>>119
あれだ外人からみれば
そうみえんじゃねw

121 :デフォルトの名無しさん :2017/12/31(日) 20:17:21.07 ID:jSVu2Yi+0.net
つっかかりにくい→つかえやすいorつっかえやすい
それとも
つっかかりにくい→とりつきにくいorとっつきにくい

あんまない→あまりないorあんまりない

122 :デフォルトの名無しさん :2017/12/31(日) 20:22:19.59 ID:TCYSbVmxa.net
読解力ないな
外国人?

123 :デフォルトの名無しさん :2017/12/31(日) 20:26:45.27 ID:sT88mvz00.net
読解力が無かったら修正例は書けないと思う

124 :デフォルトの名無しさん :2017/12/31(日) 21:26:10.60 ID:mh0j3eXv0.net
どこかの田舎もんが書いた文章なんだろ

125 :デフォルトの名無しさん :2018/01/01(月) 08:43:08.79 ID:qva7Cn1y0.net
そんな事にも突っ込まないといけないほど余裕がないんだろうな

126 :デフォルトの名無しさん :2018/01/08(月) 21:07:22.93 ID:ff9XOb220.net
ILMergeについて質問です

例えば自作アプリ X.EXE に外部ライブラリ A.DLL と B.DLL を結合して X2.EXE を作ったとします
この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?

127 :デフォルトの名無しさん :2018/01/08(月) 21:23:20.13 ID:/QyX6ETP0.net
>>126
それはILMerge関係なくA.DLL と B.DLL のライセンスの問題です
結合が禁止されていなければ添付して配布するのと同じになります
どんなライセンスかによって違うので
【License】ライセンス総合【利用許諾】
https://mevius.5ch.net/test/read.cgi/tech/1266247461/
へどうぞ

128 :デフォルトの名無しさん :2018/01/08(月) 21:33:00.91 ID:7hYpzMEE0.net
>>126
> この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
各々のライセンスを確認するしかない

129 :デフォルトの名無しさん :2018/01/08(月) 22:13:04.36 ID:ff9XOb220.net
>>127-128
レスありがとうございます

130 :デフォルトの名無しさん :2018/01/31(水) 23:46:33.39 ID:3zSQiFnB0.net
ラムダ式から右辺の情報を取得する事は出来ますか?

.net MVC のソースコードを見ていて思ったのだけど、たとえば razor の Html.LabelFor メソッドは第一引数に
m => m.name などと書いて、引数 m で示すクラスインスタンスの name プロパティの DisplayName 属性の値を
ラベルとして表示していたりします。

ということは、ラムダ式 m => model.name から name プロパティの属性情報を取得しているのだと思うのですが、
どうやってるのかさっぱり分からず。
調べるべきキーワードだけでもいいので、ヒントをいただけませんか。

131 :デフォルトの名無しさん :2018/02/01(木) 01:19:13.10 ID:7ACR6glp0.net
ラムダ式を受け取るメソッドの引数を
Func<String>の代わりにExpression<Func<String>>にしたりする
キーワードは式ツリー

132 :130 :2018/02/02(金) 00:27:05.13 ID:eoTWLp2s0.net
>>131
ありがとー。
軽く見てみましたが、Expression ってよく分からないですね。。
式ツリーでも、もっと調べてみます。

133 :デフォルトの名無しさん :2018/02/13(火) 16:59:47.00 ID:KbLCHvlc0.net
サイズ、位置が固定されているウィンドウを外部プログラムから移動、サイズ変更する方法を教えてください

134 :デフォルトの名無しさん :2018/02/13(火) 20:22:55.89 ID:ElvL/+ZbM.net
とりあえず一般的には
FindWindowやEnumWindowsで目的のウィンドウのウィンドウハンドルを手に入れて
SetWindowPosする
>>133のウィンドウがこれでできるかどうかはそのプログラムの作り次第

135 :デフォルトの名無しさん :2018/02/13(火) 20:56:39.50 ID:KbLCHvlc0.net
>>134
ありがとうございます
それで移動、サイズ変更できないウィンドウをどうにかできないかなと思い質問してみました
ユーザーが移動サイズ変更できないウィンドウでも強引にしてしまうプログラムがあるらしいので、どうしてるのかな?と

136 :デフォルトの名無しさん :2018/02/13(火) 21:00:42.72 ID:00bUqpHu0.net
>>135
とりあえず直接のC#の話でなくWinAPIなんだからそっちで調べた方がいいと思うよ

137 :デフォルトの名無しさん :2018/02/13(火) 21:21:31.71 ID:KbLCHvlc0.net
>>136
ありがとうございます

138 :デフォルトの名無しさん :2018/02/16(金) 06:01:32.86 ID:W1XJdyx10.net
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

139 :デフォルトの名無しさん :2018/04/09(月) 14:21:53.70 ID:hXBdpr6O0.net
厳密に言うとC#の話じゃないんだけど
TcpClientでコネクション使い回しというか
開けっ放しでデータ送り切るって出来ない?
flushしてもデータ残っててCloseしないと全部送られない

140 :デフォルトの名無しさん :2018/04/09(月) 15:36:40.77 ID:Cpp6LEO80.net
ソースで説明してくれ

141 :デフォルトの名無しさん :2018/04/09(月) 15:51:30.50 ID:hXBdpr6O0.net
そんな複雑な話じゃないんだ
GetStream()でストリーム取ってWrite()するだろ
でもClose()しないとケツのいくばくかはいつまで経っても送られない
断続的に送りたいから、いちいちClose()してからConnect()やり直すとかしないで済む方法あるか知りたい

142 :デフォルトの名無しさん :2018/04/09(月) 15:59:29.12 ID:uvdwBq6N0.net
NoDelay=true

143 :デフォルトの名無しさん :2018/04/09(月) 16:03:49.46 ID:hXBdpr6O0.net
おおサンクスやってみる

144 :デフォルトの名無しさん :2018/04/16(月) 21:16:34.15 ID:f86xegYk0.net
質問です。

非同期実行について勉強中です。

以下のサイトの内容なんですが、

https://ufcpp.wordpress.com/2012/11/12/asyncawait%E3%81%A8%E5%90%8C%E6%99%82%E5%AE%9F%E8%A1%8C%E5%88%B6%E5%BE%A1/

ページ中ほどにある
"スレッド プール実行"

"一方、内側は、スレッド プール上での実行になりますが、スレッド プール上のコンテキストではawaitしてもスレッド プール上のどこかで実行されるだけで、決してUIスレッドには戻らなくなります。"
の意味が理解できません。プール上のどこかで何が実行されるのでしょうか?


また、その下の”問題となる書き方の例”

”Task.Runの中のawaitでは、単一スレッド実行にはならないので、lockが必要になることがあります。”

理解が出来ませんでした。

2連続someTask()は同時に実行されるという意味でしょうか?

145 :デフォルトの名無しさん :2018/04/16(月) 21:51:32.37 ID:zRE5gkIia.net
スレッドは使い捨ての領域だから、
その中で遅延実行しても戻り値は受け取れないよ
だって戻る領域が数秒後も存在しているか分からないからね
って意味だと思う

146 :デフォルトの名無しさん :2018/04/16(月) 23:04:11.81 ID:qlfABgAK0.net
マルチスレッドなんて、素人がやるものじゃない。
Ruby を作った、Matz でさえ、何十年もやっていないのに

OS・CPU が今、どのプロセスのどのスレッドの、どの実行コードを実行しているのか、
君のプロセスのスレッドから、わかるわけないでしょ

同期処理じゃないのに。
バラバラに、無関係に動いているのに

逆に言えば、バラバラに動くスレッドの、
現在実行中のコードがわかるのなら、それは同期処理になる

147 :デフォルトの名無しさん :2018/04/16(月) 23:28:22.82 ID:pnvSaCZFa.net
これがシングルスレッドおじさん再登場の瞬間であった

148 :144 :2018/04/17(火) 06:32:51.54 ID:/3sDS4fX0.net
どうもありがとう

149 :デフォルトの名無しさん :2018/04/17(火) 08:18:31.78 ID:iJwyhGM3M.net
シングルスレッドだけで出来る仕事って限られてないか。通信なんか絡んだらマルチスレッド必須でしょう。私の現場は.net3.5なんでback|ground work|er使ってるよ。

150 :デフォルトの名無しさん :2018/04/17(火) 08:24:21.80 ID:AgNOdAZLM.net
>>149
taskって4.0からだっけ?

151 :デフォルトの名無しさん :2018/04/17(火) 10:03:57.21 ID:iJwyhGM3M.net
>>150
確かそうです。
taskとか使えると楽なんですが4.0強制もできない案件なんで。

152 :デフォルトの名無しさん :2018/04/17(火) 10:50:32.95 ID:EhGIAhyrd.net
どうしても.net3.5を使わないといけないんだったらRxで処理するわん

153 :デフォルトの名無しさん :2018/04/17(火) 11:51:31.97 ID:iJwyhGM3M.net
おっ!
いいこと教えてもらった。
Rxってsilverlightだけじゃないんだ。

154 :デフォルトの名無しさん :2018/04/17(火) 12:18:07.14 ID:xGjbcgxza.net
そんなの使えるなら.NET4だって使えるでしょw
3.5が使えて4が使えないプラットフォームは存在しないと思うけど

155 :デフォルトの名無しさん :2018/04/17(火) 12:48:49.14 ID:JQ78IAVca.net
そういう問題じゃないんだよ・・・

156 :デフォルトの名無しさん :2018/04/17(火) 13:03:19.02 ID:iJwyhGM3M.net
お客様のPCがWindows7ならデフォルトで3.5が入ってるでしょう。4.0にしてから使ってくださいとは言いずらい。

157 :デフォルトの名無しさん :2018/04/17(火) 13:07:10.43 ID:rojjHsw+0.net
ちょっと前までUnityも3.5止まりだったから多少はね?

158 :デフォルトの名無しさん :2018/04/17(火) 16:37:52.80 ID:joazaAE7M.net
Rxってなんぞや!!

159 :デフォルトの名無しさん :2018/04/17(火) 17:17:34.43 ID:JQ78IAVca.net
gugure

160 :デフォルトの名無しさん :2018/04/17(火) 19:00:52.03 ID:F4BOoGzu0.net
ググれは正論だけど、せっかく話題になったんだからここの住民の意見も聞いてみたい。使ってる人の感想とか。

161 :デフォルトの名無しさん :2018/04/17(火) 19:14:49.95 ID:joazaAE7M.net
せや!Rxについて詳しく

162 :デフォルトの名無しさん :2018/04/17(火) 19:54:15.01 ID:xGjbcgxza.net
全然関係ないけど、receiveの略が何でRxなのか昔から結構謎

163 :デフォルトの名無しさん :2018/04/17(火) 20:38:22.07 ID:F4BOoGzu0.net
それ組み込みの世界だね。送信ポートはTxだ。スレチだね。

164 :デフォルトの名無しさん :2018/04/18(水) 14:53:40.81 ID:ur62Feqwa.net
インストールされている証明書の読み取り、エクスポートをやりたいんだけどさ
ググるといろいろ出てきてX509とかってのを使うと良いとある
まだ実装とか全然なんだけど、この情報だけだと不安なのでだれかやったことのある人いない?

X509Cartificate.Exportはバイトデータを吐き出してそのままファイルに保存できるるっぽいけど、秘密キーを設定したいとかあったりしてモヤモヤしてる

165 :デフォルトの名無しさん :2018/05/03(木) 18:58:35.37 ID:+FWBwd0JM.net
ワッチョイなしスレが1000行ったからこっちをage

166 :デフォルトの名無しさん :2018/05/03(木) 18:59:21.23 ID:+FWBwd0JM.net
ageられてなかった…

167 :デフォルトの名無しさん :2018/05/04(金) 20:04:32.00 ID:hRV05sGM0.net
windowformアプリケーションで

form1 ディスプレイの解像度等を入力する。入力したデータをもとにform2に表示する長方形の大きさ(rx,ry)を算出
form2 form1で算出した(rx,ry)をもとに長方形を表示

ってしたいんだけど

A. rx,ryをpublicで定義してform2.csから参照する
B. form1のrx,ryを求める計算式をクラスにしてform2からインスタンス生成して求める

のどちらがお作法的に正しいんでしょう?

168 :デフォルトの名無しさん :2018/05/04(金) 20:12:02.30 ID:h17LifXxa.net
データとUIを分離するとして、データ保持と計算用のクラス、formは入力のみ、表示のみって感じになるのかな
でも、まぁそんなのAでもBでもいいだろ

関係ないが解像度ぐらい自動で取得してくれると楽

169 :デフォルトの名無しさん :2018/05/04(金) 20:14:46.22 ID:QSaueu9Z0.net
なんとなく、こういうのを"お作法"と呼ぶマにはいいイメージがない

170 :デフォルトの名無しさん :2018/05/04(金) 20:20:22.68 ID:hRV05sGM0.net
>>168
ありがとうございます。
解像度は自動取得なのでディスプレイのoサイズでした。

171 :デフォルトの名無しさん :2018/05/04(金) 20:22:53.75 ID:hRV05sGM0.net
>>169
すいません。
プログラミング初めて勉強なので、なるべくへんなコーディングしないように可読性高くと考えてまして、
普通はどう描くんだろうなというところが気になって仕方ない。
public変数作りすぎると、後でどこかで変に触るとわけわからんことになるのかなと極力使わないように心がけてます。

172 :デフォルトの名無しさん :2018/05/04(金) 20:37:07.58 ID:HEa1U9rI0.net
何かフリーソフトを作ってみたくて勉強しているところなのですが、GUI?を学ぶ上で良い本があれば教えていただきたいです

173 :デフォルトの名無しさん :2018/05/04(金) 20:55:12.49 ID:L0LZvRGB0.net
>>171
フォームは入力の受付と出力の描画だけをする
内部で使うデータはモデル側で持つ

174 :デフォルトの名無しさん :2018/05/04(金) 21:33:04.91 ID:hRV05sGM0.net
>>173
それでいってみます。
ありがとうございます。

175 :デフォルトの名無しさん :2018/05/04(金) 21:34:38.54 ID:hRV05sGM0.net
連投すいません。

ユーザー側でフォームのサイズを変えたとしても
常にフォーム右端にボタンを固定する方法ってないでしょうか?

176 :デフォルトの名無しさん :2018/05/04(金) 21:39:42.44 ID:EvkA5vHv0.net
>>175
ボタンのAnchorのプロパティをTop, Rightに変更

177 :デフォルトの名無しさん :2018/05/04(金) 22:00:01.60 ID:hRV05sGM0.net
>>176
Anchorって設定があったんですね。
できました!
ありがとうございます。

178 :デフォルトの名無しさん :2018/05/04(金) 22:18:10.81 ID:hRV05sGM0.net
Form1で作成したmethod1をForm2で使用したい場合どのようにすればいいのでしょう?

Form1.method1();

だとエラーなのですが、form自体がクラスだからインスタンス生成が必要ということでしょうか?
本当に初歩的な質問ばかりですいません。

179 :デフォルトの名無しさん :2018/05/04(金) 23:14:52.98 ID:hRV05sGM0.net
駄目だ煮詰まってきた。

Visualstudioで新規ソリューションを作成して、既存のソリューションからフォームを追加したのですが、
フォームデザインでは新規フォームが表示されているだけ、.Designer.csを除くときちんとコードが記載されているのですが、
[デザイン]:の画面では反映されておらず、この画面でコントロールを追加などするとエラーがでてビルドできなくなります。
フォームの追加の仕方が間違ってるのかなぁ。

180 :デフォルトの名無しさん :2018/05/04(金) 23:16:00.99 ID:o0wzY09D0.net
煮詰まる=完成する

181 :デフォルトの名無しさん :2018/05/05(土) 01:05:27.05 ID:i9GeFih30.net
>>179
エラーの内容は?

182 :デフォルトの名無しさん :2018/05/05(土) 08:03:54.33 ID:CBIAOUw10.net
>>181

エラー CS0121 次のメソッドまたはプロパティ間で呼び出しが不適切です:
'InitalMonitorSetteing.InitializeComponent()' と 'InitalMonitorSetteing.InitializeComponent()'

エラー CS0111 型 'InitalMonitorSetteing' は、'InitializeComponent'
と呼ばれるメンバーを同じパラメーターの型で既に定義しています。

です。

183 :デフォルトの名無しさん :2018/05/05(土) 08:08:30.21 ID:CBIAOUw10.net
ソリューションエクスプローラーで
追加→既存の項目
でフォーム一切合切を取り込むと
フォームの[デザイン]タブのところで新規のフォームが表示され、これをいじると上記エラーが出ます。
フォームの[デザイン]タブをいじらなければ正常に実行されます。

.Designer.csを見るときちんとコードが書かれているので
[デザイン]と.Designer.csが一致していない状態になっているようです。

184 :デフォルトの名無しさん :2018/05/05(土) 08:36:55.68 ID:CBIAOUw10.net
地道に

フォームのデザインすべてコピー貼り付け
コードすべてコピー貼り付け

ってやって追加しました。
なんかネットで見ると、

ソリューションエクスプローラーで
追加→既存の項目
でフォーム一切合切を取り込む

ってやると後々まで得体のしれないエラーに悩まされるので、上の方法を推奨している方がいました。
Visual Studioかフォーム自体の持つバグなんですかね…。

185 :デフォルトの名無しさん :2018/05/05(土) 08:47:39.95 ID:5nbJxYdYa.net
〜VS2015しか使ってないが俺はエラー起きたことないよ。原因分からないけど、何かやらかしてるんでしょ

186 :デフォルトの名無しさん :2018/05/05(土) 09:57:21.01 ID:+PUGPCx60.net
無闇にコピペした結果を環境のバグとか
プログラム向いてないよお前

187 :デフォルトの名無しさん :2018/05/05(土) 10:00:36.87 ID:CBIAOUw10.net
失礼しました。
私がよく理解していないために、しなければいけない作業をしていないのかもしれませんね。

188 :デフォルトの名無しさん :2018/05/05(土) 10:35:22.91 ID:TTUQSH5zM.net
むしろしちゃいけない作業をしてるような気がする...

189 :デフォルトの名無しさん :2018/05/05(土) 11:08:14.41 ID:T9f+iK/r0.net
>>178
そもそもこの質問の時点でFormsのコード部分が何をやってるのか理解できてない可能性がある

190 :デフォルトの名無しさん :2018/05/05(土) 11:25:44.32 ID:qEM4shRT0.net
いきなり難しいことをやろうとするとダメやね

191 :デフォルトの名無しさん :2018/05/05(土) 11:27:18.98 ID:LtMyhhwZM.net
基礎も身につけずに一端のフリして解決しようとして、半端で折れるバカってのはよく聞く話

とりあえず何か入門書籍に頼って動くものを作れ
話はそれからだ

192 :デフォルトの名無しさん :2018/05/05(土) 20:20:18.85 ID:xedbZMvy0.net
>>184
情報共有する場所なんだからこういったいいかげんなこと書くのやめてほしいな
まずソースをそのまま取り込みたいのならプロジェクトに追加で何も不具合は起こらない
それでデザイナが反映されないのならDesigner.csを直接書き換え(認識できなくなるような書き換え)やっているはず
あとユーザーコントロールを内部で追加している場合は一度ビルドするとデザイナで反映される
プロジェクトでなくソリューションにソース追加しても当然何も起こらない
最初からふらっとにいけばいいのに

193 :デフォルトの名無しさん :2018/05/05(土) 20:30:34.54 ID:Tc8hf/iLa.net
WinFormのデザイナは中途半端に内部実行するからしょっちゅうトラブるんだよな
コンストラクタでなんかやってる奴は特に要注意

194 :デフォルトの名無しさん :2018/05/05(土) 22:08:57.94 ID:1Zee5iE50.net
デザイナかどうか判断するコードを書くのは飽きた

195 :デフォルトの名無しさん :2018/05/05(土) 22:38:59.04 ID:T9f+iK/r0.net
そんなあなたに!WPF!

196 :デフォルトの名無しさん :2018/05/05(土) 22:40:45.58 ID:CBIAOUw10.net
フォームをコントロール含めて継承すると継承先でコントロールの編集ができなかったり云々
という書き込みを見たので、
そこで提案されていた新規フォーム作成して
そこにコピペとしてみて結果オーライだったのでそれで良しとしたのですが、
私の方でなにか既存のフォームを取り込むのにまずいことをしてたのかもしれません。
記憶にないけどDesigner.csを直接書き換えしたかなぁ・・・。

フォームで作成するかWPFを使うかを悩んでた時にフォームは放置されたバグが多いと警告されていたので、
単純にバグなのかと思いましたが根拠なくソフトのバグと書き込むのはまずかったですね。
失礼しました。

197 :デフォルトの名無しさん :2018/05/06(日) 07:44:34.64 ID:8BI4PAGy0.net
FormかWPFか悩んでるならWPFを推す。
最初は難しいがXAMLはUWPでも使っていて今後につながると思う。

198 :デフォルトの名無しさん :2018/05/06(日) 15:08:05.14 ID:gzoDeGmX0.net
今後ピクセル単位でのUI作成は完全に無くなるからなぁ

199 :デフォルトの名無しさん :2018/05/06(日) 16:52:40.62 ID:6XezKW2ea.net
多段継承してるカスタムコントロールはぶっ壊れやすい
Winアプリ作らにゃならんならWPFのがマシってのはまあそうだ
でも将来性あるとは思わんな

200 :デフォルトの名無しさん :2018/05/06(日) 17:34:01.02 ID:ZPoK8KSTM.net
WPFそのものの将来性はともかくとして、その技術のエッセンスが次代に引き継がれると思うんです。
今後もWinアプリを開発することになるんで、なるべく将来性と言うか潰しのきく技術に投資したいと思ってWPFにしたんだけど。

201 :デフォルトの名無しさん :2018/05/06(日) 17:36:34.98 ID:w10wIaHya.net
>>199
それはないよw
継承の段数は関係なくて、単にコントロールのカスタマイズは意外と難しいってだけの話

俺も経験があるけど簡単にシステム側のバグを疑いたくなる現象にぶち当たるけど、
ほとんどの場合はプログラマの理解不足によるユーザーコード側のバグが原因

202 :デフォルトの名無しさん :2018/05/06(日) 17:37:23.44 ID:6XezKW2ea.net
潰しがきくってんならなおさら独自仕様なんぞあかんやろ
WPF出てから何年経ってるよ
他に採用してるとこないのはそういうことだ

203 :デフォルトの名無しさん :2018/05/06(日) 17:39:54.31 ID:YMV7ENjt0.net
>>202
XAML

204 :デフォルトの名無しさん :2018/05/06(日) 17:41:16.14 ID:6XezKW2ea.net
>>201
いや正確にはシステムがぶっ壊してるんじゃなく
レイアウト決定だの初期化順番だので罠にはまる確率がガンと上がるって話
コントロール1種を少々カスタマイズしたくらいじゃあんまハマらんさ

205 :デフォルトの名無しさん :2018/05/06(日) 17:43:51.97 ID:EPydt9+c0.net
GDIが使えない時点でゴミ
WPFでCADを提供してみろ

206 :デフォルトの名無しさん :2018/05/06(日) 18:14:23.28 ID:8BI4PAGy0.net
>>202
対案示してくれると検討もできるんですけど。

207 :デフォルトの名無しさん :2018/05/06(日) 18:17:03.64 ID:6XezKW2ea.net
>>206
オプショナル独自仕様なんぞわざわざ覚えんでもC#だけ抑えときゃいいじゃん

208 :デフォルトの名無しさん :2018/05/06(日) 18:17:55.59 ID:JGiuZYwWa.net
formとwpfどっちかじゃなくて、状況に応じてどっちか使えばいい
言語だってそうだ。c#に拘らず、必要に応じてほかの言語も使えば楽になるぞ
縛りプレイとか馬鹿臭くてやってられん

209 :デフォルトの名無しさん :2018/05/06(日) 18:18:35.39 ID:gpR98zCG0.net
何でこのスレ来てるの?

210 :デフォルトの名無しさん :2018/05/06(日) 18:21:30.52 ID:gzoDeGmX0.net
xamlが単なるコードトランレート言語だったなんて知らなかったんだよ。

211 :デフォルトの名無しさん :2018/05/06(日) 18:31:06.82 ID:8BI4PAGy0.net
>>207
まさかの浅い答えでしたね。
今時、なんか開発する時は言語だけじゃなくAPIとかプラットホームとのセットじゃないの?

212 :デフォルトの名無しさん :2018/05/06(日) 18:36:24.83 ID:Yj4OtQcz0.net
最近form触る機会あったけど、WPFになれた後だとバインディングが面倒でならない
formはformでわざわざ部品探したり作る必要ないから良いんだけどね

213 :デフォルトの名無しさん :2018/05/06(日) 18:49:36.56 ID:c85H7Qr90.net
Bindingが遅すぎて使い物にならない

214 :デフォルトの名無しさん :2018/05/06(日) 19:05:20.38 ID:8BI4PAGy0.net
なんか変なイチャモン付けてる人いるけど。
CAD作れるかとか、Formならできるの?
Windows、.net、C#でGUIアプリ作るならFormかWPFしかないじゃん。
Formは終わった技術で行き止まり、WPFは普及しなくて過渡的な技術になるかも知れないがその先につながりそうでって言ってんです。
もっと論理的に反論して欲しいです。

215 :デフォルトの名無しさん :2018/05/06(日) 19:06:34.14 ID:lPSPWHr00.net
昔から居ついてるから一々突っからなくて宜しい

216 :デフォルトの名無しさん :2018/05/06(日) 19:13:48.84 ID:8BI4PAGy0.net
>>215
昔から居てもアホな書き込みすると初学者は惑わされるのよ。
自分が理解出来ない技術はみんなダメって言ってないか?
ちゃんと論理的に反論してよ。
出来ないなら駄まってろ。

217 :デフォルトの名無しさん :2018/05/06(日) 19:15:40.37 ID:JGiuZYwWa.net
formでCAD作ってる奴ぐぐると日本人でも複数いるよ

218 :デフォルトの名無しさん :2018/05/06(日) 19:17:40.07 ID:OZSh5wZJ0.net
>>214
お前さんみたいな銀の弾丸求める奴ぁ先がないぞ
XAMLは文字列だらけで設計の筋がいいとは到底言えない
もし次があるなら全然違うもん出してくるんじゃないの

219 :デフォルトの名無しさん :2018/05/06(日) 19:21:54.60 ID:8BI4PAGy0.net
>>217
FormでできるならWPFでもできるだろう。
Formの優位性は何?

220 :デフォルトの名無しさん :2018/05/06(日) 19:24:56.35 ID:8BI4PAGy0.net
>>218
XAMLは面倒よ、たしかに。
でもね、オレは使ってないがGUIのリソースエディタがあるんじゃないか?
なくても直ぐにできるよ。

221 :デフォルトの名無しさん :2018/05/06(日) 19:27:17.19 ID:8BI4PAGy0.net
>>218
UWPもXAMLだよ。
MSは当面これでいくんじゃないの。
あんたよりMS信じる。

222 :デフォルトの名無しさん :2018/05/06(日) 19:34:40.78 ID:OZSh5wZJ0.net
XAMLの筋が悪い一例としてIDEサポートがHTMLにすら劣る点が上げられる
今でも時々vsごと落ちる
まあ次が出る前にWinアプリ自体がオワコンになる可能性も低くないけどな
あんたの人生だから好きにしたらいいよ

223 :デフォルトの名無しさん :2018/05/06(日) 19:44:28.98 ID:8BI4PAGy0.net
>>222
XAMLでの開発3年弱だがVS落ちた経験ないよ。
Winアプリがオワコンになるんだったら、早いとこ他の言語・環境に移行したら?
オレはWinアプリだけじゃなくタブレットとかスマホにも適用できると思ってるから、この道行くよ。

224 :デフォルトの名無しさん :2018/05/06(日) 19:47:05.22 ID:YMV7ENjt0.net
>>222
俺も落ちたことないんだけど、どんな環境で何したん?

225 :デフォルトの名無しさん :2018/05/06(日) 19:59:30.59 ID:P5UQ0avb0.net
WPFはもちろん最良ではないけど
すくなくとも現行のUWPと共通のXAML使ってるぶんFormsよりは十倍マシ

226 :デフォルトの名無しさん :2018/05/06(日) 20:10:59.67 ID:OZSh5wZJ0.net
メモリ8Gで5段くらいネストした奴編集してたらストンと落ちたぞ
vs2015だ

>>225
「現行では」比較論でまあせやな
将来性は怪しいが

227 :デフォルトの名無しさん :2018/05/06(日) 20:17:33.07 ID:YMV7ENjt0.net
>>226
ハードウェアアクセラレーションの問題ではなくて?

228 :デフォルトの名無しさん :2018/05/06(日) 20:19:15.57 ID:8BI4PAGy0.net
>>226
すごいな。なかなか落とせるもんじゃない。
そんなにWinの将来に悲観的なら、本当にどこかに行ってください。
間違った書き込みを堂々と恫喝的にされると初学者の道を誤らせるよ。
それって罪なことです。
このスレタイでは。

229 :デフォルトの名無しさん :2018/05/06(日) 20:22:22.92 ID:YMV7ENjt0.net
>>228
落ちるときは落ちるさ
こんな風にその問題を追及しないのがアレ
https://stackoverflow.com/questions/31021049/visual-studio-2015-crashes/33182194#33182194

230 :デフォルトの名無しさん :2018/05/06(日) 20:28:51.95 ID:8BI4PAGy0.net
>>229
他の環境はそんなに安定してるのか?
VSが特別に酷いとは思わないけど。
MSデスってなんでここにいるの?

231 :デフォルトの名無しさん :2018/05/06(日) 20:30:40.96 ID:YMV7ENjt0.net
>>230
俺がいつMSをデスった?いつ他の環境と比較した?
ID:OZSh5wZJ0と間違えなさんな

232 :デフォルトの名無しさん :2018/05/06(日) 20:37:41.43 ID:8BI4PAGy0.net
>>231
Winアプリはオワコンって言ったろ。
それより、CAD作ってみろ、って恫喝的に書いたろ。
あのフォローをしてくれ。論理的に。

233 :デフォルトの名無しさん :2018/05/06(日) 20:39:01.49 ID:8BI4PAGy0.net
>>213
ごめん。
人違いだった。

234 :デフォルトの名無しさん :2018/05/06(日) 20:40:12.87 ID:8BI4PAGy0.net
>>233
たびたび訂正ですがアンカ間違えた。
すまん。

235 :デフォルトの名無しさん :2018/05/06(日) 20:46:08.35 ID:OZSh5wZJ0.net
わかりやすく発狂してんなー
初学者どうたら言うんならもっと普及してるもん押すべきじゃあないの?
言っとくけどC#自体は他でも使われてるからなUnityとか

>>229
毎度再現するんでもないからなー
Formでは一回も落ちたことないからXAML関係が比較的不安定なのはそうじゃないの

236 :デフォルトの名無しさん :2018/05/06(日) 20:58:22.97 ID:8BI4PAGy0.net
>>235
見っともないぞ。
昔からいる古狸かも知れないが、もっとちゃんとしろ。
初学者惑わす書き込みを堂々とするのはやめて、自分の考え披露するのは構わないけど。

237 :デフォルトの名無しさん :2018/05/06(日) 21:16:41.42 ID:YMV7ENjt0.net
>>232
だから俺は違うってばwww

238 :デフォルトの名無しさん :2018/05/06(日) 21:31:09.89 ID:JjviwauC0.net
アンカさえまともに書けないやつがコード書けるのか?

239 :デフォルトの名無しさん :2018/05/06(日) 21:39:39.84 ID:8BI4PAGy0.net
>>237
ごめん。
ちょっと酔っ払って熱くなった。
もうここらで寝ます。
>>238
ご心配いただきありがとうございます。

240 :デフォルトの名無しさん :2018/05/07(月) 11:50:51.85 ID:zM6nOBFcM.net
わたし錯乱某

241 :デフォルトの名無しさん :2018/05/08(火) 02:53:46.31 ID:EHD0XpOQ0.net
わい、コンソールアプリしか作ってない

242 :デフォルトの名無しさん :2018/05/08(火) 03:04:56.28 ID:wFWfdcvC0.net
>>241
.NET Core Global Toolsおもしろいよね

243 :デフォルトの名無しさん :2018/05/11(金) 22:56:53.52 ID:oqUyZvi20.net
フォームアプリケーションで

A.初期設定画面
表示する円の大きさ、数、表示座標の範囲などの初期値を設定

B.ゲーム画面
初期設定画面からAの初期値を取得し、メンバ変数に代入して
円を表示する
円を消去する
円の当たり判定をする
などの3つぐらいのメソッドで使用しています。
Bのコードが長くなって200行ぐらいになると、
メンバ変数をどこで使ってるのか全部見なければいけないのは
可読性が悪いのかなと思うようになってきました。
3つのメソッドそれぞれのグループ変数として
それぞれ3つのメソッド内でAの初期値を見に行くコーディングをしたほうが良いのでしょうか?

メンバ変数の方が冗長性はないけど可読性が低くて、
メソッドないのグループ変数にしたほうが冗長性が高いが可読性も高い気がします。

独学でコーディングしているので、お仕事でプログラミングされている方のご意見を伺いたいです。

244 :デフォルトの名無しさん :2018/05/11(金) 23:05:04.79 ID:KxM4SNOx0.net
>>243
Aが入出力と, モデルのデータ保持という3役を担っているのが良くない。
出力が本業なので可能ならばそれに特化するが, 差し当たってはデータ保持を分離して別クラス(モデル)に切り出す

245 :デフォルトの名無しさん :2018/05/12(土) 08:19:23.20 ID:RvuVG0qm0.net
Aは
public int GetTimeLimit
{
bool resultOfGetTimeLimit = int.TryParse(this.timeLimit.Text, out int timeLimit);
if (resultOfGetTimeLimit)
  return timeLimit;
else
return 0;
}

が10個ぐらいあるだけで、Aの可読性はいいのですが。

Bのクラスから→Aのインスタンス生成→フォーム表示しているので、

Bが
1. Aからの初期値取得
2. 取得した初期値でゲーム画面表示
3. ゲーム中の処理
4. スコアデータとAの初期値テキストファイルへの書き出し

という4つの異なった処理(特に2,3のコードが長い)をしているのと、
Aのコードの量も400行近くになっているのが可読性低下の原因かと思います。

246 :デフォルトの名無しさん :2018/05/12(土) 08:19:38.98 ID:RvuVG0qm0.net
Bの別のクラスを作って分離させたいんだけどBからAのインスタンス生成しているので、
BAの画面処理に基づいた1234はすべてBに入れることになってるんですよね。

これって画面遷移が良くないってことなのかなぁ?

一般的に1234の処理を一つのフォームクラスに押し込んでクラスメンバ変数10個程度、
400行のコードって可読性の観点から許容されるものなんでしょうか?

チームでプログラミングされているプロの方の意見をお伺いできればと思います。
(長文本当に申し訳ありません)

247 :デフォルトの名無しさん :2018/05/12(土) 08:45:11.14 ID:KCIDKf2Q0.net
人の話聞いてないねw
じゃあもう好きにしたらいいと思うよ

248 :デフォルトの名無しさん :2018/05/12(土) 09:11:24.66 ID:RvuVG0qm0.net
>>247
私の説明か理解が悪いのでしょうか?

Aは100行未満のコード245のコードの連続なので簡単に読めます。
Bが読みづらいのが問題なので、Aの機能を分離しても解決にはならないような。

BがAが取得したデータ保持とゲーム内でのデータ処理の二つを担っているのがまずいとのご指摘であれば、
それはそうかと思いますが、データ保持と処理が画面と密接に関係しているので分離し難いというか・・・。

コード全部見せないで質問すること自体に無理があるのかもしれませんね。
すいません。

249 :デフォルトの名無しさん :2018/05/12(土) 09:18:34.84 ID:RvuVG0qm0.net
たぶん端的にこう質問すればよかったのかと思います。

フォームを生成しているクラスのコードが400行、メンバ変数が10個、メソッドが8個、で、
メンバ変数はそれぞれのメソッドで3個ぐらい引用しています。

こういうコードってチームで作業してるプロから見て許容できる範囲でしょうか?
処理が多少冗長になってもメンバ変数を少なくして、メソッド内でグローバル変数として定義するべきでしょうか?

250 :デフォルトの名無しさん :2018/05/12(土) 09:19:07.30 ID:vhGL8v7ea.net
>>248
Aを入出力専門のAViewとデータ保持専門のDataHolderに分離
Bをゲーム画面描画専門のBViewと実際の内部処理を行うGameModel, 各種書き出しを行うWriterに分離

Windowのインスタンスの内部で色々な処理を行うのがそもそも間違ってる
描画と変更の通知以外何もさせるな

251 :デフォルトの名無しさん :2018/05/12(土) 10:01:27.82 ID:RvuVG0qm0.net
>>250
ありがとうございます。
理解できました。

フォーム生成するクラスはフォームの描画、変更に特化

A 初期値入力フォームを生成するクラス
B データを保持するクラス
C ゲーム画面表示クラス
D ゲームのルールに基づいてBを更新するクラス

分かりやすい。
これがオブジェクト指向ってやつか・・・。

252 :デフォルトの名無しさん :2018/05/12(土) 10:07:34.76 ID:RvuVG0qm0.net
自分は成り行きでBの機能の一部をCに放り込んでしまったから、
Bを処理するDも必要に迫られてCに入れざるを得なくなってたんですね。

入門書にあったサンプルプログラムはコード数が少なかったから、
BをCに入れてるものが結構あったので無意識にこんなもんだと思ってました。

こういうのって本では学びづらいですね。
勉強になりました。
ありがとうございます。

253 :デフォルトの名無しさん :2018/05/12(土) 11:04:14.67 ID:PbE4ojLD0.net
>>251
それはOOPではなくMVCな。一応。

254 :デフォルトの名無しさん :2018/05/12(土) 11:05:17.79 ID:vhGL8v7ea.net
まぁGUIアプリケーションでのOOPの具体的なアーキテクチャだから

255 :デフォルトの名無しさん :2018/05/12(土) 11:23:13.92 ID:RvuVG0qm0.net
MVCは初耳で今ググって勉強しました。

やはり自分のコードは人と共有できるレベルではなかったですね。
MVCの設計で修正してみます。

手続き型言語しかやってないので、
手続きで処理していって
「なんども同じ手続き出てくるな。」
と思ったらクラスにして分離する思考になってたんですけど、
それじゃだめですね。

こういうのが学べるいい本があったらいいなぁ。

256 :デフォルトの名無しさん :2018/05/12(土) 11:32:37.31 ID:RvuVG0qm0.net
dataHolderクラスってABCDどれからもアクセスすることになるんですが、
パブリックにして、どこからでも読み書きできるようにしていいんでしょうか?

バグの温床になるからダメ?

257 :デフォルトの名無しさん :2018/05/12(土) 11:36:18.82 ID:RvuVG0qm0.net
マイクロソフトのホームページだとPublicにしてますね。

これだとどこからでもすべてのデータにアクセスできるから便利だし可読性もいいけど、
どこかでうかつにdataHolderの変数に変な値を入れると、
どこがバグになっているのか全コード読まなければいけないですね。

うーん・・・。
世の中そんなもんなのか?

258 :デフォルトの名無しさん :2018/05/12(土) 11:43:38.40 ID:vhGL8v7ea.net
>>256
お好きに
結局は書きやすさと安全性のトレードオフ

ガッチガチに書くならgetterだけのImmutableオブジェクトを表すインターフェイスとそれを実装する具体クラスに分離してViewにはインターフェイスだけ教えるとか(あまりやらない)
作る人数とか規模によってどの程度強制するか変わってくるから程よくやるのが重要, 一貫性は重要だが徹底しすぎるとしんどい

259 :デフォルトの名無しさん :2018/05/12(土) 11:57:15.21 ID:RvuVG0qm0.net
>>258
immutableなんてものがあるんですね。
ごく一部の変数以外はimmutableで事足りるから、immutable設定にします。
publicでdataHolderクラス作ってメンバ変数はすべてimmutableにすれば、

可読性、コーディングの利便性、安全性

全部満たせますね。
なんて便利なんだ…。( ゚д゚)

260 :デフォルトの名無しさん :2018/05/12(土) 12:02:17.65 ID:vhGL8v7ea.net
>>259
残念ながらC#では上手くImmutableに出来ない(出来るかもしれないが最近やってないので詳しい人教えて)
TypeScriptとかなら既存の型にReadonlyを再帰的に付けた型が簡単に作れるんだけどなぁ

261 :デフォルトの名無しさん :2018/05/12(土) 12:04:38.53 ID:F4kLnVK3p.net
MVCって、VとCの境界が曖昧になりがちだよな。
ってか、VとCを分ける様な事するからUIが使い辛い物になるんだよな。

262 :デフォルトの名無しさん :2018/05/12(土) 12:06:20.36 ID:vhGL8v7ea.net
>>261
せやな
MVVMとかあるしな

263 :デフォルトの名無しさん :2018/05/12(土) 12:12:09.32 ID:F4kLnVK3p.net
そそ、MVCやMVPってのは、オンラインサービスみたいにデータ管理と画面操作が隔離してる様なコンピュータサービスでなら適してるけど、スマホとかパソコンの中で完結した操作性重視のアプリの設計には適して無いんだよな。

264 :デフォルトの名無しさん :2018/05/12(土) 12:25:35.08 ID:CthSiE230.net
厳密に言えば readonly と immutable は別
interface で表現出来るのは readonly

265 :デフォルトの名無しさん :2018/05/12(土) 12:57:15.57 ID:RvuVG0qm0.net
残念・・・

bool resultOfGetTimeLimit = int.TryParse(this.timeLimit.Text, out constant.timeLimit);

みたいに定数をフォームから取得できればありがたいんだけどなぁ。
そういう需要ってあんまりないんだろうか。

266 :デフォルトの名無しさん :2018/05/12(土) 14:45:46.09 ID:UZR1Ryt2a.net
>>265
何いってるのかわかりません

267 :デフォルトの名無しさん :2018/05/12(土) 14:55:22.20 ID:5EDA9IkjM.net
それに変数名長すぎ

268 :デフォルトの名無しさん :2018/05/12(土) 14:55:53.42 ID:5EDA9IkjM.net
しかもbool型に見えない

269 :デフォルトの名無しさん :2018/05/12(土) 17:01:44.57 ID:RvuVG0qm0.net
なんかもうMVCに従って書き直すの不可能な気がしてきた・・・
初めから作り直すほうが早いかも・・・。

270 :デフォルトの名無しさん :2018/05/12(土) 17:16:54.39 ID:15xgRckc0.net
>>269
MVCは基本的にWebだかんね…

271 :デフォルトの名無しさん :2018/05/12(土) 17:19:31.54 ID:VhwAlNWxd.net
設計思想根本から変えるのに小手先の修正で済むわけないよw

272 :デフォルトの名無しさん :2018/05/12(土) 17:32:27.30 ID:XEHHkDisM.net
初心者が勉強のためにゲームプログラムを作るのにMVCなんてナンセンスです。
先ず、何でもいいから動くものを作る。プログラムスタイルはそれからいろんなな本で学べばいい。

273 :デフォルトの名無しさん :2018/05/12(土) 17:33:18.63 ID:oxtjRRByM.net
まず設計からやり直さないと無理だと思うよ

274 :デフォルトの名無しさん :2018/05/12(土) 18:06:22.88 ID:RvuVG0qm0.net
頭の中がどぁーっとなってきました。
とりあえずゲーム本体は完成したんですが、一部改変しようとしたらかなりの機能がすべてゲーム画面フォームにくっついてるので読みづらいことこの上ないなと。
データ部分を別構造にしたかったんですが、ほぼ句見直しに近い改変であたまがわやになってます。

275 :デフォルトの名無しさん :2018/05/12(土) 18:11:39.59 ID:RvuVG0qm0.net
すんごい読みづらいコードなんだけどこのまま進めていいのかな・・・。
とりあえず力業で進めることは可能なんですけど気持ち悪い。

276 :デフォルトの名無しさん :2018/05/12(土) 18:12:38.37 ID:5EDA9IkjM.net
>>274
で、でたーオブジェクト指向不出来form.cs全部書込奴w

277 :デフォルトの名無しさん :2018/05/12(土) 18:16:14.33 ID:XIsYMxrj0.net
動くコード書ける奴の方が神だからな。
設計どうのこうのなんて、動くコード書ける様になってから理解すれば良い。
何なら作った後で反省的を挙げながらここはこう言う構造の方が良かったんじゃね?
なんてやるのが一番設計の知識ぐ身につく。

278 :デフォルトの名無しさん :2018/05/12(土) 18:23:40.04 ID:XEHHkDisM.net
自分のプログラムが汚いわかりにくいと思ったのなら、あなたはセンスがあるんだよ。
汚いプログラム書いて平気なプロもいるからね。
後はいろんなサンプルプログラムを検索して読んだらいい。あっ、これがいいとか気付きがあると思う。

279 :デフォルトの名無しさん :2018/05/12(土) 18:26:39.51 ID:XEHHkDisM.net
プログラマの能力を試すには書かせるより読ませるのがいいからね。
人のプログラム読めない奴は進歩ないから。

280 :デフォルトの名無しさん :2018/05/12(土) 18:31:48.49 ID:RvuVG0qm0.net
あれ、根本的なことが分かってないことが分かりました。

B DataHolder
C ゲーム
D スコア記録

CからBのインスタンスを生成
DataHolder dataHolder1=new DataHolder();
すればCのpublic変数aにアクセスするときはdataHolder.a=hoge;とかでいいけど、
DからBのdataHolder1の変数aにアクセスってできるんですか?

CからDにdataHolder1の参照を渡すってこと??

281 :デフォルトの名無しさん :2018/05/12(土) 18:33:40.32 ID:RvuVG0qm0.net
>>276
全部ではないけどほぼご指摘あってます・・・。
本に書いてある小さなプログラムはほとんどform.csに放り込んでたので、そんなものかと思ってた。

282 :デフォルトの名無しさん :2018/05/12(土) 18:34:30.46 ID:RvuVG0qm0.net
>>277
ありがとうございます。
今ようやっと設計の大事さを学習しました。
レベル0から0.01ぐらいには成長できた気がします。

283 :デフォルトの名無しさん :2018/05/12(土) 18:35:15.53 ID:RvuVG0qm0.net
>>280
そもそもこれが分かってなかったから一つのフォーム画面にいろいろ機能を盛り込みすぎたんだと。

284 :デフォルトの名無しさん :2018/05/12(土) 18:37:29.64 ID:RvuVG0qm0.net
>>280

間違いました。

あれ、根本的なことが分かってないことが分かりました。

B DataHolder
C ゲーム
D スコア記録

CからBのインスタンスを生成
DataHolder dataHolder1=new DataHolder();
すればCのpublic変数aにアクセスするときはthis.a=dataHolder.a;とかでいいけど、
DからBのdataHolder1の変数aにアクセスってできるんですか?

CからDにdataHolder1の参照を渡すってこと??

285 :デフォルトの名無しさん :2018/05/12(土) 20:01:02.99 ID:9rdAnFG4a.net
まあなんだよ
今の君に必要なのは鉛筆と紙だ
なんたらチャートのお作法なんぞ知らんでいいから、まずは機能を書き出して丸で囲め
それからどの機能が何処から必要になるかを線引っ張って繋げ
めちゃくちゃ線がごちゃごちゃするだろう?
それをなるべく少ない線で済むように書き直すんだ何回でも

286 :デフォルトの名無しさん :2018/05/12(土) 23:33:51.06 ID:RvuVG0qm0.net
>>285
自分で書いててこんがらがってきますね。
でもまずやってみます。

287 :デフォルトの名無しさん :2018/05/12(土) 23:36:15.36 ID:RvuVG0qm0.net
Aフォームのメンバ変数、メソッドを
BCフォームからも使用できるようするにはどうすればいいのでしょう。

Bだけで使用するならB内でAのインスタンス生成→ShowでAフォームを表示させればいいと思うのですが、
Cフォームでも使用するとなると、Cフォームで新たにAのインスタンスを生成するわけにもいかないですよね。

288 :デフォルトの名無しさん :2018/05/12(土) 23:44:08.44 ID:7v9y2RSd0.net
>>287
ググるなりして調べた?そろそろ初心者スレでやって
インスタンスを渡せばいいだけなのに

289 :デフォルトの名無しさん :2018/05/13(日) 11:04:57.10 ID:ySggkKZM0.net
>>288
すいません。
ググってもよくわからなかったので質問したのですが安易に人に頼りすぎてましたね。

昨夜からわからないところを実際にコードで打ち込んでみて実験重ねて理解できました。
インスタンスの参照渡すって言っても

フィールド渡し
プロパティ渡し
メソッド渡し

と色々方法あるんですね。インスタンスの参照を渡す方法が分かってなかったから一つのクラスに一杯盛り込むことになってたんだと理解できました。

290 :デフォルトの名無しさん :2018/05/13(日) 11:06:37.40 ID:ySggkKZM0.net
こういうのってCやってれば常識なんですね。
どこからC#でどこまでCの質問か分からずこちらで何でも聞いていました。

次から初心者板に移動してみます。

でも、みなさんのおかげでだいぶいろいろなことを学べました。
ありがとうございます。

291 :デフォルトの名無しさん :2018/05/13(日) 13:59:35.41 ID:23x2pXKw0.net
〇〇する機能みたいにして、重要だと思う機能ほど大きく書いて相関関係を、ドラマの登場人物の関係図みたいに描いたらなんとなくクラス図の基本が出来上がる。

292 :デフォルトの名無しさん :2018/05/13(日) 14:41:31.02 ID:ySggkKZM0.net
>>291
ありがとうございます。
クラス図についても勉強してみます。

293 :デフォルトの名無しさん:2018/05/22(火) 22:37:35.74 ID:gaTn3ZGLJ
Genericクラスのメソッドで
型が重複する場合の仕様について質問です
class Dic<T> : System.Collections.Generic.Dictionary<int,T>
{
    public bool Contains(int key)
    {
        return base.ContainsKey(key);
    }
    public bool Contains(T val)
    {
        return base.ContainsValue(val);
    }
}
ちょっと必要にせまられて、こんな雰囲気のクラスを作りました
基本的に、重複する型では利用しない予定ですが
気になってテストコードを作ってデバッグしたところ何の警告も出なく実行できて
「base.ContainsKey(key);」の結果が返ってきました
これは言語仕様でしょうか?
それともVisualStudioや.Net Framework仕様でしょうか?
どなたか詳しい方、おしえてください
※ 環境は Visual Studio 2017 Community Framework 4.6.1

294 :デフォルトの名無しさん :2018/05/23(水) 19:32:08.48 ID:Au5e7VGg0.net
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

094C5

295 :デフォルトの名無しさん :2018/05/25(金) 17:55:34.06 ID:kaJ5fQAg0.net
あくまでわかりやすくするために分けるのであって、クラスを分けることが目的になってしまってはいけない
余計わからん構造になる可能性があるからね

296 :デフォルトの名無しさん :2018/05/25(金) 23:51:50.59 ID:q1degsPf0.net
わかりやすくする為にわけるのではない
問題が適切に表現される様に自ずとにわかれるのだ
それが本質的にわかりにくい問題であるならば
わかれた結果わかりにくいのは当然の帰結である
己の能力をわかるまで高めるしかあるまい
わかめ

297 :デフォルトの名無しさん :2018/05/26(土) 08:31:56.50 ID:Mb7u4pS+0.net
なんか偉そうなこと言ってる

298 :デフォルトの名無しさん :2018/05/26(土) 10:29:20.38 ID:Qkk0DhfZM.net
ナイーブすぎ

299 :デフォルトの名無しさん :2018/05/26(土) 16:16:32.23 ID:nVIiMXOl0.net
桃とアロエのカネボウ

300 :デフォルトの名無しさん :2018/05/28(月) 11:28:40.07 ID:vRphuiRoH.net
ゲームくんのゲームは完成したのだろうか?
そもそもGameManagerクラスみたいなゲームを管理するクラス作ってないのが不思議
ゲーム管理クラス通して設定画面開いたり設定値を取得すればいいのに

301 :デフォルトの名無しさん :2018/05/28(月) 18:36:44.90 ID:rzi0Cqlc0.net
どんだけ連打してんだよ

302 :デフォルトの名無しさん :2018/05/29(火) 12:36:07.71 ID:0Vp36Os40.net
C#の勉強を講習会なりでお金を払う方式でレクチャーを受けたいのですが、どういった所が良いでしょうか?
ドットインストールやプロゲートの様な既にある動画を有料で見るのではなく、
欲を言えば1対1で即座に質問できる方式が良いのですが探してみたところ見つけられず、
初心者〜中級者を対象にした評判の良い講習会の様なものがあれば教えて頂けないでしょうか
東京都の渋谷区に住んでいます

303 :デフォルトの名無しさん :2018/05/29(火) 13:37:15.19 ID:dUPfr/v4M.net
もったいないね
マンツーマンで一時間5千円〜1万はらって12〜36時間でC#を勉強するくらいなら
入門書を3冊ぐらい買って1週間で何度も読めばいいのに

304 :デフォルトの名無しさん :2018/05/29(火) 13:45:33.86 ID:iBcg+dk20.net
しかし新しいC#の作法にのっとった良い入門書なんてあるかね?

305 :デフォルトの名無しさん :2018/05/29(火) 13:47:56.92 ID:dUPfr/v4M.net
新しい作法にのっとった講師のほうが少ないと思うよ

306 :デフォルトの名無しさん :2018/05/29(火) 17:24:32.50 ID:0Rufp4wm0.net
>>302
趣味目的なら金余っているバカだし就職目的なら手に負えないバカ
そんなことで身につかないからパソコン教室にでも通ってろ

307 :デフォルトの名無しさん :2018/05/29(火) 18:15:54.45 ID:5CF0lkGw0.net
パソコン教室じゃ、最高でエクセルの使い方くらいしか教えてくれねーだろ。

308 :デフォルトの名無しさん :2018/05/29(火) 18:33:40.52 ID:/62QaXdPa.net
>>302
金と時間の無駄って意見に俺も一票。

学校の勉強でもそうだけど、だいたい独習の方が効率が高いよ。
分からないところを質問できる人がいるとはかどるのは確かだと思うけど、
そんなの今はネットで代替できるし(しかもタダ)

子供の習い事みたいにモティベーション不足を金で補うっていうのはありかもしれないけど。

309 :デフォルトの名無しさん :2018/05/29(火) 18:38:51.88 ID:5CF0lkGw0.net
何とか教室や何とかスクールって、出逢いを求めて通うものだろ?

310 :デフォルトの名無しさん :2018/05/29(火) 18:39:33.21 ID:iBcg+dk20.net
云うてもプログラムって何すんの状態だと独学とか無理やん
まあ講習受けて出来るようになるかったら確率低いが

311 :デフォルトの名無しさん :2018/05/29(火) 18:51:29.09 ID:b3SRNDoC0.net
>プログラムって何すんの状態だと独学とか無理やん
そんな人はプログラムを触ることはないので問題なし

312 :デフォルトの名無しさん :2018/05/29(火) 19:02:37.30 ID:bwgc0PeYa.net
C#プログラマの求人いきゃいい
マンツーマンでみっちり教えてくれてしかも金ももらえるぞ

313 :デフォルトの名無しさん :2018/05/29(火) 21:20:40.23 ID:Zh8oS8xcM.net
>>303
>>308
でもさ、メンターがほしい気持ちは解るよ。独学で始めて今でこそイメージしたアプリは大体作れるようになったけど。

314 :デフォルトの名無しさん :2018/05/29(火) 21:22:39.57 ID:tOEtldFh0.net
教えてくれる人がいなくてもできるぐらいのやる気は持ってないと
教えてくれる人がいてもできない気がする

315 :デフォルトの名無しさん :2018/05/29(火) 21:30:02.17 ID:+v4yesMaa.net
独学でやってると自分のやり方が正しいのか確認が出来ない不安があるのはわかる
とにかくプログラムを書くこと、実務を重ねるとその不安は経験値でだんだん消えていく
とにかく経験を積むしかない

316 :デフォルトの名無しさん :2018/05/29(火) 21:34:05.00 ID:T0OOxyUA0.net
>>314
スレ違いになるけどモチベーション保つのが一番大事だからな
わからなくなるとやる気無くすから誰かに教えてもらいたい、って気持ちはわかるが

317 :デフォルトの名無しさん :2018/05/30(水) 01:10:37.65 ID:eBpQDrsU0.net
メンターってか、語れる仲間がほしい・・
だが人付き合いはめんどくせーw

318 :デフォルトの名無しさん :2018/05/30(水) 01:15:01.88 ID:9LsQ0F9t0.net
だから皆ここへ集うのですね

319 :デフォルトの名無しさん :2018/05/30(水) 11:53:56.18 ID:8D7UWmqma.net
メンター(導師)ってリアルで言ってる人を見ると笑うけど
意識高い系ですかって
メンターは技術面より精神的な面のよりどころだな
わけわからんけどこの人は正しい導いてくれるって人って思いこむ相手

c#入門にメンターがいる必要はないね
中級以上ならまだしも

入門者には導師より同志が必要かな

320 :デフォルトの名無しさん :2018/05/30(水) 12:12:53.49 ID:qVo0G4AWa.net
メンターなんて初めて聞いた
グルなら知ってる

jai guru deva om

321 :デフォルトの名無しさん :2018/05/30(水) 12:16:35.68 ID:4fnC318RM.net
>>319
とりあえず中途半端な改行やめたら?

322 :デフォルトの名無しさん :2018/05/30(水) 12:53:27.56 ID:2+ZWaFznd.net
メンター初耳って…
そりゃ昔はあまり使わなかったが今の20代なら大学で大方耳にしたことあるんじゃない?

323 :デフォルトの名無しさん :2018/05/30(水) 13:06:00.57 ID:tkaPgK/fa.net
ゲームの初心者指導機能以外で聞いたことない

324 :デフォルトの名無しさん :2018/05/30(水) 14:44:19.09 ID:zGXcDYuB0.net
ちょまど神に帰依するべきです

325 :デフォルトの名無しさん :2018/05/30(水) 15:57:46.68 ID:OvgslO8CM.net
CodeMentorっていう英語のメールニュース取ってるんだが?

326 :デフォルトの名無しさん :2018/05/30(水) 17:39:32.49 ID:zRdb0GuK0.net
ぼくはメンタリストですが、何か?

327 :デフォルトの名無しさん :2018/05/31(木) 18:07:05.50 ID:ZDpw5PAMd.net
引数ありのdelicateでデリゲートをnewする段階で
関数に引数渡しておくことはできますか?

使うときは引数関係なく実行するだけにしたい

delicateじゃなくてもそういう方法があれば教えてほしいです

328 :デフォルトの名無しさん :2018/05/31(木) 18:49:53.75 ID:YepGdlhS0.net
ない

329 :デフォルトの名無しさん :2018/05/31(木) 19:21:37.82 ID:mNqG/VKAa.net
>>327
たとえばこれを、
Action<string> a = Console.Write;

こうするだけと違うの?
Action a = () => Console.Write("Hage");

330 :デフォルトの名無しさん :2018/05/31(木) 20:29:05.32 ID:XpaqSCj3a.net
>>329
普通に考えたらそうなるわな
何がいいたいんやろ

331 :デフォルトの名無しさん :2018/05/31(木) 21:18:37.12 ID:ZDpw5PAMd.net
>>329
わかりづらくてすみません
Actionですね
これでちょっとやってみます
ありがとうございます

332 :デフォルトの名無しさん :2018/06/01(金) 00:56:14.18 ID:v9HhHj/a0.net
もしかして delegate? > delicate

333 :デフォルトの名無しさん :2018/06/01(金) 01:50:30.82 ID:Kjs/aFNB0.net
痒くなってきた

334 :デフォルトの名無しさん :2018/06/02(土) 01:19:12.37 ID:te+Rl8LG0.net
もうふらっとと統合しろよ

335 :デフォルトの名無しさん :2018/06/02(土) 14:30:29.50 ID:sz40x79U0.net
隔離用のスレを本スレに統合って斬新だな

336 :デフォルトの名無しさん :2018/06/05(火) 14:10:31.00 ID:kDP+/j8RM.net
デリケートって結局なんねことなんや

337 :デフォルトの名無しさん :2018/06/05(火) 23:17:30.29 ID:vNq9k7GF0.net
>>336
関数ポインタ

338 :デフォルトの名無しさん :2018/06/06(水) 11:05:26.21 ID:kgKhbEIB0.net
わかるように説明しろや!

339 :デフォルトの名無しさん :2018/06/06(水) 11:13:20.04 ID:Glbjy1Oa0.net
赤ん坊が庖丁持ったからと言って何かを生み出せるわけでは無し

340 :デフォルトの名無しさん :2018/06/06(水) 13:00:14.82 ID:/mNmPD5La.net
>>338
「〜とは何か」って哲学論争はたぶん時間の無駄w
実際の使われ方を見て何に使えるかを理解するのがいいよ

禅問答みたいに聞こえるかもしれんが、デリゲートのメリットは
デリゲート型の変数を作れること。

デリゲートの使えない従来の言語は、コードの中にdoubleのリテラルしか書けず
doubleの変数が作れないようなものだった

341 :デフォルトの名無しさん :2018/06/06(水) 22:58:53.30 ID:x4kBoo940.net
>>331です
Actionでできました!ありがとうございます。
クロージャー(?)っていうんですかね?
関数の外の値を引数で渡さずに関数内で使うやり方が知りたかったんです。

342 :デフォルトの名無しさん :2018/06/07(木) 21:28:18.26 ID:HziEaPXa0.net
デリゲート型の変数?????
デリゲート型にすると何かいいことあるのか?
デリゲート型にすると何がいいんだ??????何が使えるんだ?????

343 :デフォルトの名無しさん :2018/06/07(木) 21:34:22.85 ID:9x16GWRr0.net
>>342
ここ読め
http://ufcpp.net/study/csharp/sp_delegate.html

344 :デフォルトの名無しさん :2018/06/07(木) 21:34:36.55 ID:uqa5AZHUa.net
あーこういうの出来たら便利なのにー
って思ったら調べて使えばいいよ
使わんと頭入らないし

345 :デフォルトの名無しさん :2018/06/07(木) 21:41:39.12 ID:muNvrUxm0.net
デリゲート、デリゲートって、おまえら
青空球児・好児かよ。

346 :デフォルトの名無しさん :2018/06/07(木) 23:38:02.20 ID:p05PC41Ra.net
>>342
そうじゃなくて、上に書いたように、もしdoubleのリテラルしかコード中に書けなくて
doubleの変数が使えなかったらどう困るか考えて

347 :デフォルトの名無しさん :2018/06/07(木) 23:51:09.11 ID:HziEaPXa0.net
図にしてくれ

348 :デフォルトの名無しさん :2018/06/08(金) 00:56:57.47 ID:057UgUqy0.net
数値を格納する変数は int 型
文字を格納する変数は string 型
メソッドを格納する変数が デリゲート型

349 :デフォルトの名無しさん :2018/06/08(金) 01:01:01.34 ID:7BdVtDm70.net
なんで
メソッドを
格納する
必要が
あるんだよ


350 :デフォルトの名無しさん :2018/06/08(金) 01:20:20.47 ID:vel+6yPba.net
だから、どうして実数を変数に入れる必要があるの?
入るのはメソッド自身ではなくその参照だけどね

351 :デフォルトの名無しさん :2018/06/08(金) 07:41:09.77 ID:V2PqzfzLd.net
>>349
自分の場合はある関数にある処理を追加したい場合とか

ある処理は呼び出しもとによって変わったり

352 :デフォルトの名無しさん :2018/06/08(金) 07:54:30.62 ID:VEbWNRWu0.net
>>351
ピンとこない

処理を追加したいならメソッド自体に書くか、overloadとかを考えちゃう
呼び出し元で処理変えるなら引数で、みたいな

353 :デフォルトの名無しさん :2018/06/08(金) 07:59:48.51 ID:FRxZCKgGa.net
メソッドを引数にして渡してあげられると、実行する側は何をするか気にしないでいいじゃない

354 :デフォルトの名無しさん :2018/06/08(金) 08:15:18.51 ID:H4l6t16fM.net
なぜデリゲートがあるか?
君も大人になったらわかるよ。
ママ、なんでボクはおチンチン付いてるの?
この疑問、時間が解決したろう。

355 :デフォルトの名無しさん :2018/06/08(金) 08:30:05.85 ID:V2PqzfzLd.net
>>352
今までの処理は極力変えたくない

引数にAction渡して関数はそれを実行
引数のActionはデフォルトにnullをいれておく
nullだったら処理しないようにすれば呼び出し元は必ずしも変更する必要がなくなる

なんでこうするかってテストするのがめんどいからとか色々

356 :デフォルトの名無しさん :2018/06/08(金) 10:53:38.20 ID:p6dJfT33M.net
>>355
さっぱりわからない

処理変えたくないメソッド実行
 ↓
その結果次第で別のメソッド実行

何故これで済まないの?

357 :デフォルトの名無しさん :2018/06/08(金) 11:07:03.52 ID:jzbZ53uGa.net
それでも済むよ

例えば繰り返し処理
forなくても書けるだろ。だからforなんて要らないって言ってるようなもん
なくてもプログラミングできるが、あれば楽できる

358 :デフォルトの名無しさん :2018/06/08(金) 11:49:27.44 ID:SrLrQXUUa.net
済まないw

>>356-357は-π/2〜π/2の範囲の実数の数だけ、それに対応する
sinの値を返すメソッドを用意すれば汎用的なsin関数なんかなくて済むと言ってるのと同じ。

だから、どうしてdoubleの変数が必要なのかと。

っていうかこの質問者、本当は分かってて質問してる変な奴だろうね8割方w
たぶん2chの他の板によくいる、サヨクを演じて自作自演やってる頭のおかしいネトウヨと似たようなメンタルの持主なんだろうと想像

359 :デフォルトの名無しさん :2018/06/08(金) 13:02:11.32 ID:V2PqzfzLd.net
>>356
voidだったら"その結果"ってどう受けとる?

360 :デフォルトの名無しさん :2018/06/08(金) 13:04:11.27 ID:7BdVtDm70.net
図にしろ・・・・・・・・・ッッツ!!!

361 :デフォルトの名無しさん :2018/06/08(金) 13:14:18.16 ID:0qxXZgjd0.net
アウアウアーの見本市

362 :デフォルトの名無しさん :2018/06/08(金) 19:39:57.11 ID:tyJ42miy0.net
なんか揚げ足取りしようとして引っ込みつかなくなってる感

363 :デフォルトの名無しさん :2018/06/08(金) 19:42:51.67 ID:sQqhvtlW0.net
http://ufcpp.net/study/csharp/misc_delegate.html

364 :デフォルトの名無しさん :2018/06/08(金) 20:48:10.00 ID:7BdVtDm70.net
つまりメソッドにラムダ式を渡して処理した結果を使ってメソッドの処理をさせるのか?

365 :デフォルトの名無しさん :2018/06/08(金) 20:53:34.63 ID:KYYD9BLCa.net
ごめん。ちょっと何言ってるかわかんない

366 :デフォルトの名無しさん :2018/06/08(金) 21:00:06.62 ID:E4qbFGXm0.net
結局デリゲートの非同期処理BeginInvokeを使用するってのが
従来大きな役割だったんじゃない?
でも今Taskクラスできたから必要なくなった

367 :デフォルトの名無しさん :2018/06/08(金) 21:19:27.49 ID:txACZHnFp.net
つまりクラス間通信。

368 :デフォルトの名無しさん :2018/06/09(土) 12:11:29.33 ID:VOfp/P7BM.net
デリゲート(委譲)って名前が悪いのかな
メソッドを他に渡しておいて適宜実行してもらうから委譲ともいえるけどそれは機能の一面しか表してない
MVPの人も過去にデリゲートいらねえって言ってたけど理解力が足りてない

c#は結構いろんなものがオブジェクトだけどメソッドはオブジェクトじゃない
デリゲートを使えばメソッドをオブジェクト(変数)みたいな感じで扱える
普通の変数とは違って+=で複数のデリゲートをいれることができるのが特徴的

コールバックとして使えるしeventはデリゲートをもとに作られてるので基本的な使用範囲は広い

369 :デフォルトの名無しさん :2018/06/09(土) 12:44:45.38 ID:DBY1R4Jva.net
>>368
真面目な話、そういう衒学趣味の文系学生みたいな
文章が一番人を混乱させる。

「c#は結構いろんなものがオブジェクトだけどメソッドはオブジェクトじゃない 」って何やねんw

関数ポインタが分かればデリゲートがどんなものかはその類推でだいたいイメージできる。
機械語をやった経験があれば、関数ポインタなんか、なんだこんなのただのcall命令の
アドレッシングモードのことかってすぐわかる

でも重要なのは、「デリゲートとは何か」なんか分からなくてもデリゲートは使えるってこと。
「何か」なんか理解しなくていい。それを使って何が出来るかだけ理解すればいい。

370 :デフォルトの名無しさん :2018/06/09(土) 12:58:26.33 ID:54mp5fzVM.net
そう。ホビープログラマならね

371 :デフォルトの名無しさん :2018/06/09(土) 13:02:40.19 ID:Cz/ni8by0.net
ホビーじゃないプログラマ「c#は結構いろんなものがオブジェクトだけどメソッドはオブジェクトじゃない 」

372 :デフォルトの名無しさん :2018/06/09(土) 13:05:05.70 ID:oQlrsJoz0.net
それは無能プログラマ

373 :デフォルトの名無しさん :2018/06/09(土) 13:31:49.04 ID:kvLDmgw/0.net
>>371
この文何か変か?
メソッドはobject型から派生したクラスではないっていう当たり前のことを言ってるだけだろ

374 :デフォルトの名無しさん :2018/06/09(土) 13:40:09.88 ID:VOfp/P7BM.net
>>369
他の言語ではメソッドもオブジェクトとして扱えるものもある
c#はメソッドはオブジェクトじゃない

その類推が間違ってるからダメなんだけどなあ…
デリゲートは関数ポインタじゃない
callでもアドレッシングとも全然無関係だわ

機能的には似たようなものに見えるけど全然別物だ

375 :デフォルトの名無しさん :2018/06/09(土) 13:51:37.94 ID:MhKfyDgC0.net
>>369
文系学生もプログラミングする時代になったって事だよ。

> 「何か」なんか理解しなくていい。それを使って何が出来るかだけ理解すればいい。
これな。最近の「○○って何ですか」っていう奴らは何なんだ?
お前らだって、日本語の全ての漢字を読めるわけでもないだろうに。

「デリゲート」は失敗作だから新言語を作る気がないのなら理解する必要はない。
あれはthis+関数ポインタで、一番近いのはC++の「メンバ関数ポインタ」だが、
無駄に「クラス」「関数ポインタ」「ラムダ」を抽象化しようとしておかしくなってる。
結局ラムダを導入してしまったし、当初の方針は間違いだと認められたことになる。
今後「デリゲート」を採用する言語はないだろうよ。

376 :デフォルトの名無しさん :2018/06/09(土) 13:57:35.17 ID:1jan2CXL0.net
.NET Core で過去の遺産が全て無くなるかと思ったけどそんなことはなかったぜ

377 :デフォルトの名無しさん :2018/06/09(土) 13:59:17.43 ID:VOfp/P7BM.net
>>375
誤解したままで最後までつづけるんか?

378 :デフォルトの名無しさん :2018/06/09(土) 14:07:54.32 ID:VOfp/P7BM.net
もともと関数がオブジェクトである言語はデリゲートを導入するメリットは少ない
c#にデリゲートが無かったらjavaの様に専用のインターフェイスを継承した無駄なクラスを作らなければならなかった

ActionやFuncやラムダがあればデリゲートが必要なかったと言ってるのは何かを誤解してる

379 :デフォルトの名無しさん :2018/06/09(土) 14:19:40.58 ID:MhKfyDgC0.net
>>377
理解してなくても使えれば問題ないんだよ。
お前だってPCの起動方法(BIOSとか)知らなくてもPC使ってるだろ。
MSIL読めなくてもC#使えるだろ。
CPUの例外/割り込み機構を知らなくてもtry/catch使えるだろ。
一般プログラマにとってはプログラミング言語は道具であって、それ以上でも以下でもない。
新言語を作りたいのなら学術的に正確に理解することが必要だが、普通の人はそうではない。

それ以前にC#が死ぬ可能性を考えた方がいい。
C#専用の「デリゲート」の理解はつぶしが利かない。
他言語にもある「ラムダ」の理解のほうが重要だ。

デリゲートは「クラス」と「関数ポインタ+バインド」で対応した方が良かったと思う。
C#には未だに「バインド」がない=デリゲートでの対応になるが、
実際、後付でバインドすることが出来ないだけ不便だろ。

>>378
Javaみたいなそもそも「関数ポインタ」がなかった糞言語と比較したら駄目だよ。
Cには関数ポインタはあった。
C#はそれを「デリゲート」として拡張した。
他言語は「第一級オブジェクト」として拡張した。
今のところ、後者の方が正解っぽいだろ。
(俺自身にはイマイチ「第一級オブジェクト」である利点/必然性は見えないのだが)

380 :デフォルトの名無しさん :2018/06/09(土) 14:24:48.97 ID:VOfp/P7BM.net
関数がもしobjectクラスから派生したオブジェクトになるとメンバーを持てることになるんだけど
A.B().ToString()のToStringが
B()というメソッド自体に係ってるのか
B()の返した戻り値にかかってるのかがよくわからないことになる

381 :デフォルトの名無しさん :2018/06/09(土) 14:25:53.62 ID:54mp5fzVM.net
Javaってstaticメソッドを関数インターフェースに渡すときは最適化してくれんの?

382 :デフォルトの名無しさん :2018/06/09(土) 14:30:26.04 ID:AO7Grx3Qa.net
1+2*3
こんな計算式があったときに1+2をしてから3かけて答えは9
こうはならないだろ。それは優先順位を定めてるから。(1+2)*3のようにかけば期待通りになる

それと同じで関数がオブジェクトでメンバー持ててもそれに合わせた処理の優先順位を定めればいいだけ

383 :デフォルトの名無しさん :2018/06/09(土) 14:32:21.62 ID:VOfp/P7BM.net
理解しないのと誤解してるのではわかっていないという点では同じだけど
理解してない場合は理解していない前提で行動できる
一方の誤解してる場合は悲惨だ

384 :デフォルトの名無しさん :2018/06/09(土) 14:33:21.85 ID:MhKfyDgC0.net
>>380
お前は右結合と左結合を勉強しろ

385 :デフォルトの名無しさん :2018/06/09(土) 14:35:46.47 ID:VOfp/P7BM.net
>>384
じゃあどういう風に記述したらオブジェクトである関数のプロパティやメソッドにアクセスできるかここに書いてもらいたいが

386 :デフォルトの名無しさん :2018/06/09(土) 14:36:40.18 ID:MhKfyDgC0.net
>>383
お前は日本語を勉強しろ。

俺達は「理解しなくていい」=「完全に理解してはいないという自覚の元で使え」と言っているのであって、
それは「誤解」には繋がらない。
「誤解」ってのは、「理解してない馬鹿が理解しているつもりになっている」事を言う。
例えば、右結合と左結合を知らないお前みたいな馬鹿のことだ。

387 :デフォルトの名無しさん :2018/06/09(土) 14:39:35.51 ID:MhKfyDgC0.net
>>385
意味不明。何を書いて欲しいのか分からん。

> A.B().ToString()
これはAのメソッドB()を呼んでその戻り値に対してToString()を呼ぶ。
少なくともJavaScriptではそう。

で、何をしたい場合の記述が欲しいんだ?

388 :デフォルトの名無しさん :2018/06/09(土) 14:48:14.18 ID:VOfp/P7BM.net
>>387
思い違いをしていた
A.B().ToString()とA.B.ToString()で区別できる
クラスにフィールドとメソッドを同名にできないから区別できる
右結合と左結合は関係なかったけど

389 :デフォルトの名無しさん :2018/06/09(土) 14:54:44.86 ID:MhKfyDgC0.net
>>385
エスパーすると、言いたいことは分かった。
お前は「第一級オブジェクト」も理解しておらず、「誤解」している。ちゃんと勉強しろ。

「第一級オブジェクト」ってのは、通常のオブジェクトと関数オブジェクトを区別しない。
だから書式は当然同じだし、正しく理解していればこの点が疑問になりようもない。


>>388
なら日本語を勉強しろ
> B()というメソッド自体に係ってるのか
これで何を表現しようとしたか言ってみろ。それは
> A.B.ToString()
ではないだろ。

390 :デフォルトの名無しさん :2018/06/09(土) 15:04:32.47 ID:VOfp/P7BM.net
>>386
誤解は悲惨
delegateを削除しろと言って削除してみたらActionもFuncも使えませんでした
eventも使えませんでした

もちろん言語レベルで変数としてのデリゲートの代わりになるものもありません

>>389
> > A.B.ToString()
> ではないだろ。
いやいやそこはそのままであってるし普通にそう理解できないのか?
A.B.ToString()が正解
逆にどう勘違いしたのか聞きたい

391 :デフォルトの名無しさん :2018/06/09(土) 15:06:54.66 ID:VOfp/P7BM.net
本当にC#からdelegateを削除しろって言ってるんだったらどこかおかしい
何にも理解してない

392 :デフォルトの名無しさん :2018/06/09(土) 15:06:56.64 ID:AO7Grx3Qa.net
プロパティなんて関数オブジェクトみたいなもんだな
プロパティに引数渡してぇ

393 :デフォルトの名無しさん :2018/06/09(土) 15:07:41.71 ID:VOfp/P7BM.net
>>392
っVB.net

394 :デフォルトの名無しさん :2018/06/09(土) 15:18:29.92 ID:MhKfyDgC0.net
>>390
日本語で言うと、
> B()というメソッド自体に係ってるのか
と理解したって事だよ。

>>391
お前がな。
他言語にはdelegateなんて無いが、何も問題ないだろ。
あれ?って思えないのか?
(今すぐ廃止していいかどうかはまた別だが)

>>388
> クラスにフィールドとメソッドを同名にできないから区別できる
これは先見の明があったかもな。
関数を「第一級オブジェクト」に昇格させるのに文法的制約がない。
Javaに対しての利点にはなり、生き残る道かも。

395 :デフォルトの名無しさん :2018/06/09(土) 15:25:50.19 ID:MhKfyDgC0.net
>>392
JavaScriptではオーバーライドすれば出来る。
フィールド/メソッドの区別がなく、名前だけだから。
C#的には派生クラスで「プロパティ」「を同名の「メソッド」でオーバーライドだが、
これが型チェック的に無理なのか?
しかし名前の重複を許していないのだから、今後の拡張は可能のはずだが。

JavaScriptのデタラメ文法はどうかという奴もいるが、慣れてしまうと、
型あり言語の「型が違うだけ」で色々制約されるのも相当な糞だと気づけるぞ。
型検査はエラーではなく警告に留めるべきで、
プログラマがOKすれば型が不一致でも通してくれた方がマジで楽。
一番近いのはCってことになってしまうが。

396 :デフォルトの名無しさん :2018/06/09(土) 15:29:15.96 ID:a58WBe6r0.net
ア土曜の昼間からウアウアーの見本市

397 :デフォルトの名無しさん :2018/06/09(土) 15:29:59.09 ID:a58WBe6r0.net
友人ゼロのキモオタオッサンは他にやることないのかい

398 :デフォルトの名無しさん :2018/06/09(土) 16:02:02.79 ID:kvLDmgw/0.net
他の言語はともかくC#はGUIのイベントの管理にデリゲートのマルチキャスト使ってるんだから無かったら困るだろ

399 :デフォルトの名無しさん :2018/06/09(土) 16:54:07.78 ID:DBY1R4Jva.net
だからメソッドがオブジェクトかどうかなんて話はただの衒学趣味的な無益な話w
そんな話は「ではオブジェクトって何?」って不毛な議論になるだけでしょw
初心者がデリゲートを理解して使えるようになるための屁の役にも立たないよw

>>398
素直に考えればデリゲート自身にマルチキャストの機能を持たせるんじゃなく、
シングルキャストのデリゲートのリストとして実装する方法もあったはず

なんか理由があって「こういう」風になってるんだろうが俺には積極的理由はよくわからんね。
ジェネリックをデリゲートで制約できないことと関係があるのかもしれないが

なまじマルチキャストなんて機能があるせいで何だかわかりづらくなってる面は否定できないと思う

400 :デフォルトの名無しさん :2018/06/09(土) 17:08:52.90 ID:MhKfyDgC0.net
>>398
GUIに関してはdelegateの導入は不要だったで決着してる。
GUIにはOOPよりMVCの方が数段マシで、WPFもそうなってるだろ。
onclickにthisがバインドされている意味がそもそも無いんだよ。

決着が付いてないのはデータフロープログラミングをするときだ。
JavaScriptではObject.observeの導入が計画され、一部フィーバーしていたが、ポシャった。
https://www.html5rocks.com/ja/tutorials/es7/observe/
以下によると、非同期なのが使えなかったらしい。
http://tech.nitoyon.com/ja/blog/2015/11/18/death-of-oo/
JavaScriptの非同期は最早宗教だが、
はっきり言って無駄に非同期すぎて、余計にやりにくくなっているケースもある。これもそう。

C#は独自eventを実装出来るし、そのためにdelegateが用意されているから、
「データフロープログラミング」を文法的にサポートしているとは言える。
ただ、それ以前に、「データフロープログラミング」が主流ではないが。
お前らも実際、やってないだろ。
関数型の次に来るって事もなさそうだし。

とはいえ、上記の通り、今のJavaScriptではデータフロープログラミングは面倒だし、
getter/setterを頑なに拒むC++ではものすごくウザくなって事実上無理だ。
次の波が来ればevent/delegateも再評価されるかもしれん。

401 :デフォルトの名無しさん :2018/06/09(土) 17:12:21.10 ID:MhKfyDgC0.net
>>399
> シングルキャストのデリゲートのリストとして実装する方法もあったはず
同感。

402 :デフォルトの名無しさん :2018/06/09(土) 17:15:16.30 ID:bMpGWGQ30.net
理解してなくても問題なく使えるからって、それを理解しようとするのは悪い事じゃないけど
もとの発端はなんだったんだこれ

403 :デフォルトの名無しさん :2018/06/09(土) 17:28:51.92 ID:AO7Grx3Qa.net
デリケートじゃないか?w

404 :デフォルトの名無しさん :2018/06/09(土) 17:32:16.71 ID:1jan2CXL0.net
>>402
>>327 のデリケートが事の発端

405 :デフォルトの名無しさん :2018/06/09(土) 17:43:13.42 ID:VOfp/P7BM.net
誰かさんの大好きなLinqはdelegateの塊なんだけどdelegateなくなっていいのかな
他の実装ではdelegate使ってないけど今の.netではデリゲートで実装されている

406 :デフォルトの名無しさん :2018/06/09(土) 18:48:11.73 ID:0oARoVrcM.net
デリゲートにラムダ式にLinq大好きだ!
これ無くして生きてけない!
チームの誰も読めないから放置されて我が道を歩んでいる。
生産性と品質が高いから客には好評です。

407 :デフォルトの名無しさん :2018/06/09(土) 20:25:40.95 ID:7jH+OfQ/0.net
>>406
チームの誰もが読めないという事は保守性に欠けると言う事ですね

408 :デフォルトの名無しさん :2018/06/09(土) 20:33:41.95 ID:0oARoVrcM.net
そうだね。
でも、Linqバリバリ使ったらそうなるよね。
みんなの勉強しろよってこと。

409 :デフォルトの名無しさん :2018/06/09(土) 20:39:16.25 ID:h8CnrujR0.net
Linqが分からないってのはラムダ式を理解できないってことなの?

410 :デフォルトの名無しさん :2018/06/09(土) 20:43:00.38 ID:54mp5fzVM.net
行列計算ライブラリ書いてるときに
おれ掛け算わからんからおれに合わせて全部足し算で実装して
おれはいまお前の案件に関わってないけど将来そのライブラリメンテするかもしれんからヨロシクな
とか言う同僚がいたらこいち頭おかしいのかなって思うじゃん
いやいや掛け算を勉強してからっていうか最低限の単位を取ってからメンテしろよってなるじゃん普通
これがLinqやλやデザインパターンになると当たり前のように底辺至上主義がまかり通る不思議な業界

411 :デフォルトの名無しさん :2018/06/09(土) 20:47:26.87 ID:kvLDmgw/0.net
LINQはC#にしかないからまだわかるけどラムダ式はいまどきの言語ならほぼ実装してるから知ってないとまずいよね

412 :デフォルトの名無しさん :2018/06/09(土) 20:50:03.81 ID:2splWvty0.net
linqてC#にしかないのか

413 :デフォルトの名無しさん :2018/06/09(土) 20:52:58.46 ID:54mp5fzVM.net
Linqにも類似品あるよ
Javaのstreamやpythonのリスト内包表記など
というかそもそも単なるiterator patternでしかないからC#が起源ってわけでもない

414 :デフォルトの名無しさん :2018/06/09(土) 21:00:28.55 ID:4y2IVpvw0.net
Linq以前にIEnumerableの意味が解らない人がいるからどうしようもない
.NET2.0から順に教えろってことかよ・・・

415 :デフォルトの名無しさん :2018/06/09(土) 21:03:28.98 ID:MhKfyDgC0.net
>>410
と、底辺至上主義がまかり通る所の意識高い系が申しております

>>413
どう見てもSQLが起源だろ

416 :デフォルトの名無しさん :2018/06/09(土) 21:07:24.39 ID:54mp5fzVM.net
>>415
クエリ形式の文法はSQLが起源かもしれんが
実装はSQLとは全く関係がないよ
C#などの実装はまさしくiterator patternだけど
SQLの実装をiterator patternでやろうとしたら遅すぎる

417 :デフォルトの名無しさん :2018/06/09(土) 21:07:34.76 ID:4W3gH+0Ua.net
そもそも書けない奴は論外として、使うなってのは同意できる
簡潔に判りやすいラムダ書いてくれりゃいいが、わざとやってんじゃねってぐらい難読化する奴いるからな
正規表現、SQ、掲示板の長文も同じだな

418 :デフォルトの名無しさん :2018/06/09(土) 21:12:52.02 ID:0oARoVrcM.net
Linqに限らず最近のソフトウェア技術は高度で生産性も高くなってる。
昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
理由出来ない人は辞めればいい。
生産性が飛躍的に上がってるので理解出来る奴だけで間に合うよ。

419 :デフォルトの名無しさん :2018/06/09(土) 21:17:22.22 ID:ekScYlKMa.net
自称プログラマー(趣味)ならともかく職業プログラマーでLinqすら理解出来ないやついんの?

420 :デフォルトの名無しさん :2018/06/09(土) 21:23:52.36 ID:7jH+OfQ/0.net
Linqを十分に理解できても、可読性や保守性を大事にする人は
多少冗長でも他人が理解しやすい易しいコードを書くんじゃないの?

421 :デフォルトの名無しさん :2018/06/09(土) 21:25:54.76 ID:2splWvty0.net
Linqてそんな可読性悪くないと思うけどなぁ
コメント書いときゃ何となくわかるべ

422 :デフォルトの名無しさん :2018/06/09(土) 21:26:49.03 ID:v7FNkyrH0.net
>>418
出来ない人にも生活あるから辞めろとは言えないけどチームは分けて欲しい
使えて使いたい人がどんどん流出して出来ない人だけの会社になると悲惨

423 :デフォルトの名無しさん :2018/06/09(土) 21:30:02.70 ID:0oARoVrcM.net
>>420
圧倒的に生産性が高かったらどうなの。
最近の案件は短納期になってるし、昔のコボルみたいに何十年もメンテして使うシステムも少ないと思う。

424 :デフォルトの名無しさん :2018/06/09(土) 21:32:37.20 ID:VrCE6n6GM.net
ゴミのようなやりとり
いや、ゴミに失礼だな

425 :デフォルトの名無しさん :2018/06/09(土) 21:33:12.66 ID:0oARoVrcM.net
LinqよりSQLの方が難しいぞ。
SQLは難しいから使うなって言うのか?

426 :デフォルトの名無しさん :2018/06/09(土) 21:35:27.62 ID:ZDY9COOVd.net
業務でいじるレベルのコードなんて知らないものでもグーグル先生いりゃ大抵なんとかならない?
linqも初めて見たときはとっつきにくくてわかりづらかったけど使ってりゃ嫌でも覚えちゃうよ
つっても当然すべてを使いこなしてるわけじゃなくて自分に必要な範囲のみ理解してる程度
業界によってだいぶ差はありそうだけど

427 :デフォルトの名無しさん :2018/06/09(土) 21:35:56.65 ID:7jH+OfQ/0.net
生産性は保守運用まで含めてトータルで考えるべきで
保守性が損なわれればトータルコストも引き上がる

428 :デフォルトの名無しさん :2018/06/09(土) 21:36:22.73 ID:0oARoVrcM.net
>>424
あんたの書き込みがゴミだから。
オレらのやりとりがゴミだって言うなら、そう感じさせる様な高踏的な書き込み頼む。

429 :デフォルトの名無しさん :2018/06/09(土) 21:51:21.02 ID:lCnNI9uz0.net
保守性の低い Linq のコードってたとえばどんなの?
自分は他人のを読む場合でも特に困ったことないけどな〜。

430 :デフォルトの名無しさん :2018/06/09(土) 22:13:44.82 ID:MhKfyDgC0.net
>>416
イテレータの起源なら、C++(1983)は最初から持ってた。
C++のOOPはSimula発で、そっちが持ってたかは知らん。

いずれにしても、Java発の技術は存在しないぞ。
C#はLinqと、多分asyncもか?頑張ってる方だと思うが。
(あとちょっと違うがIDEのインテリセンスもC#が初のはず)

431 :デフォルトの名無しさん :2018/06/09(土) 22:18:01.39 ID:a58WBe6r0.net
クソカスの分際で人間様に話しかけてくるな
クソカスが引っ付くわ

432 :デフォルトの名無しさん :2018/06/09(土) 22:36:24.46 ID:d5fCz/GJ0.net
>>430
> (あとちょっと違うがIDEのインテリセンスもC#が初のはず)
インテリセンスはVB5.0の時代からあるんだが...

433 :デフォルトの名無しさん :2018/06/09(土) 22:41:24.00 ID:MhKfyDgC0.net
>>426
> 自分に必要な範囲のみ理解してる程度
多分これくらいが適正で、これなら大して問題にならないんだよ。

問題は、意識高い系馬鹿の>>418
> 昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
みたいな、おかしな奴がいることだよ。

Linq自体でそんなに格差が出来るはずもない。
仮に、Linq部分を関数呼び出しに変えたところで、本体のコード構造は全く変わらないだろ。
便利機能だが、その程度でしかないんだよ。
逆に言うと、制御構造の違いで勝負出来ない、
新文法が読めることしか威張れない馬鹿がそこに無駄に拘っている気がする。

434 :デフォルトの名無しさん :2018/06/09(土) 23:00:28.94 ID:0BGOlb7W0.net
linq で Where と OrderBy 使ったところをチームリーダーから For と List<T>.Sort() に書き換えられたことはある。理由は「他と違うから」
他と書き方を合わせておくのが大事なのはわかるけど…

435 :デフォルトの名無しさん :2018/06/09(土) 23:10:59.82 ID:1jan2CXL0.net
コーディング規約があるのならそれに合わせろよ

436 :デフォルトの名無しさん :2018/06/09(土) 23:45:05.02 ID:v7FNkyrH0.net
>>434
他と違うからって理由で直すのは良くないと思うな
本来関係ないはずのクラスの間に存在しないはずの関係性を作りこんでしまう
その結果、必要ない作業や、縛りを生み出して生産性を下げることになる
俺が経験したものだと
すでに書き終えたforeachをすべてforに統一
テスト済のDAO、DTOのsnake_caseを他レイヤに合わせてCamelCaseに統一
この2つが最高にバカバカしかった

437 :デフォルトの名無しさん :2018/06/09(土) 23:56:36.61 ID:wFjp4I59M.net
カプセル化を知らない人が少なくないのかな
「publicメンバーはクラス間のコミュニケーション円滑化のために規約として形式化しましょう」ぐらいならまあ理解できるが
「Linqはやめてループにしてくれ」なんて内部実装の形式にまで踏み込んでくるなよな
クラススコープで違和感なければそれでいいだろ

438 :デフォルトの名無しさん :2018/06/09(土) 23:59:33.29 ID:MhKfyDgC0.net
>>434
俺はC#erではないが…。

単発のLinqも認めてもらえないのならご愁傷様。あれは普通に読める範囲だ。
見た目、Linq自体にはサブクエリ無しか?ならそんな酷いことにはならないはずだが、
例えばSQLでは再帰呼び出しが出来たりして、
マンデルブロだパズル解くだとか、おかしな事になってる。
https://www.sqlite.org/lang_with.html
Linqでどこまで出来るか知らんが、こんなん書かれたら殴りたくもなるだろ。

基本的には関数呼び出しにしてその先は隠蔽、
つまりLinq実装かFor/List/Sort実装かは上位からは見えない、ってことにすれば関係ないはずだ。
ただ、その場にベタで「何を選択しているか」が書かれている方が読みやすいことは多々あり、
Linqもその局面で使われているとは思うので、全面書き直しだと余計に読みにくくなるとも思うが。

439 :デフォルトの名無しさん :2018/06/10(日) 00:07:12.73 ID:wNo6w9bX0.net
LINQってCube扱えるんだっけ?

440 :デフォルトの名無しさん :2018/06/10(日) 00:11:20.35 ID:FNJYuW1ra.net
>>437
どうでもいい議論だけど、一言。
カプセル化っていうのは「メソッドの中は可読性考えなくてよい」って意味じゃないよw

LINQ(というかクエリ式)嫌いの大半は批判してる人間がそもそも理解してないだけだと思うが一理はある。
それは使い方によっては複数の処理が有機的につながった、適切に分割統治されてない、
可読性の低いコードになるからだ

実際、筋の悪いプログラマが好む100行オーバーのメソッドに近い物になりうる

441 :デフォルトの名無しさん :2018/06/10(日) 00:20:43.11 ID:kZ6+r7gZM.net
>>440
どう読んだら「メソッドの中の可読性は考えなくていいよ」になるんだろ
外部の都合を内部実装にまで持ち込むな
クラス内での可読性が十分ならそれでいいだろ
って主張な
正しく動いて綺麗なコードを他のクラスの都合で書き直す
俺はこれある意味カプセル化破壊と言っていいと思う
もちろん本来の意味でのカプセル化とは違うのはわかってる

442 :デフォルトの名無しさん :2018/06/10(日) 02:00:10.36 ID:gGHljlXMa.net
>>441
どう読んでもそうとしか読めません
自分で自分の書いてあることが理解できないのかw

「メソッドの中は可読性考えなくてよい」と言っているのでなければ
>>437の1行目と4行目はつながらない。

カプセル化を理解していてもメソッドの中の可読性、例えば
「Linqはやめてループにしてくれ」と言うことはあり得る。

なぜなら、カプセル化とは「メソッドの中の可読性は考えなくていいよ」という意味ではないからだ

443 :デフォルトの名無しさん :2018/06/10(日) 02:01:02.37 ID:gGHljlXMa.net
>>442
いきなり訂正

× >>437の1行目と4行目はつながらない。
>>437の1行目と3行目はつながらない。

444 :デフォルトの名無しさん :2018/06/10(日) 05:17:43.99 ID:4PiVyKtW0.net
ランダムな指定回数オブジェクトを作成する方法ないですか
7時まで待つ

445 :デフォルトの名無しさん :2018/06/10(日) 06:46:45.50 ID:Kj8YEAmO0.net
>>442
横からだけど、そう思えるのはお前さんがLinq使ったら可読性悪くなるって決めつけてるからじゃないの?

446 :デフォルトの名無しさん :2018/06/10(日) 06:46:55.66 ID:CFkipoua0.net
Random

447 :デフォルトの名無しさん :2018/06/10(日) 08:32:28.14 ID:RI4Vnlqm0.net
>>436
コーディング規約を読んでないお前か
コーディング規約を定めてないお前の組織がバカなだけ

448 :デフォルトの名無しさん :2018/06/10(日) 08:41:39.38 ID:HMOXZXoS0.net
この話いつまでやるの?

449 :デフォルトの名無しさん :2018/06/10(日) 08:43:37.52 ID:kZ6+r7gZM.net
>>447
コーディング規約がバカなんだよ

450 :デフォルトの名無しさん :2018/06/10(日) 09:22:16.29 ID:z8uYskXvM.net
就職できるように頑張れ

451 :デフォルトの名無しさん :2018/06/10(日) 09:35:53.15 ID:0WF1gq+N0.net
スレにも規約作って変な奴は矯正しないといかんな。

452 :デフォルトの名無しさん :2018/06/10(日) 09:58:39.22 ID:kZ6+r7gZM.net
変数を関数の先頭に書く
returnは1つまで
変数名の先頭に型の略字を書く
varは使ってはいけない

こういうひと昔前まで大衆が信じてたバカ規約
システム全体で統一感のあるコードを書くって規約もいずれその仲間入りするとおもう
いまはまだIT業界全体が未熟だからみんな気付いてないだけ

453 :デフォルトの名無しさん :2018/06/10(日) 10:22:35.79 ID:YCs8n+CmM.net
ちょっといいですか、この関数100行超えてます。
規約違反で可読性なくなります!
レビューで積極的に発言するサル、何も知らないで自分は立派なプログラム書いてると思っている。
ちなみににLinqの方が可読性上がるよ。
Linqはやりたいことをズバッと書ける。
古いやり方だと、このforループなに?ってなる。
forループは実装手段であって目的じゃないから。
単に慣れ、新しいこと勉強したくない連中が可読性だの規約だの持ち出す。

454 :デフォルトの名無しさん :2018/06/10(日) 10:39:02.74 ID:0nkwjY0q0.net
分割すれば良いじゃん
それが出来ないことを相手のせいにするな

455 :デフォルトの名無しさん :2018/06/10(日) 11:01:43.43 ID:wNo6w9bX0.net
魔板でやれや

456 :デフォルトの名無しさん :2018/06/10(日) 12:09:56.40 ID:ycwHE1rSa.net
>>445
どこが決めつけてる>>440

457 :デフォルトの名無しさん :2018/06/10(日) 13:05:02.68 ID:fXHYwG6AM.net
C#のLinqを使っているのならPythonの方が2倍速くなる
https://qiita.com/yniji/items/6585011633289a257888

C# の Linq が python の2倍遅い、は嘘
https://qiita.com/Akira_Kido_N/items/d9519b05ccee6a67158f

458 :デフォルトの名無しさん :2018/06/10(日) 13:22:36.14 ID:8jSf3er6M.net
俺が知りたいのは、オブジェクトをx回作るやり方なんだよ

459 :デフォルトの名無しさん :2018/06/10(日) 13:47:05.85 ID:FyF+mujLM.net
for(var i=0;i<n;i++)Days[i]=new Day(i);

460 :デフォルトの名無しさん :2018/06/10(日) 14:27:51.17 ID:A9qrJ+Er0.net
linqで発狂してるジジイはSQL絡みでよくわからないエラーに出くわして理解できなかったんじゃないの

461 :デフォルトの名無しさん :2018/06/10(日) 17:59:54.77 ID:Nj3/us+lM.net
もう全部varでええやろ

462 :デフォルトの名無しさん :2018/06/10(日) 18:16:30.94 ID:Ve8EHXbu0.net
保守性の低い Linq を使ったコードの実例を見たいんだけど。

463 :デフォルトの名無しさん :2018/06/10(日) 18:55:50.21 ID:FyF+mujLM.net
クエリ式を使ったのは単純なのはわかりやすいけど複雑になるとお手上げ
メソッド形式で使ったとしても逆にクエリ式のfromを二重の使ったほうがいいのにSelectManyを使ってるやつは非常に醜い
JoinやAggregateも可読性が以上に低い

464 :デフォルトの名無しさん :2018/06/10(日) 18:58:38.79 ID:0FFsGNUEa.net
意見は分かれると思うが、川俣大先生が連載記事で引用してた
このサンプルあたりがボーダーラインかね
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/linq/how-to-query-for-duplicate-files-in-a-directory-tree-linq

個人的にはこれも読みづらい

実にどうでもいい話だが、LINQは頭字語のはずなのでLinqって表記には違和感しか感じない。
あと、これもくどいが、LINQじゃなくてクエリ式の話をしてるんじゃないのかと

465 :デフォルトの名無しさん :2018/06/10(日) 19:04:29.50 ID:FyF+mujLM.net
>>464
これはだめな例じゃないかな?
何をやってるかがわからない

466 :デフォルトの名無しさん :2018/06/10(日) 19:22:31.41 ID:0nkwjY0q0.net
これの事?
var queryDupNames =
  from file in fileList
  group file.FullName.Substring(charsToSkip) by file.Name into fileGroup
  where fileGroup.Count() > 1
  select fileGroup;

基礎的なものだけで構築されていて何をやっているか一目瞭然じゃん

467 :デフォルトの名無しさん :2018/06/10(日) 19:59:10.70 ID:7XGbwrsW0.net
これがわかんないって言うならもうlinq禁止しか無いね
そんな人間がいるプロジェクトには関わりたくないけど

468 :デフォルトの名無しさん :2018/06/10(日) 20:06:35.03 ID:kZ6+r7gZM.net
全員linq読めても将来読めない人がメンテするかもしれないから禁止
実際にあった話

469 :デフォルトの名無しさん :2018/06/10(日) 20:19:14.72 ID:Ve8EHXbu0.net
ああこれが分からないってんなら確かに LINQ 禁止だわ。w
でもそんなのに付き合ってやる義理はないんじゃね? あとは規約の問題だな。

470 :デフォルトの名無しさん :2018/06/10(日) 20:29:40.62 ID:FyF+mujLM.net
自分ならメソッド構文で書く

471 :デフォルトの名無しさん :2018/06/10(日) 21:47:34.28 ID:WVhS1nfV0.net
分からないなら勉強するなり聞くなりすればいいじゃんとは思うけどな
可読性あげるのは理解できるが便利な関数を規制するのはおかしいくない?
いつまでたっても個人の技術力上がらなくなるけどいいの?とは思う

472 :デフォルトの名無しさん :2018/06/10(日) 21:54:10.88 ID:FyF+mujLM.net
わからないって意味を誤解してるだろ

var queryDupNames = fileList.Groupby(f=>略, f=>略).Where(g=>g.Count>1);

メソッドだとほぼ一瞬で何をやってるかわかるだろ
わざわざ行数を割いて理解に時間のかかるクエリ式を使う意味はねえよ

473 :デフォルトの名無しさん :2018/06/10(日) 22:13:28.91 ID:WVhS1nfV0.net
あークエリ式じゃなくてラムダで書いた方が見やすいって話?
それなら同意

474 :デフォルトの名無しさん :2018/06/10(日) 22:39:32.51 ID:7XGbwrsW0.net
そんなんリファクタすりゃ済む話じゃん

475 :デフォルトの名無しさん :2018/06/10(日) 22:43:36.88 ID:mLmPdblh0.net
リファクタリングするにもユニットテストで担保取れないレベルの酷いプログラム沢山あるからなあ

476 :デフォルトの名無しさん :2018/06/10(日) 22:53:21.31 ID:kZ6+r7gZM.net
低レベルなプログラマに合わせたコードはテストしにくいひどいコードになりがち
インターフェース禁止だとか当たり前のように言ってくるからねあいつら

477 :デフォルトの名無しさん :2018/06/10(日) 22:54:32.29 ID:SjjA9sVt0.net
今日も自閉症の見本市

478 :デフォルトの名無しさん :2018/06/10(日) 23:06:57.39 ID:0nkwjY0q0.net
低レベルなプログラマとの話し合いは無駄だと言うことがよくわかった

479 :デフォルトの名無しさん :2018/06/11(月) 14:37:15.67 ID:dC6OTsii0.net
リファクタリングをリファクタ言うの非常に気持ち悪い
refactor は refactoring から派生した単語
refactor という動詞は使われだして日も浅く、まだ技術系のスラングの域でしかない

VS には「リファクター」としてリファクタリングを行うメニューが提供されているが
小洒落た動詞として使用される分には気にならないが、
日本人が「リファクタする」とか使ってると「カンパニーのコンプライアンスをガバナンスする」とかと同様に見える
いやもっとあれか「コンプラをガバーンする」とかと同じレベルかな? (govern は正しい動詞)

https://english.stackexchange.com/questions/57750/is-there-a-verb-refactor-meaning-doing-refactoring-in-english

……MSのスペルチェッカで引っかかってたのか(現在は知らんが)

480 :デフォルトの名無しさん :2018/06/11(月) 17:24:57.86 ID:FO+2sVJQ0.net
カタカナ表記する時点で英語のことなんて気にしてちゃやってられんよ

481 :デフォルトの名無しさん :2018/06/11(月) 17:36:15.53 ID:xa0hP702a.net
唐突に何なんだろうねw
まあ、某社のVS用のリファクタリングツールの旧名がRefactor !"だったね。

482 :デフォルトの名無しさん :2018/06/11(月) 19:40:48.77 ID:IrI/gpw8M.net
英語はよく知らんが 〜ing から派生して 〜 ができるとかあり得るのか?

483 :デフォルトの名無しさん :2018/06/11(月) 22:30:32.76 ID:dC6OTsii0.net
うん、そもそも refactoring が造語

初出が誰なのか不明(Martin Fowler ではない)だが、
1992年には論文で見られるっていうほんとに新しくできた単語なのよ

484 :デフォルトの名無しさん :2018/06/11(月) 22:53:53.28 ID:ziXMMRuaa.net
新しい(26年前)

485 :デフォルトの名無しさん :2018/06/12(火) 11:25:19.10 ID:XfLFdaMYp.net
接頭辞と接尾辞を付けただけだから別に造語ってほどじゃ無いだろ?

486 :デフォルトの名無しさん :2018/06/12(火) 13:31:08.41 ID:l5O6ZBmRM.net
もとの言葉がfactor、factoringで、factorは動詞としても使われているのだから、
英語圏ならrefactoringという言葉が登場した時点でrefactorという言葉も同時発生的に生まれていると思うが…

487 :デフォルトの名無しさん :2018/06/12(火) 14:20:48.56 ID:O2DKnY7ra.net
どうでもいい話だけど、派生した順番はたぶん

factor(名)→ factoring → re-factoring

なんだろう。

完全に想像で何の根拠もないけど、computingが動詞のcomputeの動名詞ではない(たぶん...)
ように、factoringも動詞のfactorの動名詞ではないような気がする

488 :デフォルトの名無しさん :2018/06/12(火) 21:59:47.02 ID:tBKs/ecm0.net
>>448
factorizeはなぜ使われなかったんだろう

489 :デフォルトの名無しさん :2018/06/12(火) 23:00:33.34 ID:KC1Yqp3NM.net
まずは英英辞書引こうよ…

490 :デフォルトの名無しさん :2018/06/13(水) 07:49:48.39 ID:GuprKmCG0.net
英英辞書ってやっぱりエイッエイッて引くのなのかな

491 :デフォルトの名無しさん :2018/06/13(水) 08:29:12.19 ID:o1Fw+zabM.net
一晩考えてそれか。。

492 :デフォルトの名無しさん :2018/06/13(水) 17:13:37.26 ID:LyYtEKg40.net
こういうやつってC#に向いてるんだろうか
https://i.imgur.com/XbewmEQ.jpg
でもUnityとかでゲーム作りたいね思ってるのってこのタイプだろうなと思うし。

493 :デフォルトの名無しさん :2018/06/13(水) 17:14:09.95 ID:LyYtEKg40.net
これな
https://www.arealme.com/left-right-brain/ja/?ag

494 :デフォルトの名無しさん :2018/06/13(水) 17:20:21.24 ID:yGCmXdsAM.net
C#より丸鋸とか旋盤の方が向いているんじゃね?

495 :デフォルトの名無しさん :2018/06/13(水) 17:22:01.32 ID:LyYtEKg40.net
3DCGはうまいけどなw

496 :デフォルトの名無しさん :2018/06/13(水) 17:24:47.33 ID:LyYtEKg40.net
図面はやってたけど、なんでもアバウトで絵をかいてるんじゃないからとかボロカス言われた。

497 :デフォルトの名無しさん :2018/06/13(水) 19:08:31.55 ID:TJmxm3LHM.net
近年、そもそも右脳左脳自体がエセ科学だったんじゃないかって言われてるけどね。

ここのサイトのconsoleって書いてあるところに自分のrwitterアカウント打ち込むと、性格にマッチした言語がわかるよ。IBM製。
http://hello-new-world.mybluemix.net/top

498 :デフォルトの名無しさん :2018/06/13(水) 19:10:58.93 ID:tfOKWYs/0.net
>>491
やーごめん。このスレ今日初めて見たの。ちゃちゃいれてもうしわけなす。

499 :デフォルトの名無しさん :2018/06/13(水) 23:36:14.69 ID:AGR+xSSx0.net
>>497
IBM製じゃなくてBluemix使ったアプリなだけやん

500 :デフォルトの名無しさん :2018/06/14(木) 08:07:40.99 ID:TG8lbF0sM.net
>>499
いんや、公開したのは日本IBMだよ

501 :デフォルトの名無しさん :2018/06/14(木) 12:02:14.52 ID:ZrVl35qK0.net
自分、ブックオフで買ってきたOS無しのPCにUbuntu入れてるんですが、
Pythonとか面白いので、C#もやってみたいと思っているんですが、

Mono入れれば、書店で売ってるVisualC#の本とか出来ますか・・?

502 :デフォルトの名無しさん :2018/06/14(木) 12:26:43.19 ID:ZNAi3suja.net
C#やるなら普通にWindows機でやったほうがいいと思うけど

503 :デフォルトの名無しさん :2018/06/14(木) 12:28:45.35 ID:IAs3lrtOd.net
>>501
C#で何がしたいの?

504 :デフォルトの名無しさん :2018/06/14(木) 13:05:26.16 ID:PJ7Fj3C3a.net
左は約30年前の 稲川会 三日月一家 小原忠悦組長
https://imgur.com/a/MlKixgw

505 :500 :2018/06/14(木) 17:14:29.50 ID:ZrVl35qK0.net
>>502
どうもありがとうございます。Windows機は父親のしかありません・・。強奪してこようかな・・。父親全然使っとらん。。

>>503
本のプログラムを打ち込んでみたいです。Pythonとか面白かったのでC#も挑戦してみたいという感じです。なんかいけそうっぽい

506 :デフォルトの名無しさん :2018/06/14(木) 17:17:13.41 ID:cv3CkBmoM.net
>>500
あら、そうなのか
すまんかった

507 :デフォルトの名無しさん :2018/06/14(木) 17:27:33.62 ID:im2Z0uooa.net
>>505
本がVisual Studioを使う前提で書かれていたら無理

508 :デフォルトの名無しさん :2018/06/14(木) 17:59:42.71 ID:IAs3lrtOd.net
>>505
だから具体的に何をしたいの?(何を作りたいの?)

509 :デフォルトの名無しさん :2018/06/14(木) 18:14:23.58 ID:im2Z0uooa.net
書いてある通りだろ

本を読んでその通りなぞりたいんだろ

510 :デフォルトの名無しさん :2018/06/14(木) 18:19:58.04 ID:T0JMmz9y0.net
>>507
猫でもわかるシリーズならそんな心配はないな!
>>505
お父さんのPCで間違ってエロコレクションとか見つけたら鬱になるのでやめたほうがいい
ただVisual Studio(VScodeでもいいかも)使えない環境でC#やるのはめんどくさいと思うよ

511 :デフォルトの名無しさん :2018/06/14(木) 18:22:09.50 ID:im2Z0uooa.net
猫でもわかるシリーズは今はもう古いと思う(※個人の感想です)

512 :デフォルトの名無しさん :2018/06/14(木) 18:22:19.44 ID:IAs3lrtOd.net
>>509
本によるやろそんなもん

513 :デフォルトの名無しさん :2018/06/14(木) 18:23:22.66 ID:im2Z0uooa.net
>>512
だから馬鹿な質問するのはやめとけよ

514 :デフォルトの名無しさん :2018/06/14(木) 18:23:51.86 ID:T0JMmz9y0.net
>>511
>>510はC#の本なんかまったく読んでいない無責任な個人の感想です

515 :デフォルトの名無しさん :2018/06/14(木) 18:28:25.08 ID:IAs3lrtOd.net
>>513
本によるから実際にやりたいこと聞くことの何が悪いんかい?

516 :デフォルトの名無しさん :2018/06/14(木) 18:30:41.94 ID:Cw52iYDwM.net
ここで聞くようなレベルの人が使うもんじゃないと思う ⇒ Mono

517 :デフォルトの名無しさん :2018/06/14(木) 18:34:01.18 ID:im2Z0uooa.net
初心者がc#が何かよくわからないけど本を読んでなぞって体験したい
そんな感じだろ
それ以上何がある

518 :デフォルトの名無しさん :2018/06/14(木) 18:35:19.36 ID:Cyktia16d.net
>>517
キチガイ

519 :デフォルトの名無しさん :2018/06/14(木) 18:37:17.48 ID:im2Z0uooa.net
>>518
自分がプログラム入門者だとして何がしたいと答えるつもりだ?

520 :デフォルトの名無しさん :2018/06/14(木) 18:39:04.95 ID:KqjFIT9WM.net
世界征服

521 :デフォルトの名無しさん :2018/06/14(木) 18:40:09.93 ID:Cyktia16d.net
>>519
いくらでもあるやろwww

522 :デフォルトの名無しさん :2018/06/14(木) 18:42:49.17 ID:im2Z0uooa.net
>>521
やっぱり答えられないじゃないか

pythonの本を読んでその通り打ち込んで楽しかった
次はc#だって感じだろ

何か作りたいものがあるならpythonでやるだろ

523 :デフォルトの名無しさん :2018/06/14(木) 18:44:53.14 ID:Cyktia16d.net
>>522
ありすぎてひとつに絞る意味がない
おばかさん

524 :デフォルトの名無しさん :2018/06/14(木) 18:46:00.00 ID:im2Z0uooa.net
>>523
結局答えられないくせに偉そうだな

525 :デフォルトの名無しさん :2018/06/14(木) 18:47:04.68 ID:Cyktia16d.net
>>524
ぼくとりあえず簡単なWebアプリがつくりたいのー

526 :デフォルトの名無しさん :2018/06/14(木) 18:47:24.43 ID:Cyktia16d.net
>>524
アンドロイドアプリモンスターズつくりたいなー

527 :デフォルトの名無しさん :2018/06/14(木) 18:47:59.25 ID:Cyktia16d.net
>>524
家計簿つくりたいー

528 :デフォルトの名無しさん :2018/06/14(木) 18:48:16.72 ID:Cyktia16d.net
>>524
テトリスつくりたいなあ

529 :デフォルトの名無しさん :2018/06/14(木) 18:50:17.14 ID:Cyktia16d.net
>>524
まだ必要?

530 :デフォルトの名無しさん :2018/06/14(木) 18:50:51.62 ID:im2Z0uooa.net
>>529
じゃあそれを質問する意味はなんだ?

531 :デフォルトの名無しさん :2018/06/14(木) 18:51:45.04 ID:T0JMmz9y0.net
両方NGでいいや

532 :デフォルトの名無しさん :2018/06/14(木) 18:51:56.99 ID:im2Z0uooa.net
>>525-528を作るための本を紹介するのか?
本をなぞると言ってるのに?

533 :デフォルトの名無しさん :2018/06/14(木) 18:55:45.38 ID:Cyktia16d.net
>>530
はいキチガイ

534 :デフォルトの名無しさん :2018/06/14(木) 18:56:08.99 ID:Cyktia16d.net
>>532
だから本によるんやろw

535 :デフォルトの名無しさん :2018/06/15(金) 06:51:22.33 ID:7Iypneqg0.net
ここまで1人の自演

536 :デフォルトの名無しさん :2018/06/17(日) 07:44:22.33 ID:R12hw8Jz0.net
.hstファイルを読み取りたいので質問です。
C#でやるのに参考になるサイトかコードはないかな?

537 :デフォルトの名無しさん :2018/06/17(日) 08:44:00.21 ID:aVMObWbK0.net
hstって何さ

538 :デフォルトの名無しさん :2018/06/17(日) 09:14:51.45 ID:R12hw8Jz0.net
HSTファイル
調べた限りだとHiSTory fileでFXの履歴を記録したファイルで使われることが多いのかな?
自分が使いたいのはFXの履歴ではないくてカメラの履歴などの情報を取りたいです。C++などのコードで書いてるサイトはあるけどC#が見つからない

539 :デフォルトの名無しさん :2018/06/17(日) 10:00:34.77 ID:aVMObWbK0.net
.hst file format . . . Old and New (Jan 2014)
https://www.mql5.com/en/forum/149178

上のアドレスで説明されているフォーマットだったら普通にBinaryReaderで読み込めば良いんじゃないの
単純な構造だから苦労することも無いと思うよ

540 :デフォルトの名無しさん :2018/06/17(日) 10:05:01.86 ID:brTRb0Nk0.net
>>538
> C++などのコードで書いてるサイトはある
ならそれ真似ればいいだけじゃねーの?

541 :デフォルトの名無しさん :2018/06/17(日) 21:31:13.88 ID:R12hw8Jz0.net
HSTファイルもC++ほぼわからないので、参考になるのがあればと思ったんです。
BinaryReader使って試してみます。
ありがとうございました!

542 :デフォルトの名無しさん :2018/06/17(日) 22:18:28.81 ID:qGzm+MRqd.net
そのC++ライブラリはそんな複雑なことしてんの?
数千行あるなら心折れるかもしれんが、自分で移植するほうが早い気がするけど
C#かけるなら余裕でしょ

543 :デフォルトの名無しさん :2018/06/17(日) 22:23:59.43 ID:IxLGC6rAM.net
byte[]からstructにマーシャリングするのが簡単かな
あ、でも最近のC#はマルチプラットフォームだからバイトオーダーも気にしないとダメなのかな
地味にめんどくせえな

544 :デフォルトの名無しさん :2018/06/17(日) 22:37:48.08 ID:R12hw8Jz0.net
内容しっかり見てなかったけど100行なかったははず
C#もどこかあるだろで探してたけどC#だけまったく見当たらなかったので、結果的には自分で移植のほうが早かったかな

545 :デフォルトの名無しさん :2018/06/18(月) 00:31:09.66 ID:6KD+nJyx0.net
どなたか助けてください

PaSoRiでFelicaのReadをしたいのです。
winscard.dllを利用し
ScardTransmitにてADPUを送信することで
非暗号化領域のREAD/WRITEをすることはできました

追加で、暗号化領域のREADをしてほしいと言われ、
Group Service KeyとUser Service Keyという2つの鍵を渡されました。
どうやらこの2つの鍵を使って暗号化領域のREADを行うようなのですが
それに該当する情報が見つかりません。

この2つの鍵と縮退鍵の関連もわかりません。
2つの鍵を使って縮退鍵を合成する???
合成したとしてどういうAPDUコマンドを送る???

ご存知の方がいらっしゃいましたらご教授ください。

546 :デフォルトの名無しさん :2018/06/18(月) 00:46:54.25 ID:jPyv6U8B0.net
それC#の質問か?

547 :デフォルトの名無しさん :2018/06/18(月) 01:05:06.10 ID:6KD+nJyx0.net
>>546
ごめんなさい。C#で書いてるのでC#で質問しました。
他に適当なスレが見つからなかったもので。。。

548 :デフォルトの名無しさん :2018/06/18(月) 14:58:19.26 ID:Pxwa7YvH0.net
ライセンス契約の無い奴にそこから先は教えられねーわ。

549 :デフォルトの名無しさん :2018/06/18(月) 15:38:53.66 ID:XzDxjxqSM.net
バイナリファイルをバイト配列に一気に読み込んでLINQでゴリゴリするなんてC#って言うか.netの醍醐味だね。
C、C++と歩んできて正直C#なめてたが、プログラムの書き方変わったよ。

550 :デフォルトの名無しさん :2018/06/18(月) 19:59:56.07 ID:YV8aSpRw0.net
バイナリファイルのバイト配列はストリーム(BinaryReader/Writer)経由でしか扱ったことないな
浅学ですまないが非常に興味があるので、何をする処理にLINQを使っているのか教えてほしい

551 :デフォルトの名無しさん :2018/06/18(月) 20:21:08.97 ID:xPHPGLWh0.net
>>550
横レスだけど「読み込んでLINQ」だからパーサーの部分だろ

552 :デフォルトの名無しさん :2018/06/18(月) 20:48:17.73 ID:Dbb+UGxb0.net
スキップ.テイク.リバースでバイトオーダー反転してデータ取り込むとかだ。

553 :デフォルトの名無しさん :2018/06/18(月) 20:55:37.17 ID:Dbb+UGxb0.net
テキストファイルを一行ずつ読み込むとか、バイナリファイルを1フレームずつ読み込むなんてのは時代遅れなんじゃねかと。
最近は一括読み込みしかしないな。
パフォーマンスはライブラリやOSが担保してくれる。

554 :デフォルトの名無しさん :2018/06/18(月) 21:33:32.15 ID:ubyRHWyfa.net
時代遅れかどうかは知らんけど(そういうネトウヨチックな「俺スゲー」という間抜けな自己陶酔、俺は大嫌いだがw)
富豪的であってもそれが一時的(たとえばメソッドの中だけ)なら何も問題ないね。

その方がより簡潔だったり可読的に書けるなら否定する理由は何もない

555 :デフォルトの名無しさん :2018/06/18(月) 21:36:42.05 ID:C5OiN+R5M.net
webのアクセスログとかもそんな事するのけ?

556 :デフォルトの名無しさん :2018/06/18(月) 21:40:28.88 ID:ltR7ddTWM.net
時系列データのリアルタイム処理とかどうやって一括で読み込むんだ??

557 :デフォルトの名無しさん :2018/06/18(月) 21:41:56.46 ID:H/s4J3I+p.net
巨大な高速RAMストレージを特注

558 :デフォルトの名無しさん :2018/06/18(月) 21:46:48.35 ID:Dbb+UGxb0.net
時系列的に増えていくファイルだとか、ソケット通信のバイトストリートだとかは順次読み込みするしかないよ。
だけどドライブにあるファイルは一括読み込みの方が簡単だよ。1ステップだからね。それをソートするなりデータ抽出するなりLINQ使えば簡単だよ。
それを知ってから逐次読み出しなんか面倒くさくアホらしくなったよ。

559 :デフォルトの名無しさん :2018/06/18(月) 21:50:28.19 ID:Dbb+UGxb0.net
>>557
プログラム上に巨大な配列生成しても、それだけRAMに割り付けられると思うのは大間違いだよ。
メモリの階層化とかで勉強してね。

560 :デフォルトの名無しさん :2018/06/18(月) 21:52:07.22 ID:ubyRHWyfa.net
>>557には「高速RAMストレージ」って書いてあるけどw

561 :デフォルトの名無しさん :2018/06/18(月) 21:52:33.25 ID:H/s4J3I+p.net
>>559
ストレージと書いてるだろw
外部記憶装置のアクセスの高速化しか考えてねーよw

562 :デフォルトの名無しさん :2018/06/18(月) 21:56:24.93 ID:DGcX/y5w0.net
LINQのメリットの一つに IEnumerable<T>があるのになんで一括読み込みに拘るんや

563 :デフォルトの名無しさん :2018/06/18(月) 21:57:36.33 ID:C5OiN+R5M.net
痴性溢れる御意見ですね

564 :デフォルトの名無しさん :2018/06/18(月) 22:00:34.70 ID:Dbb+UGxb0.net
一括読み込みしたものがアイエニュメラブルになるから。

565 :デフォルトの名無しさん :2018/06/18(月) 22:04:21.91 ID:Dbb+UGxb0.net
>>561
最近のパソコンは速いぞ。
試しにやってみなよ。

566 :デフォルトの名無しさん :2018/06/18(月) 22:08:39.81 ID:ubyRHWyfa.net
まったく関係ないが、そういや、この手のデバイスって結局実用化せずに消えたのかね
まったく聞かないな
http://blog.livedoor.jp/dankogai/archives/50560934.html

読んだのずいぶん前とは思ったがもう12年前か...

567 :デフォルトの名無しさん :2018/06/18(月) 22:31:50.96 ID:H/s4J3I+p.net
>>565
高速flash memoryでraid組んでもRAMの速度には負けるだろ。

568 :デフォルトの名無しさん :2018/06/19(火) 23:13:11.27 ID:BrsQYlEtM.net
>>566
PRAMのSSD版ならもう出てる
DIMMは今年度中にサンプル出荷のはず

STTやRe、Mは頑張ってるがまだ先だろうね

569 :デフォルトの名無しさん :2018/06/25(月) 11:21:29.65 ID:pxATIqrb0.net
Debug.Failのサンプルコードがこんなのなんですが
プログラムのバグでもない限りは絶対に訪れないような場所には
片っ端からDebug.Failを撒いておいたほうがいいんですか?
それともそれ専用のthrowすべき例外なりがあるんでしょうか?
Assert.Fail?
何も書かないのは気持ち悪いので指針を教えてください

switch (option) {
case Option.First:
result = 1.0;
break;

// Insert additional cases.

default:
Debug.Fail("Unknown Option " + option);
result = 1.0;
break;
}

570 :デフォルトの名無しさん :2018/06/25(月) 12:12:52.11 ID:DuFsc7dIM.net
>>569
そういうのはフロー解析による不要なコンパイルエラーを回避するために throw する
例外の種類は状況やポリシーに応じて InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException あたりを使うのが普通

571 :デフォルトの名無しさん :2018/06/25(月) 12:29:34.73 ID:Yf6/X2v7M.net
これは標準で例外欲しくなるよなぁ
いつも何を投げるか迷う

572 :デフォルトの名無しさん :2018/06/25(月) 12:33:59.90 ID:G9vuY89la.net
そうかな
>>570が挙げてくれてるので十分でしょ。
少なくともメッセージは自由に設定できるし、本当に必要なら派生もできる。

そもそも例外をそんなに細かく分類する必要が本当にあるのかちょっと疑問

573 :デフォルトの名無しさん :2018/06/25(月) 12:40:32.20 ID:M/oLTPjda.net
常識的にキャッチされない種類の例外なら何でもいいわな
InvalidOperationExceptionだけはキャッチされる場合があるから微妙だけど、慣習的にはわりと多数派な気がする
個人的には常に NotImplementedException にしたい

574 :デフォルトの名無しさん :2018/06/25(月) 12:46:36.42 ID:9dNJX3N0M.net
NotImplementedは使わないなぁ

575 :デフォルトの名無しさん :2018/06/25(月) 12:58:28.80 ID:G9vuY89la.net
NotImplementedException は↓の人の意見だと本当は実装すべきなのに何かの都合でまだ
未実装の場合に使うらしいね。正しいかどうかは知らない
http://yfakariya.blogspot.com/2011/07/blog-post.html

同じNotでもNotImplementedは「未」実装、NotSupportedは「非」サポートってのは分かりづらいっす

576 :デフォルトの名無しさん :2018/06/25(月) 13:00:29.11 ID:5ya7SPIm0.net
細かいけどコンパイルエラー回避のためにthrowする、ってのは違くない?
現実問題そんな感じになってしまうことはあるけど理想はコンパイラの都合に合わせたコードなんて無いほうがいいんだから

577 :568 :2018/06/25(月) 13:23:21.50 ID:vUyRGEqk0.net
>>570
>InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException
これらの例外は自クラスには非はなく、呼んだ側の使い方が間違っているといった感じの例外に見えますが
そんなにこだわらなくていいんでしょうか

public class MyClass
{
public class BugException: System.SystemException{}
public void buggedmethod() { ... throw new BugException(); }
}

これで良ければ1行で定義できて1番明快に思えますが
検索してもこんなことをやってる人は誰もいないっぽい…

578 :デフォルトの名無しさん :2018/06/25(月) 14:49:07.56 ID:o35Q9ijAM.net
>>575
>>569のケースに限れば、defaultに来るのはenumにメンバを追加したのにcaseを追加していない「変更漏れ」であると考えることもできるから、
NotImplementedException でも意味的におかしくはない
NotSupportedExceptionは(継承の都合で)メンバ自体が使えないことを意味するからちょっと違う

579 :デフォルトの名無しさん :2018/06/25(月) 18:07:26.16 ID:dM1+XD4cM.net
MissingCaseException
を自作でいいのでは?

580 :デフォルトの名無しさん :2018/06/25(月) 18:51:31.43 ID:uZsljbpsa.net
>>578
なるほどそうかも

関係ないけど、いつも思うけどあるインターフェイスを継承してるのに
そのインターフェイスのメソッド使ったらNotSupportedExceptionが飛んでくるって設計は
なんか不条理を感じるのは俺だけかなあw

インターフェイスって契約じゃなかったのかよw

581 :デフォルトの名無しさん :2018/06/25(月) 19:32:38.95 ID:gMkOZD8Wa.net
InvalidEnumArgumentExceptionは?

582 :デフォルトの名無しさん :2018/06/25(月) 19:39:55.82 ID:gMkOZD8Wa.net
実装側の問題なら>>578でよさそう

583 :デフォルトの名無しさん :2018/06/25(月) 20:13:43.81 ID:HTnjHonAM.net
>>570が挙げてる例外は各々意味あるから>>569のとはちょっと違う気がする
AssertExceptionとかLogicErrorExceptionとかが欲しい

584 :デフォルトの名無しさん :2018/06/25(月) 21:43:12.62 ID:xJKhLBIA0.net
Debugクラスのメソッドはリリース版のとき消えます、素通りします
Debug.Fail() は起こりえない状況であり、かつ、素通りしても問題ない箇所、
またはリカバリ処理を行っている箇所にしか使用できません

基本は例外か Trace.Fail() を使用するべきです

Debug.Fail() を使用して問題ないのは具体的には下記の条件に当てはまるときぐらいだと思います

・『絶対』に起こらないことを目視や単体テストで確認した上で、後続のコードでリカバリ処理を行っている箇所で、
開発によってコードが壊れてないかチェックするためにコードに挿入する
(絶対に発生しないので単体テストを行う場合は #if で慎重にコードを切り替えてエラー状態を再現することになります)

つまり、リカバリ処理してるなら Debug.Fail() は入れなくても問題ないはずです

585 :568 :2018/06/28(木) 16:32:42.98 ID:mhaIhaYV0.net
遅くなりましたが例外とログの使い方大変参考になりました。
ありがとうございます。

586 :デフォルトの名無しさん :2018/07/04(水) 22:15:33.33 ID:gFgZc5FG0.net
81F

587 :デフォルトの名無しさん:2018/07/05(木) 22:48:00.22 ID:bXohcl5rE
C#的にはこういうプロジェクト構成(VisualStudio)が正しい!
という考えたがある方、詳しく教えてほしいんですが、
スレ違いでしょうか?

588 :デフォルトの名無しさん :2018/07/11(水) 23:46:27.39 ID:wZEnBA6P0.net
隔離用のスレとはいえ下がりすぎなので上げとく

589 :デフォルトの名無しさん :2018/07/12(木) 02:43:18.10 ID:VF8Jnm1rH.net
超初心者ですが
RectangleとかPointとかって、値型?
値型ってコンストラクタに引数渡せないって、さっき、読んだけど

590 :デフォルトの名無しさん :2018/07/12(木) 20:29:08.90 ID:LFvEI7az0.net
>>589
初心者ですが
そいつらは値型でつ
値型は無引数のコンストラクタにコードを書くことができないんでなかったかいな?

591 :デフォルトの名無しさん :2018/07/12(木) 21:32:30.73 ID:wWmeulvip.net
単なる構造体にインスタンスもくそもないからな。

592 :デフォルトの名無しさん :2018/07/14(土) 09:57:07.24 ID:AoeZKvgvM.net
構造体は初期化が0フィルだから
フィールドが非null値の場合はどうなるのかはしらない

593 :デフォルトの名無しさん :2018/07/14(土) 10:59:20.35 ID:21Pqhes0M.net
型のデフォルト値でね?

594 :デフォルトの名無しさん :2018/07/14(土) 11:24:43.76 ID:td9rD4BU0.net
Visual Studio 2017
合計 90 日間が過ぎました。

無料で使いたいんですが、どうすれば良いでしょうか?

595 :デフォルトの名無しさん :2018/07/14(土) 11:27:35.51 ID:trGcxTua0.net
無料の使ってください

596 :デフォルトの名無しさん :2018/07/14(土) 11:29:07.89 ID:1NIDWWGu0.net
90日ってことは有償版だろ
大人しく買えよ

もしくはCommunity版を検討する

597 :デフォルトの名無しさん :2018/07/14(土) 11:36:04.11 ID:EtwCAyCb0.net
>>594
どうしても有償版を使い続けたいのなら期限が切れるたびにWindowsを再インストールすればOK

598 :デフォルトの名無しさん :2018/07/14(土) 12:06:05.24 ID:td9rD4BU0.net
Community版に移行する事にしました。
ありがとうございます

599 :デフォルトの名無しさん :2018/07/14(土) 23:26:56.12 ID:mNPit/gT0.net
Communityって登録しないと期限とかなかったっけ

600 :デフォルトの名無しさん :2018/07/15(日) 01:08:37.15 ID:WCfEKFtx0.net
Microsoftアカウントを登録しないと30日

601 :デフォルトの名無しさん :2018/07/15(日) 11:14:40.73 ID:GMJtRfj30.net
サブスクリプションで全シリーズ揃えてる俺に死角無し。

602 :デフォルトの名無しさん :2018/07/22(日) 16:05:05.76 ID:bsqxWqeBM.net
>>601
VS-4.2くれ

603 :デフォルトの名無しさん :2018/08/02(木) 11:31:31.36 ID:ijDqx/PBp.net
Entity Framework Coreについて質問です。

以下のように1対多の入れ子(left join)になったデータを取ってくる場合で、一番最下層のテーブルに取得条件を追加したいです。
どのようにしてwhereメソッドを書けばよいでしょうか。
.Include(x => x.Departments)
.ThenInclude(x => x.Groups)
.ThenInclude(x => x.SubGroups)
.ThenInclude(x => x.Employees)
.ThenInclude(x => x.Skills)

例えば以下のような感じです。
Skill.ExpireDate >= DateTime.Today

それぞれのプロパティはコレクションのため以下のようには書くことができません
Where(x => x.Departments.Groups.SubGroups.Employees.Skills.ExpireDate >= DateTime.Today)

ThenIncludeで指定しているプロパティがすべて列挙でなければ以下のように書けると思うのですが・・・
Where(x => x.Department.Group.SubGroup.Employee.Skill.ExpireDate >= DateTime.Today)

それぞれの階層のクラスは全プロパティ取得することを想定しています。
Entity Framework Coreで実現可能でしょうか。

604 :デフォルトの名無しさん :2018/08/02(木) 12:14:20.65 ID:jJXbX9Nfa.net
その条件ならテーブルを上からたどる必要はないのかと

605 :デフォルトの名無しさん :2018/08/02(木) 12:30:22.50 ID:ijDqx/PBp.net
>>604
辿らない場合、スキルクラス単位で条件絞り込みができるのでしょうか?
これができればとても楽なのですが、、、

606 :デフォルトの名無しさん :2018/08/02(木) 13:06:25.80 ID:CFW8XzdE0.net
どうしても上からたどりたいなら
WhereとAnyで掘り下げていくとか
SelectManyで平坦化するとかか

607 :デフォルトの名無しさん :2018/08/02(木) 15:11:34.29 ID:ijDqx/PBp.net
いえ、辿りたいわけではなくて、辿らないとできないと勝手に思ってただけです
辿らなくて良いなら辿らないでやれればベストです。
ですがその方法がわからないので教えてもらえませんでしょうか。

608 :デフォルトの名無しさん :2018/08/02(木) 21:52:06.55 ID:nmSSZypj0.net
var q = _context.Hoges.FromSql($@"
select H.* from Hoges H where exists (
select null from Departments D where H.DeptId = D.DeptId and exists (
select null from Groups G where D.DeptId = G.DeptId and exists (
select null from SubGroups SG where G.GrpId = SG.GrpId and exists (
select null from Employees E where SG.SGrpId = E.SGrpId and exists (
select null from Skills SK where E.EmpId = SK.EmpId and SK.ExpireDate >= {DateTime.Today}
)))))
");

var hoges = q.Include(x => x.Departments)
.ThenInclude(x => x.Groups)
.ThenInclude(x => x.SubGroups)
.ThenInclude(x => x.Employees)
.ThenInclude(x => x.Skills)
.ToList();

609 :デフォルトの名無しさん :2018/08/03(金) 07:33:44.44 ID:TQSHsawm0.net
以下のコードはどういう内容なのでしょうか?
public IList<float> Plus214_Output_0 { get; set; }


特に
<float>、 { get; set; }

が分かりませんでした

以下の一部になります

https://github.com/Microsoft/Windows-Machine-Learning/blob/master/Samples/UWP/MNIST/src/MNIST.cs

610 :デフォルトの名無しさん :2018/08/03(金) 07:54:13.63 ID:/ayVy0z+a.net
>>609
前者は「ジェネリック」、後者は「自動実装プロパティ」でググれ

611 :デフォルトの名無しさん :2018/08/03(金) 07:55:39.91 ID:TQSHsawm0.net
>>610
ありがとうございます!めっちゃ助かりました!

612 :デフォルトの名無しさん :2018/08/07(火) 20:55:48.43 ID:7nA6P5yg0.net
Linqでの書き方で質問なのですが
同じサイズのdataAとdataBのデータがあるとして
データが違う箇所のIndexを取り出すとしたらどう書けば良いでしょうか?
今は↓のようなコードになっています。

List<int> dataA = new List<int>() { 1, 2, 3, 4, 5, 6 };
List<int> dataB = new List<int>() { 1, 2, 4, 3, 5, 6 };
bool resultAB = dataA.SequenceEqual( dataB);

if(resultAB = false)
{
foreach(var A in dataA)
{

比較処理
}
}


結果
2
3

613 :デフォルトの名無しさん :2018/08/07(火) 21:22:20.14 ID:UKw4EMmv0.net
>>612
ない頭絞って考えてみた。
Enumerable.Range(0, dataA.Count()).Where(p => dataA[p] != dataB[p]);
やら
dataA.Select((v, i) => new { value = v, index = i }).Where(p => p.value != dataB[p.index]).Select(p => p.index);

どっちも汚い。もっと賢いのおしえろください

614 :デフォルトの名無しさん :2018/08/07(火) 21:24:07.13 ID:ly4lPw5D0.net
lLINQでやらんとあかんのかなんなのか

615 :デフォルトの名無しさん :2018/08/07(火) 21:29:04.18 ID:BzL1Bfeb0.net
こういうのってforで一つずつ比較するのが一番読みやすくて楽じゃね?

616 :611 :2018/08/07(火) 21:35:47.39 ID:UKw4EMmv0.net
無理矢理LINQつかってみたけど>>615に一票

617 :デフォルトの名無しさん :2018/08/07(火) 21:36:11.45 ID:q6HoXiPg0.net
>>615
俺もそう思う。他の処理が入ってもすぐに組み込めるし
Linqは可読性がメリットなんだから、わかりにくくなったら本末転倒だし
あくまで個人の感想です

618 :デフォルトの名無しさん :2018/08/07(火) 21:41:47.05 ID:7nA6P5yg0.net
dataAとdataBが1000件以上あるので、まず単純に変更してるのがあるか?で
SequenceEqualを使ってみた流れでLINQを調べていた流れで知りたかったです。
forで書くのがわかりやすいとは思うけど、LINQでもっとうまく書けるかなと思って

>>613参考になりました。ありがとうございます!

619 :デフォルトの名無しさん :2018/08/07(火) 21:43:44.13 ID:5i41CNK00.net
for では、比較されるレコードが送られてくるけど、

LINQ では、答えしか送られてこないから、効率的

620 :デフォルトの名無しさん :2018/08/07(火) 23:11:20.30 ID:EHUuk9/6a.net
zip使えばいいんでね?

621 :デフォルトの名無しさん :2018/08/07(火) 23:26:49.96 ID:WUtnzCvr0.net
Linqのほうがわかりやすいし、ソースがランダムアクセスできるとも限らんだろ

シーケンスを束ねてインデックス振って比較して違うやつだけ取り出してインデックスを取り出す
Linqなら思ったことをそのまま書けばいい

IEnumerable<int> Hoge<T>(IEnumerable<T> a, IEnumerable<T> b) {
var comp = Comparer<T>.Default;
return a.Zip(b, (x, y) => (x, y)) // シーケンスを束ねて
.Select((e, i) => (i, e.x, e.y)) // インデックス振って
.Where(e => comp.Compare(e.x, e.y) != 0) // 比較して違うやつだけ取り出して
.Select(e => e.i); // インデックスを取り出す
}

ループじゃぱっとみ何やってるかわかんねえよ

622 :デフォルトの名無しさん :2018/08/07(火) 23:31:30.75 ID:kuothdai0.net
あくまで個人の感想だけど。
自分も >>621 みたいなのの方が分かりやすいなあ。
てか、そういう書き方をよくするというか。

623 :デフォルトの名無しさん :2018/08/07(火) 23:35:51.16 ID:vAj7NHSO0.net
LINQってEntityFrameworkでしか用途なくねえ?

624 :デフォルトの名無しさん :2018/08/07(火) 23:37:10.34 ID:9e6mZaIW0.net
>>623
は?

625 :デフォルトの名無しさん :2018/08/07(火) 23:40:05.44 ID:ly4lPw5D0.net
>>623

626 :デフォルトの名無しさん :2018/08/08(水) 00:39:26.55 ID:cXv1v5r0a.net
>>621
うーん、普通にこっちのほうが分かりやすいと思うけどw
別にLINQ否定派じゃないよ
IEnumerable<int> GetIndices()
{
  List<int> dataA = new List<int>() { 1, 2, 3, 4, 5, 6 };
  List<int> dataB = new List<int>() { 1, 2, 4, 3, 5, 6 };
  for (int i = 0; i < dataA.Count; i++)
    if (dataA[i] != dataB[i]) yield return i;
}

627 :デフォルトの名無しさん :2018/08/08(水) 03:30:51.92 ID:x4iNladl0.net
Zipしたものをforeachで回すのが一番自然
IEnumerable<int> Hoge(IEnumerable<int> A, IEnumerable<int> B)
{
  var i = 0;
  foreach (var eq in A.Zip(B, (a, b) => a == b))
  {
    if (!eq) yield return i;
    i++;
  }
}

自分はやらんけどLinqならこう
dataA.Zip(dataB, (a, b) => a == b).Select((eq, i) => eq ? -1 : i).Where(i => i >= 0);

628 :611 :2018/08/08(水) 05:09:02.93 ID:9ryRYesD0.net
Zip知らんかったわー。超参考にする。

629 :デフォルトの名無しさん :2018/08/08(水) 13:38:09.59 ID:CtU8HUVGd.net
インデックスが必要な時、わざわざselect挟んでインデックス貼るの馬鹿らしい感じがして好きになれないんだけど仕方ないよね?
そんなにインデックスを参照することが多いなら生成時に一緒に貼っとけって話かもしれんが…
そもそもlinqマスターはインデックスを必要としない設計にいつもなるの?
自分もインデックスが無くて済むように考えるけど結果的に必要になる箇所が細部で出てくるんだよね

630 :デフォルトの名無しさん :2018/08/08(水) 14:08:00.53 ID:csO2M6exd.net
どうしても必要な時はselect((value, index) => new {V = value, I = index})でインデックス引っ張ってるわ
それでもインデックス欲しい条件1行で書けるのが楽だからLinq便利派だけども

631 :デフォルトの名無しさん :2018/08/08(水) 14:25:20.52 ID:CtU8HUVGd.net
>>630
俺もそれ、ちょくちょくするんだけどforで回したほうがよくね?って思っちゃうことがあるんだよね
もちろん処理によりけりと言ってしまえばそれまでなんだけど
比較するようなもんじゃないかもしれんがjavascriptなんかだと大抵インデックス取れるから、そっち触ったあとにC#に戻ると処理考えるときにインデックスありきで考えがちになっちゃう気がしてる

632 :デフォルトの名無しさん :2018/08/08(水) 14:32:55.42 ID:CtU8HUVGd.net
先に出てた課題でもzipしたあと、そのままlinqで処理を完結させるか、zip後にforで回すか
個人的にはzipがどちらにせよ入るなら最後までlinqの方が1つの処理を1つの手法で解決してる感じがして好き
だけどインデックスが処理に必要だからfor使いたいって気持ちもわかる

633 :デフォルトの名無しさん :2018/08/08(水) 14:53:36.93 ID:bbTjp3FCd.net
>>631
まぁforのがいいと感じるならそれでもいいんじゃないかな
複雑な処理しない限りは大体Linqのがスッキリするからそうしてるだけだし

634 :デフォルトの名無しさん :2018/08/08(水) 15:07:53.10 ID:x4iNladl0.net
こういう拡張メソッド作っておくのはたまにやる
public static IEnumerable<int> WhereIndex<T>(this IEnumerable<T> self, Func<T, bool> predicate)
{
  var i = 0;
  foreach(var s in self)
  {
    if(predicate(s)) yield return i;
    i++;
  }
}

dataA.Zip(dataB, (a, b) => a == b).WhereIndex(eq => !eq);

拡張メソッド嫌いな人もいるだろうけど一番読みやすい
わざわざSelectでインデックスつけてる冗長さもないし、添字アクセスもないし、使う時はすっきり意味がわかりやすい

635 :デフォルトの名無しさん :2018/08/08(水) 16:44:49.34 ID:Gn4Y43YUM.net
>>634
正直クソ分かりにくい
俺がレビューしたらリジェクトするわ
WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する
そもそもメソッド名以前に、LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、
キーやインデックスの方を返すような操作については特に念入りにそれがわかるような明示的な表記になるように工夫したほうがいい

636 :デフォルトの名無しさん :2018/08/08(水) 17:02:43.62 ID:0wIwbQiXM.net
SelectIndexWhere()ならどうか。英国紳士にも通じると思う

637 :デフォルトの名無しさん :2018/08/08(水) 17:20:32.65 ID:o48M+fLoM.net
SelectWithIndexやな

638 :デフォルトの名無しさん :2018/08/08(水) 17:26:15.62 ID:icN1uiHAa.net
SelectIndexFilteredByValue
これでもパッと見 ? となる人は多そう

639 :デフォルトの名無しさん :2018/08/08(水) 17:40:49.62 ID:Uqgxm++Va.net
>>636
IndicesWhereで十分でしょ
Selectはいらんと思うw
メソッドなのに動詞じゃないのはおかしいって言ったって、組み込みのWhereだってそうだ

まあスレ違いだね。

640 :デフォルトの名無しさん :2018/08/08(水) 18:11:22.97 ID:ucfZkVugd.net
>>639
誰が動詞じゃないとおかしいって?

641 :デフォルトの名無しさん :2018/08/08(水) 18:27:19.45 ID:x4iNladl0.net
>>635
>WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する

そんなのはWhereでできるし

>LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、
>キーやインデックスの方を返すような操作については

それもSelectでできるし
だいたい要素の値を操作していくものっていう暗黙的了解があるならWhereIndexも要素の値が対象と思うんじゃない?
なんか矛盾してね?

642 :デフォルトの名無しさん :2018/08/08(水) 19:23:56.51 ID:x4iNladl0.net
ほぼ同じ拡張メソッドでIndexWhereのが引っかかったわ
多分こっちの方が自然なんだろうな
一応候補だったんだが自分的にしっくりこなかったけど

643 :デフォルトの名無しさん :2018/08/09(木) 21:27:13.79 ID:s67NkejU0.net
>>631
ランダムアクセスできるとは限らんしっていうかLinqだとほとんど出来ない

644 :デフォルトの名無しさん :2018/08/09(木) 22:09:58.32 ID:VdJ1XdFa0.net
>>643
ランダムアクセスできないコレクション扱うときにインデックスが欲しくなるケースってなかなか無いと思うけど

645 :デフォルトの名無しさん :2018/08/10(金) 23:12:00.00 ID:AJVeRJgN0.net
>>644
ランキングとかページングとかか?

646 :デフォルトの名無しさん :2018/08/11(土) 00:11:00.13 ID:p6HuaRWz0.net
>>645
それってインデックスつけることが一つの目的じゃない?
インデックスってかソートかな?
いろんなところでいろんな処理されるコレクションがあって、その処理の殆どにインデックスが不要だけどごく一部にインデックスがほしいとき、わざわざ1行追加するのスッキリしないなぁって感じ

たった1行なんだから書きゃいいんすよ?
それはわかってるけどなんか気持ち悪いなぁって気がするだけ

647 :デフォルトの名無しさん :2018/08/11(土) 12:41:19.45 ID:YyI+aygL0.net
ほとんど必要が無いインデックスだけど
ごく稀に必要になるから必要になるところでだけインデックスを追加するんだろ
ほとんど使わないインデックスのためにずっとランダムアクセス性を維持するとか無駄じゃん

648 :デフォルトの名無しさん :2018/08/11(土) 14:21:00.05 ID:WHbJdrO8a.net
何を言ってるのか意味が分からんけど、indexって言葉の意味を知ってて言ってるのかなそれw

649 :デフォルトの名無しさん :2018/08/11(土) 14:23:04.22 ID:p6HuaRWz0.net
>>647
いや、linqでインデックスを付与しないけどランダムアクセスすることはあるよ?
前提変えたらそら意味通らんよ
コレクションをlinq以外で処理しちゃ駄目ルールでもあるの?

650 :デフォルトの名無しさん :2018/08/11(土) 14:36:01.31 ID:YyI+aygL0.net
>>649
なにいってんだ?
IEnumerable<T>にインデックスなんてない
ないからSelectで付与するんでしょ

そんなルールはないけどほとんどほとんどLinqで済むでしょ?
Linqでサクサク処理してるのに中に突然ループが紛れ込んできたらキモいって話をしてる

var tmp = list.Where(...).OrderBy(...).ToArray();

for (int i = 0; ...) {
...
}

var result = tmp.Where(...).Select(...);

651 :デフォルトの名無しさん :2018/08/11(土) 14:48:08.19 ID:p6HuaRWz0.net
>>650
え?ずっとそういう話をしてたのになんで突然
>ほとんど使わないインデックスのためにずっとランダムアクセス性を維持するとか無駄じゃん
って書いたの?

インデックスのないlinq処理でそれが必要になったときわざわざselectで付与するのなんか気持ち悪いねーって話よ?

652 :デフォルトの名無しさん :2018/08/11(土) 14:59:36.83 ID:YyI+aygL0.net
>>651
気持ち悪いのはお前の感覚ではという話だろ
俺からすればToArrayやToListをかましてメモリとCPUを無駄にしたり余計なメソッドを追加するほうが嫌
メソッド化に関しては再利用性が高いかうまく抽象化されていて可読性が高まるというなら別だが
真にランダムアクセス性が必要なアルゴリズムならば変換せざるを得ないがそもそも今回の問題には必要がない

653 :デフォルトの名無しさん :2018/08/11(土) 15:12:53.25 ID:p6HuaRWz0.net
>>652
うん、そうだよ
個人的に気持ち悪いなーってだけ
はじめからそういうふうにしか話ししてないつもりだけど

ランダムアクセスが不要だからあえてランダムアクセスできないコレクションを選択するの?
ランダムアクセスは不要だけどあったって使わないだけだからどっちでもいい、ってなるのが普通じゃないの?
パフォーマンス要求がシビアでランダムアクセスできるコレクションを選択することで、その要求から外れてしまう、とかいうならわかるけど

654 :デフォルトの名無しさん :2018/08/11(土) 15:28:37.80 ID:YyI+aygL0.net
>>653
ランダムアクセスが不要なアルゴリズムなら「当然」IEnumerable<T>(ランダムアクセスできないコレクション)を選択するだろう
まったくもって「あえて」と言う理由が分からん
もしもSelectやWhereの引数が配列だったら普通のプログラマなら「あえて配列にしたのはなぜか」と疑問を持つだろう
なんか逆なんだよね思考パターンが

655 :デフォルトの名無しさん :2018/08/11(土) 15:33:32.78 ID:p6HuaRWz0.net
>>654
そういうもんかー
んじゃあ使うコレクションがランダムアクセスを提供しているか否かを把握しとかないと選択できないな…

656 :デフォルトの名無しさん :2018/08/12(日) 00:56:37.14 ID:UOoEXFjMp.net
コレクションって言葉がダメだと思うぞ?
そもそもIEnumerableはシーケンシャルな列挙の機能しか提供しない
根本的に理解が間違ってる

657 :デフォルトの名無しさん :2018/08/12(日) 11:56:03.51 ID:GZni4QRja.net
コレクションという表現はおかしいね
無限に乱数を返すものをソースにできるし

658 :デフォルトの名無しさん :2018/08/23(木) 15:21:46.30 ID:7meTQdNO0.net
マジレスするとメッセージ捕まえて
自力で描画すれば可能なんだけど
労力に見会わないのでお勧めしない

webやWPF, UWPならグラ弄るの簡単

659 :デフォルトの名無しさん :2018/08/23(木) 15:23:43.41 ID:7meTQdNO0.net
誤爆しました すみません

660 :デフォルトの名無しさん :2018/09/09(日) 16:03:02.33 ID:RaawotRPM.net
のへこののけとこけノハケケノノネネサマを通り越しておりましたとが気になると7人

661 :デフォルトの名無しさん :2018/09/09(日) 16:03:23.33 ID:RaawotRPM.net
こねのこのねのけのねここけこそけ

662 :デフォルトの名無しさん :2018/09/13(木) 22:10:23.24 ID:IOzhaO6j0.net
doxygenみたいなドキュメント生成ツールを使うとxaml部分がまともに解析出来ません。
bindingしているviewとviewmodelの関係なんかが分かるドキュメントにしたいんですが何か良い方法ないでしょうか?

663 :デフォルトの名無しさん :2018/09/14(金) 22:17:10.47 ID:BClpbb6X0.net
Func<string> func = () => { return "text"; };
var res = func();

これを一文で書くことはできますか。

ふと気になっただけではあるけれど、自分で解決できなくて気になって仕方がない。
基本的なことが分かってないような気がする。

664 :デフォルトの名無しさん :2018/09/14(金) 22:28:35.55 ID:9WO+tdsEa.net
var res = "text";

665 :デフォルトの名無しさん :2018/09/15(土) 00:16:02.34 ID:rZVfBBf1a.net
>>664
まあそうなるよな

666 :デフォルトの名無しさん :2018/09/15(土) 00:21:48.95 ID:elLmwu/20.net
本当はなにをしたかったんだろう
例題が悪い気がする

667 :661 :2018/09/15(土) 00:41:48.54 ID:LMkhUY/p0.net
ああ、そうか。w

パラメータに対してちょっと複雑な変換を掛けるのだけど、汎用性がないから専用関数作るのもなんだし、
だったらラムダ式で書けばいいんじゃね?→ ラムダ式は Func 型?だから戻り値とれねーじゃん ってところから進めなった。
他にやり方はあるので出来なくてもいいのだけど、気にはなって。

668 :デフォルトの名無しさん :2018/09/15(土) 01:22:08.16 ID:rZVfBBf1a.net
専用関数でいいんじゃない?
複雑な処理ならそれこそ括りだしておいてわかりやすくしたほうがバグ出にくいし簡単でしょ

669 :デフォルトの名無しさん :2018/09/15(土) 05:59:42.97 ID:crViL/AR0.net
>>667
参照渡すとか?

670 :デフォルトの名無しさん :2018/09/15(土) 15:15:22.99 ID:aC3C7hdpa.net
こんなのは嬉しくないね
var pi =
  (
    (Func<double>)
    (      
      () =>
      {
        const int total = 1000000;
        var inside = 0;
        var rnd = new Random();
        for (int i = 0; i < total; i++)
        {
          var x = rnd.NextDouble() * 2 - 1; var y = rnd.NextDouble() * 2 - 1;
          if (x * x + y * y < 1) inside++;
        }
        return 4.0 * inside / total;
      }
    )
  )();

671 :デフォルトの名無しさん :2018/09/15(土) 15:22:04.34 ID:aC3C7hdpa.net
これも却下だな
Func<Func<double>, double> invoke = (f) => f();
var pi = invoke
  (
    () =>
    {
      const int total = 1000000;
      var inside = 0;
      var rnd = new Random();
      for (int i = 0; i < total; i++)
      {
        var x = rnd.NextDouble() * 2 - 1; var y = rnd.NextDouble() * 2 - 1;
        if (x * x + y * y < 1) inside++;
      }
      return 4.0 * inside / total;
    }
  );

672 :デフォルトの名無しさん :2018/09/15(土) 17:23:21.76 ID:aC3C7hdpa.net
全然関係ないけど、Randomって[0, 1]とか(0, 1)の乱数は作れないのか
半開区間だと使いづらいような気がするけどそんなことないのかな

673 :デフォルトの名無しさん :2018/09/15(土) 18:10:42.64 ID:ghSS5jwya.net
言葉の意味はよくわからんが
Randomは第二引数未満の乱数発生するんじゃ?

674 :デフォルトの名無しさん :2018/09/15(土) 18:34:42.22 ID:nwnNkRfe0.net
docsにもあるけど
https://docs.microsoft.com/ja-jp/dotnet/api/system.random?redirectedfrom=MSDN&view=netframework-4.7.2
dobonの方が分かりやすいし読みやすいから
https://dobon.net/vb/dotnet/programing/random.html の
//0.0以上1.0未満の乱数を倍精度浮動小数点数で返す
Double d = r.NextDouble();
>>672こういう意味とは違うの?
整数範囲で出して割った方が範囲や有効桁も決められるからそっちの方がよさそうな気もする

675 :デフォルトの名無しさん :2018/09/15(土) 18:56:24.76 ID:aC3C7hdpa.net
[0, 1]とか(0, 1)は数学の記号ね(多分高校1年ぐらいで習ってるはずw)

Random.DoubleNextの戻り値は[0, 1)(つまり0≦x<1)らしい
普段乱数使うようなコード書いてないからよく分からんけど、
0≦x≦1とか0<x<1でないと困る場面も多いんじゃないかなと思っただけ

676 :デフォルトの名無しさん :2018/09/15(土) 19:01:32.64 ID:Bg+wr9i5a.net
えなんかめんどくさいからもういいよ

677 :デフォルトの名無しさん :2018/09/15(土) 19:05:58.75 ID:nwnNkRfe0.net
有効桁区切るのと一緒で丸め、切り上げ、切り捨てしたらいいだけでは
Random自体C#で使う場面に出くわしたことないからあまり考えないな

678 :デフォルトの名無しさん :2018/09/15(土) 20:19:51.91 ID:Fr67tYwB0.net
game engineだとか[]の乱数あったりするよ
()は見たことない
コーディングしてたらわかるけど利用場面は圧倒的に少ない

679 :デフォルトの名無しさん :2018/09/15(土) 20:30:38.93 ID:OUVvcRON0.net
>>667
> パラメータに対してちょっと複雑な変換を掛けるのだけど
と言うなら例もパラメーター使ってる例を書かなきゃ

>>670
俺もこれしか思いつかなかった
そもそも
var f = (string x) => { return "abc" + x; };
位は型推論してくれてもいいと思うんだけど難しいのかな?

680 :デフォルトの名無しさん :2018/09/15(土) 20:39:04.65 ID:OUVvcRON0.net
>>675
例えば0〜9の整数乱数がほしい時に[0,1)なら10倍して整数部分を取るだけだけど(0,1)とか[0,1]だとすごく面倒

681 :デフォルトの名無しさん :2018/09/15(土) 20:42:09.91 ID:KIanXBkQ0.net
面倒だったら擬似乱数生成器を自分で作ればいい
キミラ程度が使う程度の擬似乱数だったら数行コピペでできる程度のもんで十分だからな

682 :デフォルトの名無しさん :2018/09/15(土) 20:49:32.65 ID:Xc5RKOnR0.net
>>667
ローカル関数じゃだめなん?

683 :デフォルトの名無しさん :2018/09/15(土) 20:53:08.93 ID:KIanXBkQ0.net
https://ideone.com/PJDFVv

この程度で十分

684 :デフォルトの名無しさん :2018/09/15(土) 21:33:37.63 ID:OUVvcRON0.net
>>681, >>683
バカは絡んでくるな

685 :デフォルトの名無しさん :2018/09/15(土) 21:35:49.16 ID:OUVvcRON0.net
>>682
本来必要のない名前を考えるのが面倒
そもそもローカル関数にするぐらいなら>>663とたいして変わらんし

686 :デフォルトの名無しさん :2018/09/15(土) 21:37:43.29 ID:KIanXBkQ0.net
やっぱり低学歴知恵遅れは
内側の擬似乱数生成器をかえるだけの話なのがわかってないわ

きっと擬似乱数がなんなのかすらわかってないわ
擬似乱数がなんなのかわからずに乱数()とかいって数字使ってる程度だからな

687 :デフォルトの名無しさん :2018/09/15(土) 21:39:33.01 ID:KIanXBkQ0.net
つまり
コレがC#なんか使ってるヤツラのオツムの程度

688 :デフォルトの名無しさん :2018/09/15(土) 21:40:44.62 ID:qw6mr0Vb0.net
>>675
(0,1)は[0,1)が0ならやりなおし、でいいんじゃないのと単純に思ったがそんなものじゃない?

689 :デフォルトの名無しさん :2018/09/15(土) 22:05:16.77 ID:KIanXBkQ0.net
そもそも機械イプシロンのこと分かってて
ああいうレスしてるようにはまったく見えないからな

690 :デフォルトの名無しさん :2018/09/15(土) 22:52:03.88 ID:OUVvcRON0.net
>>688
発生側はそれでいいとしてそれを必要とする機会がどんだけあるの?
って話かと

691 :661 :2018/09/15(土) 23:10:36.43 ID:LMkhUY/p0.net
気に掛けてくれた方々に。ありがとう。

>>670
ああ。なるほど。型を明示してあげたらよかったのか。
キャストを加えたら期待通りに書くことが出来ました。ありがとうございます。

これってラムダ式を var で宣言した変数に代入できなかったことがヒントになり得たんだな。頭が回ってなかった。
これくらいは型推論してくれても良さそうなのにとは原因が分かった後での負け惜しみ。

>>668,682
今回のはそういうことが出来そうなのに出来なくて悶々としてしまって。
実用性度外視で原因を知りたかったの。

692 :デフォルトの名無しさん :2018/09/16(日) 10:09:07.69 ID:QiF2mi6W0.net
今ならref/outがないならAction/Funcに型推論して
シグネチャが同じdelegate間の暗黙の型変換が行われる
初期化時に左辺とかキャストとかでdelegate型が明示されてたらそのdelegate型でnewされる
でいいと思うよな〜

693 :デフォルトの名無しさん :2018/09/19(水) 06:50:46.79 ID:luZsj3k/0.net
Visual C#ってDelphiみたいに同じコードでWindows用とMac用にビルドできる?
マシンは両方用意できるとして

694 :デフォルトの名無しさん :2018/09/19(水) 07:42:00.17 ID:JcyGHTPld.net
Visual C#って具体的にはどのフレームワークを指してるのかい?

695 :デフォルトの名無しさん :2018/09/19(水) 10:08:17.18 ID:WBt1GswEM.net
可能

696 :デフォルトの名無しさん :2018/09/19(水) 12:41:26.38 ID:9aNAf/d20.net
>>693
コンソールアプリなら同じコードでどっちでも動くはずだけどGUIはよくわかんない
Xamarin Forms使えばいけるのかな?

697 :デフォルトの名無しさん :2018/09/19(水) 13:59:56.78 ID:luZsj3k/0.net
多分ASP.NETを使ってGUIのWebSocketクライアントを作る予定です
ありがとうございます

698 :デフォルトの名無しさん :2018/09/19(水) 14:05:07.91 ID:8sfFLOeb0.net
MacでWebSocket??????
ちょっと何言ってるかわかんないですね

699 :デフォルトの名無しさん :2018/09/26(水) 21:52:32.99 ID:rAzbq+Jy0.net
下みたいなことって出来ます?
やりたいのは object 型の変数に代入したジェネリック系のインスタンスを、さらに元のジェネリックの型にキャストし直すってことなんですが。

void func( object dic )
{
var tmp = (Dictionary)dic;  // ← これみたいなことをやる方法がないかなと
tmp.Add( "test", new object() );
}

var dic = new Dictionary< string, object >();
func( dic );

700 :デフォルトの名無しさん :2018/09/26(水) 23:15:04.62 ID:dHSM7pQD0.net
as

701 :デフォルトの名無しさん :2018/09/26(水) 23:17:13.70 ID:+un+mAjX0.net
anal

702 :デフォルトの名無しさん :2018/09/27(木) 00:24:29.22 ID:WuETTr790.net
>>700
言葉が足りてなかった。申し訳ない。

例示のケースの場合は、
var tmp = (Dictionary<string,object>)dic;
と指定すれば出来るのだけど、Dictionary だけでキャストし直すみたいなコトできないかなって。
as でも Dictionary だけではキャストできないことは確認しました。

703 :デフォルトの名無しさん :2018/09/27(木) 00:30:38.46 ID:5qvGm4LBa.net
出来たとして何の意味があるのそれw
そもそもHoge<int>より大きなHoge<T>とかHogeって型が存在するわけじゃないでしょうw
根本的に勘違いしてないか

704 :デフォルトの名無しさん :2018/09/27(木) 08:41:34.87 ID:649yR4/AM.net
genericsでないDictionaryは存在しないからでしょ。
genericsパッケージでないほうのHashtableならできると思うけど安全性を損ねるしやらんほうがいいんじゃね

705 :デフォルトの名無しさん :2018/09/27(木) 12:20:51.28 ID:/G4FYlhv0.net
IDictionaryならあるよ
キャスト時にいちいち型引数を書くのが面倒ぐらいの意味しかないけど

706 :デフォルトの名無しさん :2018/09/27(木) 12:48:53.74 ID:sTtGwCQ3a.net
>>702
を読み直してみると、ひょっとして要するにジェネリックの型パラメータを書くのが面倒臭いから
省略できないか?、って言いたいのかな

それなら答えは「できないけど仮に出来たとしても絶対やるな」じゃないの?

もちろん、
using Dictionary = System.Collections.Generic.Dictionary<string, object>;
こういうエイリアスは書けるはずだと思うけど

何にしろ、質問は他人が読んで分かるように書いて欲しいよね

707 :デフォルトの名無しさん :2018/09/27(木) 17:14:16.27 ID:kGqzP/YO0.net
型安全性を無視していいならdynamic使え
そうじゃないなら出来てもやるな

つかジェネリックを勘違いしてるんじゃね

708 :デフォルトの名無しさん :2018/09/27(木) 17:21:14.85 ID:Q+zVeK5uM.net
それによって何がしたいのかを書いてくれないと何言ってるかわからんよな

709 :697 :2018/09/29(土) 00:47:34.72 ID:EY+8Y7mF0.net
ありがと。
やっぱり dynamic 使うしかないかな。避けたかったのだけど。

なにが入ってるか分からない配列の中身を文字列化してログ出力したかったの。(最初は)
object[] の要素の中身が generic だったりしたときに ToString() だとクラス名?にしかならないから。

710 :デフォルトの名無しさん :2018/09/29(土) 03:23:52.22 ID:BJdQm5Iw0.net
なんで何が入ってるかわからない配列なんてもんを触るんだ
静的型付け言語のメリット台無しやんけ

711 :デフォルトの名無しさん :2018/09/29(土) 09:01:26.24 ID:FmliS3qN0.net
何が入っているかわからないものを扱いたいと言っていながら一方でdynamicは避けたいというのが
よくわからんなぁ。避けてどうしたかったんだろうか。

712 :デフォルトの名無しさん :2018/09/29(土) 11:56:45.30 ID:EY+8Y7mF0.net
単に dynamic が嫌いだったのから。w

713 :デフォルトの名無しさん :2018/09/29(土) 12:32:33.34 ID:3Hj8wsg1M.net
ふーん。頭が悪いからじゃなかったのか

714 :デフォルトの名無しさん :2018/09/29(土) 14:34:45.14 ID:9IdCJ4nKM.net
たぶんjsとかの感覚で言ってるんじゃないかと

715 :デフォルトの名無しさん :2018/09/29(土) 14:42:39.43 ID:FmliS3qN0.net
でもJSも実行時に型を判断できるし、逆の意味で大して変わらんと思う。

716 :デフォルトの名無しさん :2018/09/29(土) 15:07:47.86 ID:EY+8Y7mF0.net
あれ? dynamic って推奨だったの?
おまえらがどういう場面で使ってるのか教えてくれ。

717 :デフォルトの名無しさん :2018/09/29(土) 16:47:06.91 ID:rkT/I8Hma.net
デシリアライズでもするつもりだったんじゃねの
クッソ面倒なんだよな実際

718 :デフォルトの名無しさん :2018/09/29(土) 16:56:30.70 ID:X4waiIaR0.net
ん?
> なにが入ってるか分からない配列の中身を文字列化してログ出力したかったの。(最初は)
じゃねーの?

719 :デフォルトの名無しさん :2018/09/29(土) 18:05:26.03 ID:w5r/wslsa.net
もういいでしょw
たぶん何か勘違いしてるだけだと思うよ

俺もプログラミング初めて2,3年は静的/動的とかコンパイル時/実行時の違いとか
分かってるようでよく分かってなかった

720 :デフォルトの名無しさん :2018/09/29(土) 19:25:50.32 ID:rSQsiXYHa.net
結局なにがしたいのか伝わってこない上に
微妙にムカつく上から目線

721 :デフォルトの名無しさん :2018/10/06(土) 12:04:22.29 ID:upBech+00.net
それは此処の仕様。

722 :デフォルトの名無しさん :2018/10/07(日) 19:19:55.60 ID:QvnX76F+0.net
そろそろ.NET標準でDDSのデコードできるようになってくれないかな
エクスプローラーでは普通に表示されるんだから
できればBC6と7までw

723 :デフォルトの名無しさん :2018/10/07(日) 19:43:24.02 ID:mZPrgRqf0.net
>>722
DDS?

724 :デフォルトの名無しさん :2018/10/16(火) 15:29:49.78 ID:gfGA4Hi30.net
>>696
あれ、C#って、マルチプラットフォームじゃなかったの?

Java は、Windows, Mac, Linux, iOS, Android, Chrome, Firefox, IE, どれでも
動いたよね、昔は。

725 :デフォルトの名無しさん :2018/10/16(火) 16:00:38.35 ID:y5q0bWlwM.net
Javaもクライアントアプリ分野から撤退したから今はクロスプラットフォーム度でいえばC#のほうが上なくらい(あくまでカタログスペック上は)
C#はWebかコンソールアプリなら.NET Core使えばLinuxやMacで動く
スマホやMac向けのGUIアプリならXamarinだな

726 :デフォルトの名無しさん :2018/10/16(火) 16:22:14.98 ID:qWHG2Ppw0.net
Unityも忘れるな!
mono様々やな

727 :デフォルトの名無しさん :2018/10/21(日) 20:25:55.35 ID:5Xb93YKt0.net
普及度とかマルチプラットフォームとかどうでもいいけど
Windows使っていて個人的に何かちょっと作ろうと思ったときに、もうC#以外考えられない体になってしまった

728 :デフォルトの名無しさん :2018/10/21(日) 20:37:33.56 ID:MDetJiiMa.net
おれはpythonかなー
スクリプト言語はほんま楽やで
客先でインスト制限きつい時はC#とPowerShell
Microsoftさんは早くVSCodeとdotnet cliをWindows標準にしてPowerShellを強制アプデすべき

729 :デフォルトの名無しさん :2018/10/21(日) 21:09:20.78 ID:FxDWQZOn0.net
おまんらWPF使ってる?

730 :デフォルトの名無しさん :2018/10/21(日) 21:09:38.83 ID:t4QZh6l3d.net
うん

731 :デフォルトの名無しさん :2018/10/21(日) 21:34:18.47 ID:fYYBLspX0.net
>>729
個人で使ったけど、これを社内外で使わせるにはMVVMきっちり教えないと破綻確実だから諦めた

732 :デフォルトの名無しさん :2018/10/21(日) 22:39:29.79 ID:eTSVpSn40.net
>>728
確かに楽だな。 < python
Web API を叩くプログラムをこれで書いたけど、学習まで含めてすぐ出来た。w
VS 上でも書けるのが楽さに拍車を掛けてる。

>>729
うん。でも最近はやってないな。そーいえば。

733 :デフォルトの名無しさん :2018/10/21(日) 22:44:00.95 ID:GgFjLBNe0.net
>>729
使ってる。
チームとして採用するのは難しいかもね。

734 :名無しさん@そうだ選挙に行こう! Go to vote! :2018/10/22(月) 07:55:37.83 ID:D227Fdyd0.net
>>733
どうして?
学習コストの高さ?

735 :名無しさん@そうだ選挙に行こう! Go to vote! :2018/10/22(月) 08:11:55.33 ID:vkGCn3UdM.net
そうです。
XAMLとか慣れるまで大変だし、やっぱり簡単なFORMになるんじゃないかな。

736 :デフォルトの名無しさん :2018/10/22(月) 12:06:51.16 ID:DqwlPEpNa.net
レイアウトはFormよりWPFの方が楽だと思うんだけどな
Formばかりやってたチームだと学習コストが高くて難しいのはある

737 :デフォルトの名無しさん :2018/10/22(月) 12:25:16.33 ID:+Bt5JEYG0.net
XAMLはVS補佐がまだまだ足りない
昔の落ちまくりよりは格段に進歩はしたが

738 :デフォルトの名無しさん :2018/10/23(火) 06:15:06.44 ID:oKq5ee0m0.net
Formやる前にWPFから入った俺は異端

739 :デフォルトの名無しさん :2018/10/23(火) 12:11:12.26 ID:Z3T8y8K/M.net
formは過去の遺産だから、これからやるならWPFが正統だ。

740 :デフォルトの名無しさん :2018/10/23(火) 12:32:04.49 ID:0EGfRFOMa.net
>>737
Blendを使ってください、ってことなんだろうけどなぁ

741 :デフォルトの名無しさん :2018/10/23(火) 12:42:28.83 ID:Q+FZ+yEYM.net
WPF自体は終わってるよね
次の本命が無いから使うしか無いだけで

742 :デフォルトの名無しさん :2018/10/23(火) 12:52:00.65 ID:Hcq+1RfE0.net
なお、どこも新規開発はFormの模様

743 :デフォルトの名無しさん :2018/10/23(火) 12:56:27.59 ID:eyu+kwgc0.net
MSのイチオシはUWPだしコントロールは充実しているんだけどね
TreeViewは完成したし、後はDataGridの完成を待つだけだ

744 :デフォルトの名無しさん :2018/10/23(火) 14:20:00.03 ID:oKq5ee0m0.net
全然未完成じゃねーか

745 :デフォルトの名無しさん :2018/10/23(火) 14:36:28.72 ID:cDc5Fd7gM.net
最近のMSはだいたい未完成
ちょうどGithubもやらかしたし、Azureのサービスなんかガチで世に出しちゃいけないレベルのものが大半

746 :デフォルトの名無しさん :2018/10/23(火) 15:11:27.54 ID:BR1ycnzw0.net
未完成の物をとりあえず出して、
バージョンアップで完成させてくのが昔からのビジネスモデルやろw

747 :デフォルトの名無しさん :2018/10/23(火) 15:12:45.43 ID:dmXi8fk90.net
アジャイル

748 :デフォルトの名無しさん :2018/10/23(火) 15:51:37.07 ID:Z3T8y8K/M.net
新規開発もFormになるのは人集めの都合だよ。

749 :デフォルトの名無しさん :2018/10/23(火) 16:28:52.85 ID:9gwDvhi80.net
>>741
終わってるってどういうこと?

750 :デフォルトの名無しさん :2018/10/23(火) 16:45:50.67 ID:cDc5Fd7gM.net
>>749
どういうこともクソもWPFは5年くらい前にとっくに開発終了してメンテナンスモードだよ

751 :デフォルトの名無しさん :2018/10/23(火) 16:46:49.17 ID:9gwDvhi80.net
>>750
ソースは?
.NET Core3.0知らないの?

752 :デフォルトの名無しさん :2018/10/23(火) 16:51:18.62 ID:cDc5Fd7gM.net
>>751
ソースは.NET 4.5以降のリリースノートだよ
何か気になる新機能はありましたか?

753 :デフォルトの名無しさん :2018/10/23(火) 17:16:53.27 ID:9gwDvhi80.net
>>752
で、「終わってる」だなんてMicrosoftはリリースノートに書いてるのかい?
しかも.NET Coreは都合が悪いから無視ときたもんだ…

754 :デフォルトの名無しさん :2018/10/23(火) 17:39:47.89 ID:PWuDtLsGa.net
Core3.0まで出てるんだ
なんか使いやすくなった?

755 :デフォルトの名無しさん :2018/10/23(火) 17:40:45.51 ID:Z3T8y8K/M.net
WPFが終わってるならFormは死んでる。
しかし、ゾンビ技術者がウヨウヨいるから需要はあるのかも。

756 :デフォルトの名無しさん :2018/10/23(火) 17:55:40.99 ID:cDc5Fd7gM.net
>>753
CoreのWPF対応ってWPFをCore向けにビルドしてNuGetで入れられるようにするだけだぞ?
WPF自体の新機能ではないよ

757 :デフォルトの名無しさん :2018/10/23(火) 18:06:42.97 ID:9gwDvhi80.net
>>756
必死に調べて理解したのはそれだけ?

「終わっている」プロジェクトに対してそんなことしないだろ

758 :デフォルトの名無しさん :2018/10/23(火) 18:19:29.54 ID:mVZ7w/wV0.net
平日に役に立たない言い争いしている奴らが終わってる

759 :デフォルトの名無しさん :2018/10/23(火) 20:09:28.44 ID:AlQfFCDV0.net
WPFの機能追加は終わってる
なら正しいかもしれない

760 :デフォルトの名無しさん :2018/10/23(火) 20:46:15.68 ID:duwPtJnv0.net
>>754
せっかく切ったWPFとFormアプリ復活・・・

761 :デフォルトの名無しさん :2018/10/23(火) 20:53:51.51 ID:T5C69wUW0.net
業務系ならありがたいね
ランタイム依存なしでForms使えるんだろ
ブラウザ要らないじゃん

762 :デフォルトの名無しさん :2018/10/23(火) 21:26:47.62 ID:+h1AjSvua.net
>>761
デプロイどうすんの?アップデートの度に君が出向いて客のPCでZip解凍して回るの?
それが面倒だからWebなのに、それが.NET Coreになったところで何も解決しないよ
というかClick Onceが無くなる分だけ状況は悪くなるな

763 :デフォルトの名無しさん :2018/10/23(火) 21:29:43.70 ID:TLuMxHqO0.net
自前でアップデート処理を実装すれば問題なし

764 :デフォルトの名無しさん :2018/10/23(火) 21:33:45.87 ID:9gwDvhi80.net
>>762
>Click Onceが無くなる
ソース出してみ

765 :デフォルトの名無しさん :2018/10/23(火) 21:43:47.63 ID:+h1AjSvua.net
>>764
悪魔の証明を求められても困る
.NET CoreでClick Onceが使えるソースを出すのは君の仕事だ
当たり前だけど、FullFWのClick Onceを使うという本末転倒な方法は無しで頼むぞ

766 :デフォルトの名無しさん :2018/10/23(火) 21:57:45.44 ID:NgQNKVM70.net
.NET Coreって仕事で使う?

767 :デフォルトの名無しさん :2018/10/23(火) 21:59:32.82 ID:9gwDvhi80.net
>>765
妄想おつw

768 :デフォルトの名無しさん :2018/10/23(火) 21:59:56.85 ID:9gwDvhi80.net
>>766 
もちろん使ってるよ

769 :デフォルトの名無しさん :2018/10/23(火) 22:02:41.25 ID:Eu3QtAGFd.net
>>765
断定してたからそんなアナウンスもうされたのかと思ったのに…思い込みが激しいと周りが苦労するね

770 :デフォルトの名無しさん :2018/10/23(火) 22:16:19.58 ID:+h1AjSvua.net
まあプレリリースまでもうすぐだから期待してるよw

771 :デフォルトの名無しさん :2018/10/23(火) 22:34:00.35 ID:9gwDvhi80.net
そだねー

772 :デフォルトの名無しさん :2018/10/23(火) 23:26:45.20 ID:bb2jvxz40.net
WPFが.net coreに対応したといってもlinaxで動くわけではないんだよね?
じゃあなんの意味があるの?

773 :デフォルトの名無しさん :2018/10/24(水) 00:56:19.20 ID:Zhd8G0p80.net
>>772
linaxって何?

774 :デフォルトの名無しさん :2018/10/24(水) 01:29:36.25 ID:nEIaPqDo0.net
>>772
ググれないの?

775 :デフォルトの名無しさん :2018/10/24(水) 04:16:13.88 ID:lspkKr8a0.net
ライトなトイレメーカー

776 :デフォルトの名無しさん :2018/10/25(木) 08:07:19.33 ID:nll2w7iZM.net
同じプログラムを2台のPCで動かしたら、スペックのいい方が断トツ実行速度が遅いんだけど、何かチューニングするとこある?

777 :デフォルトの名無しさん :2018/10/25(木) 08:25:20.58 ID:LYsln+4LM.net
ログ仕込め

778 :デフォルトの名無しさん :2018/10/25(木) 09:13:35.22 ID:Jq5IeBu60.net
>>776
裏で怪しげなの動かしてるんだろ

779 :774 :2018/10/25(木) 12:22:26.50 ID:nll2w7iZM.net
特に怪しいものなんか動いてないと思うんだけどなぁ
アンチウイルスの保護停止しても変わらない

こんなときに効果的なログの張り方ってある?
一部がネックなのではなく、もう全部が緩慢な感じ

780 :デフォルトの名無しさん :2018/10/25(木) 12:26:06.77 ID:U/6911CyM.net
適当なとこにログ仕込んで狭めて行けばええやろ

781 :デフォルトの名無しさん :2018/10/25(木) 12:28:31.91 ID:LYsln+4LM.net
例えばウィンドウズサーチとか重たいよね
リソース逼迫してないなら
ディスクI/OやネットワークI/Oや
ネットワーク構成が違うとかかね
全体的に緩慢となるとなあ

ヒント欲しいならもっと情報ださないとダメよ

782 :デフォルトの名無しさん :2018/10/25(木) 13:18:57.91 ID:Jq5IeBu60.net
タスクマネージャーあけてぼーっと眺めておくとひょっとしたらと。
で、スペックはどんなもんなの?

783 :デフォルトの名無しさん :2018/10/25(木) 13:56:04.51 ID:m3i6L9YGM.net
debugとreleaseだと速度違うんだっけ?

784 :デフォルトの名無しさん :2018/10/25(木) 15:08:46.52 ID:qGEaBy7DM.net
>>783
全然ちゃうで

785 :デフォルトの名無しさん :2018/10/25(木) 16:37:44.59 ID:LYsln+4LM.net
そういうオチ

786 :デフォルトの名無しさん :2018/10/25(木) 16:59:50.46 ID:/kJ20XbY0.net
debugとreleaseてそんなに違うの?おれのfizzbuzz100までどっちも一瞬だったよ

787 :デフォルトの名無しさん :2018/10/25(木) 17:51:08.23 ID:LYsln+4LM.net
ネタをネタと見抜けないと
レスするのは難しい

788 :デフォルトの名無しさん :2018/10/26(金) 00:26:15.60 ID:/Y6tHm6z0.net
スレチかもしれんけど、まだサポートしてないバージョンのアセンブリで定義されてるクラスをリフレクションでもいいから使う方法ってないかな。
具体的にはフレームワークのバージョンが2.0しか許可されない職場でxdocumentを使う方法…
dllを隣に持ってきて参照しても、型自体を認識してくれない

789 :デフォルトの名無しさん :2018/10/26(金) 00:59:31.47 ID:HrTWAmck0.net
>>786
100万データ処理してから物言いなさい

790 :デフォルトの名無しさん :2018/10/26(金) 12:40:20.23 ID:Ho1Po0zEM.net
64bitアプリから32bitアプリへ効率よく通信したいのですが、良い方法ありますか?
今はPostMessageを考えてますが型が合ってないので違う方法を探してます。

791 :デフォルトの名無しさん :2018/10/26(金) 12:40:41.09 ID:gXWoxuJ30.net
UWPだとreleaseとdebugでちがいそうだけど。デフォルトだとreleaseは.net nativeでコンパイル。debugは違う

792 :デフォルトの名無しさん :2018/10/26(金) 12:50:01.52 ID:RVLSOnVjM.net
>>790
TCP使えば?
直接叩くのが嫌ならgRPCとか使えばいい
WCFや.NET Remotingという手もあるけど、どちらもレガシー扱いで.NET Coreからは廃止されたから新規に使うのはお勧めしないな

793 :デフォルトの名無しさん :2018/10/26(金) 13:06:48.12 ID:1HfiCU8QM.net
gRPCいいよね
magiconionもあるよ

794 :デフォルトの名無しさん :2018/10/27(土) 10:20:41.86 ID:ZWpnR1MN0.net
HttpListenerってあったよね

795 :デフォルトの名無しさん :2018/10/27(土) 10:52:44.45 ID:bFJ5s+tL0.net
Core世代のWCFや.NET Remotingの代替って何があるんだろ

796 :デフォルトの名無しさん :2018/10/27(土) 11:23:19.53 ID:zH3PfDR1a.net
普通にRESTか、クラウドプラットフォームが提供するメッセージキュー(SQSとか)などの外部サービスだよ
余計な囲い込みを廃して今時のWebシステムの構成要素として組み入れやすくするというのがCoreなんだから、今更.NET固有のRPCなんか要らん

797 :デフォルトの名無しさん :2018/11/05(月) 18:13:53.94 ID:PEqFXj+e0.net
dllを修正する際にどの程度までの修正であれば問題ないかまとめてある
サイトってありますか?
dllのクラスの派生元に一つクラスを挟んだ修正では問題なく動いている
ようだったので・・・。

798 :デフォルトの名無しさん :2018/11/05(月) 19:00:13.51 ID:1Mw8aOkb0.net
ライセンス読んで

799 :デフォルトの名無しさん :2018/11/05(月) 19:16:09.78 ID:W+eHh5+20.net
>>797
逆に使えなくなる場合は(マネージドdllで)厳密な名前付きアセンブリとして作ってある物が名前などが変わってしまった場合
厳密な名前付きアセンブリ
https://docs.microsoft.com/ja-jp/dotnet/framework/app-domains/strong-named-assemblies
>厳密な名前付きのアセンブリを参照すると、バージョン管理や名前の一意性を保護できるなどの利点を期待できます
それ以外は変更のないクラスやフィールドにアクセスする分には問題にならないはず

800 :デフォルトの名無しさん :2018/11/07(水) 00:50:27.11 ID:8OYVWtUM0.net
>>799
情報ありがとう。
あまり厳密にはしたくないのですがリンク先を
よく読んでみます。

801 :デフォルトの名無しさん :2018/11/07(水) 16:08:10.06 ID:Qrgo3xvC0.net
Monoの互換性についてなのですが、
Visual studio2017でWindowsクラシックデスクトップのWindowsフォームアプリケーション(.Net Framework)で書いたコードは
そのままMonoでコンパイルできるという認識であってますか?

802 :デフォルトの名無しさん :2018/11/10(土) 05:02:04.09 ID:ZJVvB/9K0.net
>>801
できるし、VisualStudioでコンパイルしたものをMonoでコンパイル直す必要すらない建前なんだけど・・・・
実際には対応状況にかなりの差があってGUIアプリケーションやら暗号やらが絡むものについてはうまくいかない事が多い

803 :デフォルトの名無しさん :2018/11/10(土) 18:24:39.80 ID:yl+mwE+c0.net
>>802
そうだったんですね
ありがとうございます

804 :デフォルトの名無しさん :2018/11/10(土) 21:29:39.44 ID:BfX4LnOFa.net
引数を変更不能にできないのって何か理由あるの?

805 :デフォルトの名無しさん :2018/11/10(土) 22:01:19.43 ID:eyW0451M0.net
>>804
最近は条件付きでできるよ

C# in 引数

806 :デフォルトの名無しさん :2018/11/11(日) 10:14:46.52 ID:zL+4Qkmba.net
Javaのリモートデバッグは

1. 起動オプションでデバッグ用のリモートポートを指定
2. デバッガで同じポートを指定してアタッチ

でできますが
C#(DotNet Core 2.1)では同じような事は出来ませんか?
運用環境でしか発生しないバグのデバッグってどうやればいいんでしょうか?

807 :デフォルトの名無しさん :2018/11/11(日) 12:52:12.52 ID:EeRGHZk70.net
>>806
リモート側にリモートデバッガ入れるとか
運用環境ということだからそもそもデバッグビルド入れられるか知らんが
まぁ、ログ仕込め

808 :デフォルトの名無しさん :2018/11/11(日) 15:47:26.43 ID:6jAVVbmKa.net
同じLAN内ならプロセスアタッチで行けそうだが
試してないから知らん

809 :デフォルトの名無しさん :2018/11/15(木) 15:41:42.81 ID:hjFVqahJ0.net
Unity って、Wikipedia によれば、600,000 (60万人) も、登録ユーザーがいて、
従業員が、2,000人以上、年間利上げが、100億円を超えるほどあるとされる。

ゲームエンジン Unity の使用料は、
・1,000万円までの売り上げなら、無料。
・2,000万円までの売り上げなら、年間5万円ほど。
・それ以上の売り上げなら、で年間18万円ほど。
とある。

でも、Wikipediaに載ってる Unity を使ったゲームのリストは、
100本あるかどうか程度しかない。

これだと、Unityには、年間2,000万円程度の収入にしかならないのでは
ないかと思う。

それに、アメリカですらプロのプログラマは、30万人くらいしかいない
とされることとも辻褄が合わないように思える。


なんかおかしくない?

810 :デフォルトの名無しさん :2018/11/15(木) 16:09:30.56 ID:DsJildR5M.net
基準がwikipediaなのが謎だけど
steamとか見てみなよ
それに×人数だから実際はもっと高い

811 :デフォルトの名無しさん :2018/11/15(木) 16:30:30.62 ID:hjFVqahJ0.net
>>810
>それに×人数だから実際はもっと高い

探したけど出てこなかった。どこに書いてある?

812 :デフォルトの名無しさん :2018/11/15(木) 17:43:06.03 ID:tBfV11FV0.net
そもそもUntiyはプログラマ以外も使うから小さい会社でもアカウントはそこそこもってるようなこともあるよ

813 :デフォルトの名無しさん :2018/11/15(木) 17:50:09.14 ID:hjFVqahJ0.net
>>812
プログラマ以外は何のために訪れる??

814 :デフォルトの名無しさん :2018/11/15(木) 17:52:04.91 ID:tBfV11FV0.net
最近スマホアプリのtop100くらいまでの使用エンジン調査した記事あった気がしたんだけど見つからんかった
たぶん半分くらいがunity製だった気がする
PCでもUnity製増えてきてるしswitchにもそこそこ出てる
日々山ほどのゲームがリリースされてるのにwikipediaで全てを網羅できるわけないと思うんだけど、なんで自分がおかしいと思わなかったの?

815 :デフォルトの名無しさん :2018/11/15(木) 17:56:18.66 ID:tBfV11FV0.net
>>813
訪れる?利用するんじゃないの?
ディレクタやプランナがUnity上でプレイすることもあるし、CGデザイナやUIデザイナがUnity上で作業することもある
もちろん3Dモデリングなんかは専用のツールのほうが作業はしやすいけどね

816 :デフォルトの名無しさん :2018/11/15(木) 18:00:10.49 ID:tBfV11FV0.net
っていうか普通の企業なら間違いなく年間売上2000万なんて超えるよ?
安く済ませられるのなんて個人事業主か同人サークルだけ
社員が5人でもいたらまず年間売上で引っかかるんだから
大きい企業なら普通に100単位でアカウント持ってるし、小さいところでも10以上持ってるとこなんて山ほどある

817 :デフォルトの名無しさん :2018/11/15(木) 18:12:20.13 ID:hjFVqahJ0.net
アカウントって、1つのゲームに対して、ひとつだけじゃないの?
開発者の人数分???

818 :デフォルトの名無しさん :2018/11/15(木) 18:14:07.61 ID:tBfV11FV0.net
>>817
開発者分必要
ライセンス読んで
あとここUntyスレじゃないよ

819 :デフォルトの名無しさん :2018/11/15(木) 20:22:13.71 ID:biHRXo8wM.net
ガイジっぽい

820 :デフォルトの名無しさん :2018/11/15(木) 20:41:27.20 ID:8sDmawlrM.net
年間売上2000万じゃ底辺3人雇うのが精一杯だな。

821 :デフォルトの名無しさん :2018/11/15(木) 20:45:05.56 ID:fRq//2+J0.net
1人でも無理あるだろ

822 :デフォルトの名無しさん :2018/11/16(金) 02:23:44.07 ID:a546+gcL0.net
背理法で証明して見せたかっただけだよ。
つまり、矛盾を示す事で、間違い/捏造であることを証明する手法。

だから、ありえないような結論が出たということは、正しく証明できた
事になる。

823 :デフォルトの名無しさん :2018/11/16(金) 04:24:32.84 ID:/x4PzStk0.net
はいりはいりふれはいりほー

824 :デフォルトの名無しさん :2018/11/16(金) 14:20:33.68 ID:+bMNmjEk0.net
Unityの登録だけなら自分でもやってるからなぁ
仕事でやってる人なんて会社用と個人用を別々に登録してるんじゃね

あとUnityはVRチャットで自キャラ作るのに使うから、
それも多いと思う

825 :デフォルトの名無しさん :2018/11/16(金) 19:05:12.63 ID:a546+gcL0.net
>>824
やっぱり、そういう事もあるんだね。

どっちにしろ、Uniy のゲーム・ライブラリだけのライセンス料では、年間100億円
の売り上げにはならない気がする。

CADなども売っているので、そういう売り上げがかなりあるのかもしれない。

826 :デフォルトの名無しさん :2018/11/16(金) 19:24:02.27 ID:ikVu1qV7M.net
な、ガイジだろ

827 :デフォルトの名無しさん :2018/12/12(水) 13:45:10.42 ID:RRyKxOPE0.net
>>809
海外の人も Unity 発表の数値には疑問を抱いている。
ちなみに、日本のゲーム業界の開発者数(プログラマ、
デザイナ、企画含む) は、2万5,000任程度だとされ、
世界でも1チームの平均人数は5.5人程度。
Unityには、450万人もの開発者が登録されているとされる。
Unity発表の数値が正しければ、世界には、
ゲーム開発チームが、160万〜200万チームも
あることになってしまう。

「How many game developers existed in 2016?」
https://www.quora.com/How-many-game-developers-existed-in-2016


A cached version of Unity’s public relations page from July 2016 states that
Unity has 45% of the global market share and 4.5 million developers using the
platform, indicating an estimated total of 10 million individual game developers
(my guess is that “developers” means people working in game development,
including roles such as artists and game designers as well as engineers, who
could potentially use the tool).

From a 2013 Game Development Magazine survey of 1051 developers (republished by GamaSutra):

Studio size and type: 7% of respondents are individual independent devs,
19% are teams of 2-5 people, 14% on 6-10, 18% on 11-30 , 9% on 31-50,
7% on 51-80, 5% on 81-100, 8% on 101-150, 4.5% on 151-200,
5.5% on 201-300, and 3% on teams of 300+.

This indicates an average team size between 5 and 6 team members.
If each of these members falls under Unity’s classification of “developers,”
we can estimate 1,600,000 - 2,000,000 game development studios (including
individuals developing games alone as well as teams).

828 :デフォルトの名無しさん :2018/12/12(水) 13:54:09.60 ID:RRyKxOPE0.net
2017/01/27時点で、GooglePlay には、260万個、AppStore には、
200万個のアプリがある。そのうちの25%がゲームだとして、Android
には、60万ゲームある。1チーム当たり 5個のゲームを公開している
としても、12万「チーム」あることになる。日本のプロのゲーム開発者
が2万5,000人程度しかいないことを考えると、凄い人数では有る。

そもそもアプリ全体の個数もかなり多いので、アマチュアプログラマがかなり
多い事は多い。

------
There are currently over 2.6 million apps in the Google Play Store and over
2 million in the App Store. I can’t find anything to say how many of those
are games. Let’s assume 25% are games. Lets just focus on Android as
our estimation. That would mean more than 600,000 games on Google Play.
I would say the average developer has 5 games on the store. Lets use 10
to be conservative. That would mean there are 60,000 different developers.

That’s my best guesstimate. My gut tells me it’s probably more but who
knows. I know for one thing, I am a developer and I have 4 games released.
Feel free to check them out:

829 :デフォルトの名無しさん :2018/12/12(水) 14:02:18.23 ID:RRyKxOPE0.net
GooglePlayやAppStoreのAppって、250万個もあれば、その中に本当に同一のものが
含まれてないか、または、250万個も本当にあるかを調べることは不可能に近い
かも知れない。
そもそも本当はそんなに無かったりして。そもそも、Vectorに登録されているアプリ
だってそこまで無い気もするし。

830 :デフォルトの名無しさん :2018/12/12(水) 14:04:10.36 ID:3f3X1OW4d.net
うちゲーム会社じゃなくて製造業(けっこう大手)だけど、VR絡みはUnity使ってるよ。
同業他社も使ってるのは意見交換会で聞いたし。
映像系でも使われ始めてるから、ゲーム業界から離れたほうがわかりやすいかも。

831 :デフォルトの名無しさん :2018/12/12(水) 14:05:59.54 ID:35krN4020.net
VRChatでスクリプトとして使われているしな

832 :デフォルトの名無しさん :2018/12/12(水) 14:43:30.92 ID:RRyKxOPE0.net
確かに、VRまで含めれば説明が付く気はするんだよ。
使う人の人数は作る人の人数より100倍程度は居るのが普通だから。

ただ、GooglePlayに登録されているアプリ数が本当に250万本もあるかどうか、
そのまま信じていいかについては注意すべき。

そもそも250万種類の一覧表をテキストファイルで見られるかどうか。

旧 nifty serve なんかも、「シェアウェアは儲かる」と言ってパソコン通信
加入者を増やそうとしたらしい。その際、「秀丸エディタ」が1億円の売り上げ
がある、とされたが、その作者が富士通社員だったことは公然の秘密。

833 :デフォルトの名無しさん :2018/12/12(水) 14:50:38.86 ID:4WsM1r+i0.net
>>832
レコード数250万のDBなんてざらにあるぞ

834 :デフォルトの名無しさん :2018/12/12(水) 14:55:46.58 ID:RRyKxOPE0.net
>>833
そういう意味じゃなくって、GooglePlay から、全てアプリが載った一覧表を一度に
ダウンロードできるのかってこと。

検索するだけだったら、本当に250万種類もあるかは誰にも分からないじゃない
かと。

835 :デフォルトの名無しさん :2018/12/12(水) 14:59:31.85 ID:Gas9nc7W0.net
で?
としか言いようがないな

836 :デフォルトの名無しさん :2018/12/12(水) 16:21:36.71 ID:YkPnkG/ad.net
Twitterにでも書いてろ

837 :デフォルトの名無しさん :2018/12/12(水) 16:52:49.38 ID:3f3X1OW4d.net
儲かってると思うけどな。Unity。
18万円はProだろ。
Enterpriseは別だよ。

838 :デフォルトの名無しさん :2018/12/12(水) 20:04:55.15 ID:fYjPqF3od.net
ダウンロードできるか?ってできるだろ
1レコードがMB単位でデータあるんか?
1レコード1KBで2.5GB
最近のゲームなんて10GB超えのダウンロード当たり前みたいなとこあるじゃん
250万行のテキストはあんま開きたくはないが

839 :デフォルトの名無しさん :2018/12/12(水) 20:09:07.70 ID:fYjPqF3od.net
なんの根拠もない空想だけどゲームとVRの比率、VRが10%とかじゃない?
もちろん両方もそれなりにいるだろうけど
それでVRまで含めれば説明がつく、って意味がわからん

840 :デフォルトの名無しさん :2018/12/12(水) 20:16:58.44 ID:3f3X1OW4d.net
あんまり詳しくは言えないけど、VR以外にも使ってるものもあるし、エンタープライズだとお値段時価だし、
企業ユースでは数人のチームなんてのはあり得なくて結構な人数分揃えるからね。
CADと連携したりなんやかんやで、ゲーム開発より金はかかるから、プロダクトの割合とは一致しないよ。

841 :デフォルトの名無しさん :2018/12/12(水) 20:31:17.51 ID:kvTCOjS80.net
Unity用のスレはあるからそっちでやれよ
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】
https://mevius.5ch.net/test/read.cgi/tech/1478142101/
数レスならともかく赤いのまでいるし

842 :デフォルトの名無しさん :2018/12/12(水) 21:46:33.67 ID:Lm9ykMW+0.net
先月も変なのが沸いてたけど同一人物だな

843 :デフォルトの名無しさん :2018/12/14(金) 16:44:56.02 ID:nWTWWp6e0.net
質問いいでしょうか
webapiにて
var task = Task.Factory.StartNew
これで重い処理をバックグラウンドで処理させています。
このtask開始時にDBにProcessThread.IdとProcessThread.StartTimeを落として
別のwebapiでDBに落としたIdとStartTimeを使って
GetCurrentProcess().Threadsを検索して定期的に生きてるかのチェックを行っています。
これがけっこう不安定みたいで、バックグラウンドの処理が終わる前に
ProcessThreadが検索できなくなる場合があります。
最初にStartNewさせた際のProcessThreadが生きてる正しい確認方法はないでしょうか?
ブラウザを閉じた場合を考慮してProcessThreadで確認を行いたいです。

844 :デフォルトの名無しさん :2018/12/14(金) 17:44:35.68 ID:nWTWWp6e0.net
すいません。
変な質問ですね。
var taskを見るのではなく、その他の方法で
バックグラウンド処理が動いてるかの確認が行いたいです。

845 :デフォルトの名無しさん :2018/12/14(金) 18:14:11.54 ID:nWTWWp6e0.net
すいません。
自己解決です。
static public Task wkTaskを宣言しておいて

wkTask= Task.Factory.StartNewで作成したあと、ブラウザを閉じて
開き直してもwkTaskは生きてますね。

スレ汚しすいませんでした。

846 :デフォルトの名無しさん :2018/12/14(金) 21:29:27.54 ID:OUs3lGdw0.net
自己解決できるやつは偉いぞ

847 :デフォルトの名無しさん :2018/12/15(土) 02:43:07.58 ID:LeOuIFUL0.net
>>845
そのTaskが必ず1つしか動かないって保証があるならいいけどね。
ブラウザ閉じる->開くを繰り返したらどうなるんや

848 :デフォルトの名無しさん :2018/12/15(土) 16:24:19.51 ID:U8VjJ+lV0.net
ブラウザ閉じて開いて、サーバの同じスレッドに接続して同じタスク拾う保証どうやってるんだ

849 :デフォルトの名無しさん :2018/12/26(水) 11:49:06.15 ID:yRPOvGGU0.net
Action.Invokeでvoidと比べてstatic voidの方が遅いのってC#7だと改善されたの?

850 :デフォルトの名無しさん :2019/01/09(水) 13:31:28.35 ID:C73LM3okM.net
javaのtry-with-resouceみたいにusing書けるようにしてくれないかな
どうしてもネスト深くなるの辛い

851 :デフォルトの名無しさん :2019/01/09(水) 15:23:40.58 ID:c4aAB3Aqd.net
>>850
C#8.0

852 :デフォルトの名無しさん :2019/02/10(日) 17:55:21.67 ID:Y+0FbWW50.net
メソッドへのオブジェクト引数で、参照渡し(refをつける)、とオブジェクトの値渡し(refなしの値渡し。つまり、ポインター(アドレス)渡し)の違いがわかりません。
同じと思ってますが・・・・・。事実は違うようです。参照だと渡し元も変更される、っていう違いは分かります。
それ以外の違いはあるんでしょうか?

853 :デフォルトの名無しさん :2019/02/10(日) 18:14:21.76 ID:vpLDyodj0.net
>>852
オブジェクトの値渡しってどういうこと?
参照型なら全部参照渡しになると思うが

854 :デフォルトの名無しさん :2019/02/10(日) 18:17:54.37 ID:Mw20IJUM0.net
refだと渡し元が変更されるって十分な違いだろ
どうあって欲しいんだよ一体

855 :デフォルトの名無しさん :2019/02/10(日) 18:43:21.99 ID:vOpxNkmL0.net
>>852
ここらへんを見てみればいいかと
https://dobon.net/vb/dotnet/beginner/byvalbyref.html#section3

かんたんに言うとどっちでも渡されたオブジェクトの中身は変えられるけど、ref付けないと新しいオブジェクトを設定して呼び出し元に返せないってこと

856 :デフォルトの名無しさん :2019/02/10(日) 18:57:09.81 ID:ynO2ssbq0.net
参照値でも、refつけない値渡しとref付ける参照渡しできる。
で、参照値以外の値...とりあえず非参照値と呼ぶと
非参照値でも、refつけない値渡しとref付ける参照渡しできる。

全部で4パターンあるってこと 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)


857 :デフォルトの名無しさん :2019/02/10(日) 19:18:44.11 ID:zgWWffC0a.net
>>852
簡単なので難しく考えてはだめ。すごくシンプルな話。

その型の値(その型の変数に格納される値)を渡すのが値渡し。
その型の変数の「場所」を渡すのが参照渡し。
さらっと書いたけど、「その型の値 = その型の変数に格納される値」なのはよく理解する必要がある。
つまり、参照型の変数に格納される値って何だったか要再考。

変数とはメモリ上に割り当てられた特定の領域のこと。
だからその領域のバイト列のコピーを渡すのが値渡しで、
領域の先頭アドレスを渡すのが参照渡しだと思えばいい。

参照渡しでメソッドが受け取る情報は「変数の」場所なので、参照渡しの引数に
リテラルや式を渡すことは出来ない。

858 :デフォルトの名無しさん :2019/02/10(日) 19:59:44.58 ID:xbk//Ba50.net
多分だけど参照渡しと値渡しの挙動自体は理解しているものの、
デフォ参照型とデフォ値型の区別がついておらずにデフォ参照型で実験をしてrefでも素渡しでも変わらないやんってことじゃないか

859 :デフォルトの名無しさん :2019/02/10(日) 20:36:28.11 ID:3Dzzkr73a.net
tuple使えるならrefは忘れていいと思う

860 :デフォルトの名無しさん :2019/02/10(日) 20:53:04.89 ID:OiPWe/iEa.net
TryParseみたいなのだと成否と値がtupleで返って来てもifの中でめんどい

861 :デフォルトの名無しさん :2019/02/10(日) 21:03:14.46 ID:c1xIq/Nm0.net
メソッド内で中身を変更するって理由で参照型のもref渡ししてるのみてイラッとしたことはある。イランヤン

862 :デフォルトの名無しさん :2019/02/11(月) 08:03:59.18 ID:RCleUAyA0.net
それVB6からの移植とかじゃない?
オフショアが移植したコードがそんなんばっかし

863 :デフォルトの名無しさん :2019/02/11(月) 15:02:26.65 ID:RVSdpjZja.net
ref の使いどころってライブラリから複数の返値欲しい時だから
他の手段使えるならそっちでいいわな
未初期化変数指定できんのも地味にイラッと来るし

864 :デフォルトの名無しさん :2019/02/11(月) 15:22:08.28 ID:xSGeZZ3R0.net
>>863
そういう場合はrefではなくoutを使う

865 :デフォルトの名無しさん :2019/02/11(月) 15:23:06.12 ID:MkFOBvt90.net
>>863
> 未初期化変数指定できんのも地味にイラッと来るし
out使えよ

866 :デフォルトの名無しさん :2019/02/11(月) 15:23:27.15 ID:MkFOBvt90.net
被った…

867 :デフォルトの名無しさん :2019/02/11(月) 16:36:40.92 ID:2icS/4sTa.net
引数いじるの好きじゃないわ
返り値だけで判別させて

868 :デフォルトの名無しさん :2019/02/11(月) 16:54:38.75 ID:I8dqqL3E0.net
まあ参照型はoutの制約で十分かつ安全なのでrefはほぼ出番ないんじゃねえのん
Swap関数を定義する時くらしか適切な例が思い付かねえ

869 :デフォルトの名無しさん :2019/02/11(月) 18:26:18.92 ID:2ERt5pT00.net
そのswapがな、MVVMでお決まりのBindableBaseなりのSetPropertyでプロパティの値交換するときに使いまくりで、
androidでもMVVM使いまくってるけどrefないkotlinやjavaでやると...

870 :デフォルトの名無しさん :2019/02/12(火) 19:50:18.92 ID:u96ReIy/0.net
プロパティの値交換するときってのが想像つかんが
どういうときにそれを使いまくるんだ?

871 :デフォルトの名無しさん :2019/02/12(火) 21:01:30.06 ID:KFZGfstbM.net
プロパティの値をソートする時じゃね?(適当)

872 :デフォルトの名無しさん :2019/02/12(火) 23:51:08.44 ID:HQcd2HqP0.net
BindableBase SetPropertyとかでぐぐってみれ
有り体に言えば自身のプロパティ(のバックストア)を差し替えるジェネリックメソッドを基底クラスで定義するのに使うだけ

873 :デフォルトの名無しさん :2019/02/13(水) 00:40:04.33 ID:6JezjdzR0.net
WPFとかUWPとか使ってればBindableBaseのありがたさはよくわかる

関係ないけどstaticメソッドって呼び出すときにいちいちインスタンスを生成する必要がないって以外のメリットあるのかな?

874 :デフォルトの名無しさん :2019/02/13(水) 01:53:30.80 ID:sK/raQIQa.net
>>873
まあメリットって発想がそもそもおかしい。
例えばDouble.Parseがstaticなのはその方が意味的に自然だから
インスタンスメソッドである必然性がないし、インスタンスメソッドでは不自然だから

875 :デフォルトの名無しさん :2019/02/13(水) 04:15:53.43 ID:VGvE+KfY0.net
>>873
パフォーマンス

876 :デフォルトの名無しさん :2019/02/14(木) 21:00:36.96 ID:YtWtNE43a.net
dictionaryとかのcollection系が手抜きなのなんで?
特にdictionaryとか拡張必須だし
割とc#好きだけどこれはほんとアカン

877 :デフォルトの名無しさん :2019/02/14(木) 22:13:27.13 ID:qKlS4dB9d.net
>>876
何がどうあかんのか具体的に

878 :デフォルトの名無しさん :2019/02/14(木) 22:45:20.23 ID:tlcLfILV0.net
テンプレート系はデータが増えればC++にでも勝てるのに
何が問題?

879 :デフォルトの名無しさん :2019/02/15(金) 00:22:49.50 ID:dIP2EtTm0.net
Collection系はJavaの方がしっかりしてるよね。

880 :デフォルトの名無しさん :2019/02/15(金) 00:39:22.49 ID:2WeUN81J0.net
>>879
Javaは何が違うん?

881 :デフォルトの名無しさん :2019/02/15(金) 03:04:36.23 ID:l1U6kYAka.net
Queue以外は不満持ったことないね

882 :デフォルトの名無しさん :2019/02/15(金) 21:54:02.82 ID:kAPwBxa3M.net
queueは空っぽの時取り出そうとすると落ちやがるの許せん勝田
今はTryあるからいいけど

883 :デフォルトの名無しさん :2019/02/15(金) 22:47:38.37 ID:izkrr7dEa.net
いやチェックしとけよそこは

884 :デフォルトの名無しさん :2019/02/16(土) 08:41:04.77 ID:q1DAaOKG0.net
例外が発生することを落ちるって表現する男の人って…

885 :デフォルトの名無しさん :2019/02/16(土) 10:36:35.40 ID:8cj+4+Hl0.net
例外っていろんな種類あるけど具体的に何を使えばいいのかよくわからなくて
とりあえずcatch(Exception e)とかしちゃってるけど本来はこんなのダメだよな……

886 :デフォルトの名無しさん :2019/02/16(土) 11:09:50.80 ID:mveZudXk0.net
別にいいと思うぞ。下位の呼び出しのどこかで失敗したということに対して適切に処置するなら。

887 :デフォルトの名無しさん :2019/02/16(土) 12:03:59.89 ID:mmBt6tnL0.net
>>885
例外は握りつぶしてこそ華

888 :デフォルトの名無しさん :2019/02/16(土) 12:43:39.03 ID:LCZTEEhT0.net
catch(Exception e){

889 :デフォルトの名無しさん :2019/02/16(土) 13:08:53.78 ID:q1DAaOKG0.net
>>885
> 例外っていろんな種類あるけど具体的に何を使えばいいのかよくわからなくて
投げる方で悩むのはわかるけど
> とりあえずcatch(Exception e)とかしちゃってる
受ける方はどれ受けるべきかはわかってるでしょ
最終手段としてよくわからんけどエラーが発生したから終了するね
って言うならcatch(Exception e)もありだと思うが

890 :デフォルトの名無しさん :2019/02/16(土) 13:37:31.27 ID:mveZudXk0.net
終了というのがプログラムの終了のことなら逆にcatchしちゃだめだろう。

891 :デフォルトの名無しさん :2019/02/16(土) 14:43:51.47 ID:NIO8UzEI0.net
>>889
catch { }ではw
>>890
例外一つでプログラム終了していたら大概困るw

892 :デフォルトの名無しさん :2019/02/16(土) 15:01:00.34 ID:NEtPpdWW0.net
例外はありえない事態なんだからプログラム終了しなきゃまずいだろう

893 :デフォルトの名無しさん :2019/02/16(土) 15:02:54.74 ID:PR5Tb5Rba.net
>>891
それは逆で、プログラマが想定してない例外が発生したら
プログラムは停止してもらわないと困る。これが正しい考え方。

そもそも例外機構というのはそのためにある

894 :デフォルトの名無しさん :2019/02/16(土) 15:03:48.09 ID:uy2P96bkM.net
最近部活の後輩が黒魔術みたいなコードを書くようになって困ってるんだが対策ない?

こんな感じのコードを後輩が書いてくるんだよ↓

public interface IMessenger {
__public MessageReceived();
}
public abstract class Messenger : IMessenger{
__public abstract void MessageReceived();
__public abstract void Retry();
}

895 :デフォルトの名無しさん :2019/02/16(土) 15:04:05.72 ID:uy2P96bkM.net
public class Mail : Messenger {
__public override void MessageReceived(){
____//処理
__}
__public override void Retry(){
____//処理
__}
}
public class Alarm : Messenger {
__public override void MessageReceived(){
____//処理
__}
__public override void Retry(){
____//処理
__}
}
public class Communication {
__public void SendMessage(IMesssenger message){
____SendMessage(message);
__}
__public void Received(){
____var received = GetMessage() as IMessage;
____received?.MessageReceived();
__}
}

896 :デフォルトの名無しさん :2019/02/16(土) 15:04:31.94 ID:uy2P96bkM.net
こんなんだったから

public class Communication{
__public void SendMessage(string message){
____SendMessage(message);
__}
__public void Received(){
____var received = GetMessage();
______switch(received.First()){
_______case "0":
_________MailEvent(received);
_________break;
_______case "1":
_________AlermEvent(received);
_________break
____}
__}
}

こんな感じで書くように矯正しといた
CSVで2文字で分けるって言ってるんだから
何が起こってるかわかるように書くことを意識してもらわないと

897 :デフォルトの名無しさん :2019/02/16(土) 15:06:36.58 ID:8cj+4+Hl0.net
まあ例外でプログラムは終了させるべきだよな
ただ客は例外が起きてもcatchで握りつぶしてスルーした方が文句言わないんだよな……

898 :デフォルトの名無しさん :2019/02/16(土) 15:14:21.65 ID:auHH3gBua.net
>>894
酷いな
MediatoRを使うようにアドバイスしてあげなよ

899 :デフォルトの名無しさん :2019/02/16(土) 15:19:24.61 ID:PR5Tb5Rba.net
>>894
2chのシステムは先頭の半角スーペースは除去するけど全角スペースは除去しない。
だから字下げは後者で

900 :デフォルトの名無しさん :2019/02/16(土) 15:41:54.82 ID:q1DAaOKG0.net
>>891
> catch { }ではw
ごめん、何を言いたいのかわかん
処理部分も当然必要だけど何を受けるかの話だから(Exception e)の方が重要だろ?

901 :デフォルトの名無しさん :2019/02/16(土) 22:53:53.99 ID:gbHoDgK/0.net
>>893
ちょっとMSに例外じゃなくエラーコード戻す設計にするようお前から言ってきてくんね?
W32APIはそうなってんのにFrameworkの方そうなってないじゃん

902 :デフォルトの名無しさん :2019/02/17(日) 00:48:25.53 ID:0sFVNd3o0.net
宗教戦争を見物now

903 :デフォルトの名無しさん :2019/02/17(日) 14:42:24.50 ID:QIeMqQFm0.net
byte*からbyte[]にする方法ってない?
new byte[64];みたいに新規確保してコピーしか方法ないんだろうか
Unsafe.As等で新規確保無しで出来るかと思って色々試してみたけど上手くいかない

904 :デフォルトの名無しさん :2019/02/17(日) 15:01:42.36 ID:99sHKv96a.net
「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
全然別の型なんだしあるわけないでしょう。
そういう危なっかしい機能を排除してるのがC#の売りの一つだったはずなわけで

コピーする機能ならMarshalあたりにあるんじゃない?

905 :デフォルトの名無しさん :2019/02/17(日) 15:16:25.11 ID:QIeMqQFm0.net
>>904
>「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
そういうことです

あるわけないと言いますが、その逆はあるので出来るかなと思い
(byte*やref byteで先頭を指定し自作のstructとして読ませる。少しずらせばbyte[]を自作クラスとして読ませることも可能)

906 :デフォルトの名無しさん :2019/02/17(日) 15:21:31.28 ID:Ox4HquXb0.net
>>905
>(byte*やref byteで先頭を指定し自作のstructとして読ませる。少しずらせばbyte[]を自作クラスとして読ませることも可能)
具体的なコード希望

907 :デフォルトの名無しさん :2019/02/17(日) 15:23:52.52 ID:UNDanSNQ0.net
その逆がマネージドじゃ難しいからね
無理じゃないかなあ

やっぱこれからはSpanですよスパンスパン

908 :デフォルトの名無しさん :2019/02/17(日) 15:27:09.29 ID:QIeMqQFm0.net
>>906
public struct MyStruct { public int Value1, Value2, Value3, Value4 };
byte[] data = new byte[16] { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 };
ref var myStruct = ref Unsafe.As<byte, MyStruct>(ref data[0]);
これでmyStruct .Value1は1、myStruct .Value2は2, myStruct .Value3は3, myStruct .Value4は4と余計なコピー無しに直接読み書きできる

byte[]からclassの場合はFieldOffset指定して各フィールドを4バイト後ろにづらないと出来ないから実用は難しいけど一応可能

909 :デフォルトの名無しさん :2019/02/17(日) 15:31:55.60 ID:QIeMqQFm0.net
fixed (byte* ptr = &data[0]) *(MyStruct*)ptr;
と大体同じではあります

910 :デフォルトの名無しさん :2019/02/17(日) 15:40:47.44 ID:QIeMqQFm0.net
やっぱりこういうことやりたければC++に池ってことなのでしょうか
記憶力悪いのでVSがC#ほど助けてくれないC++に行くのは億劫なため質問させてもらいました

911 :デフォルトの名無しさん :2019/02/17(日) 16:16:49.38 ID:rf6p5Xt1a.net
Span使え

912 :デフォルトの名無しさん :2019/02/17(日) 16:27:59.23 ID:tKx1WgvG0.net
byte[]も参照型だからね、オブジェクトヘッダが付いてなければ扱えない
Span<T>でなければ、具体的なシナリオにも依るけど元からbyte[]で作って
TypeHandleとlengthのsizeof(IntPtr)*2分ずらした所を使い回す方が賢明
結局fiexdと一緒な訳だが、P/Invokeならbyte[]渡してもゼロコピーの筈だし

abstract class Union<T> where T : struct {
internal readonly IntPtr length;
public T Value;
}
みたいなオレオレ実装をILキャストした事もあったな…後はSafeBufferとか

913 :デフォルトの名無しさん :2019/02/21(木) 12:35:31.38 ID:78/oBfjca.net
self containedって完全に依存なしになるわけじゃないのね
alpine用にself containedでビルドしても動かなかった
libstdc++とか色々インストールしたら動いたけどさ
dotnetコマンド同梱と比較してコンテナサイズも殆ど変わらないし意味あるのかなこれ

914 :デフォルトの名無しさん :2019/02/21(木) 12:44:14.85 ID:IWeqLQBdd.net
>>913
おばか

915 :デフォルトの名無しさん :2019/02/21(木) 14:33:57.39 ID:XSMrGlqdp.net
SCDは.NETのランタイムを別途インストールじゃなくて同梱するってだけの話だしね
公式ドキュメントにも注釈あるけどLinuxは仕様上完全に断ち切るのは難しいんじゃない?
Windowsだと同梱のファイルだけでそのまま動くけど

916 :デフォルトの名無しさん :2019/02/21(木) 17:41:05.62 ID:DKuxuLxMa.net
>>915
Windows配布用と割り切った方がいいのかもしれない
Linuxだと管理下のサーバーかコンテナが多いからSCに拘る必要もない

917 :デフォルトの名無しさん :2019/02/21(木) 18:56:24.09 ID:IWeqLQBdd.net
最近のバッチはみんなSCDにしてる
らくちんらくちん

918 :デフォルトの名無しさん :2019/02/21(木) 19:03:47.82 ID:DKuxuLxMa.net
Goのように1バイナリにはならんものかね

919 :デフォルトの名無しさん :2019/02/21(木) 19:11:19.09 ID:IWeqLQBdd.net
>>918
https://github.com/dotnet/designs/pull/52

920 :デフォルトの名無しさん :2019/02/26(火) 16:27:59.06 ID:jgGxVc0K0.net
ちょくちょくポインタ代替機能についての質問があるけどさ
どんな用途でポインタを使いたいのかわかんないけど、大抵の場合はストリームで代用できるんじゃないのかな

921 :デフォルトの名無しさん :2019/02/26(火) 19:45:51.64 ID:KXA/2sKca.net
ID3タグとかバイナリ使うにゃ要るだろ

922 :デフォルトの名無しさん :2019/02/26(火) 22:52:44.40 ID:cz3vAcnh0.net
>>921
バイナリデータもストリームで扱える

923 :デフォルトの名無しさん :2019/02/26(火) 23:01:06.66 ID:w0dNr8TE0.net
バイナリ弄るならSpanでよくね?

924 :デフォルトの名無しさん :2019/02/27(水) 22:56:28.74 ID:0yfFFlZD0.net
ポインタなんかアンマネージとのやり取りとBitmapdataでしか使ったことないな
アンマネージとのやり取りだとrefとかoutにしとけばあとは何も考えなくていいから助かる

925 :デフォルトの名無しさん :2019/03/02(土) 10:07:34.38 ID:yMVoU8j+0.net
「変数aが1,4,5,7のいずれかである場合」
という論理式を書く場合
 (a==1) || (a==4) || (a==5) || (a==7)
とswitch文以外でもっと手っ取り早く書く方法ありますか?

926 :デフォルトの名無しさん :2019/03/02(土) 10:20:00.75 ID:Ud+LwFnR0.net
>>925
その表現が一番端的でわかりやすいのではないですか?

927 :デフォルトの名無しさん :2019/03/02(土) 10:21:50.56 ID:Vr07loEY0.net
>>925
()いらない

928 :デフォルトの名無しさん :2019/03/02(土) 11:05:26.20 ID:heck9gfNa.net
new [] {1, 4, 5, 7}.Contains(a)

929 :デフォルトの名無しさん :2019/03/02(土) 11:08:41.04 ID:Co1I1oSR0.net
>>925
その程度ならその書き方が一番わかりやすいと思うが比較対象がもっと多いとか可変にしたいとかなら
var C = new HashSet<int>(){1, 4, 5. 7};
if(C.Contains(a)){ … }
とかもある

930 :デフォルトの名無しさん :2019/03/02(土) 14:06:20.64 ID:yMVoU8j+0.net
>>926
数が少ないうちはいいんですが

>>927
カッコの上でShift+Ctrl+}すると
式部分を一発選択できるのであえてそうしてる

>>928
これがいい感じです
少しオーバーヘッドが気になりますが

931 :デフォルトの名無しさん :2019/03/02(土) 14:59:32.01 ID:AX9YyrwL0.net
SQLみたく
a IN (1,4,5,7)
てかければいいなとおもうが、aが右側になっちゃうのが若干違和感

932 :デフォルトの名無しさん :2019/03/02(土) 15:04:48.62 ID:Nsc0DUxH0.net
拡張メソッド作れば解決

933 :デフォルトの名無しさん :2019/03/02(土) 19:46:04.84 ID:5yoALKCSa.net
>>929以上の書き方ねーべ
オーバーヘッドなんぞ無きに等しい

934 :デフォルトの名無しさん :2019/03/02(土) 20:18:35.52 ID:zHCAEP8E0.net
>>930
HashSetやDictionaryは要素の数に左右されない方法でアクセスを行うから
含まれてるか否かといったような検索用途に限定すれば1個だろうが1万個だろうが常に高速にアクセス出来る
Listや配列は要素数に比例してアクセス時間かかるようになるが

935 :デフォルトの名無しさん :2019/03/02(土) 21:00:42.79 ID:RzDDiNewd.net
なぜ要素数が増えることがある
という大前提を最初の質問時に明記しないのか

936 :デフォルトの名無しさん :2019/03/02(土) 22:03:38.03 ID:CQ1ng92ga.net
>>928
これ、new[]の部分を()で括らなくていいのは何か直感に反するけど、
newもnew[]もドット演算子と同じ優先順位なのかw

キャスト演算子も同じ扱いにしてくれたらよかったのに

937 :デフォルトの名無しさん :2019/03/03(日) 01:24:26.71 ID:5kU0Dorz0.net
>>934
もとの要素がどこにあるかよくわからんけどな
HashSet作成して要素セットするオーバーヘッドがあるだろう
格納時にハッシュ値計算するから比較のコストが低いわけで、その分格納にコストがかかるんだぜ

938 :デフォルトの名無しさん :2019/03/03(日) 02:51:31.92 ID:0iBtFMi0a.net
使い捨てなら配列のほうが安そうな気はするが
それが差となって現れるようなユースケースとも思えんしなあ

939 :デフォルトの名無しさん :2019/03/03(日) 08:04:01.95 ID:1vB8VE1Z0.net
また質問者無視してる

940 :デフォルトの名無しさん :2019/03/03(日) 09:05:10.09 ID:wNoJ2Bbs0.net
質問者ってそんなに偉いの?
そいつの質問に常に合致した話題じゃなきゃダメなの?
ひとつの質問があって、それを機会に派生してもいいし、あとは自由に意見しあえってもいい

どんだけ構ってほしいんだ

941 :デフォルトの名無しさん :2019/03/03(日) 09:06:48.39 ID:467OkvF30.net
気にしてるの君じゃん
自由でいいと思うなら
かってにやってりゃいいじゃん
どんなけかまってほしいの?

942 :デフォルトの名無しさん :2019/03/03(日) 09:27:17.06 ID:qK6tlWl9a.net
ROM専からすると多少横道にそれてもいろんな手法を見れるほうが面白い
正直これくらいの質問なら好きにしろって感じだろ

943 :デフォルトの名無しさん :2019/03/03(日) 10:44:42.90 ID:wOo332Lk0.net
>>937
だから検索用途ならって書いた訳だが
if ((a==1) || (a==4) || (a==5) || (a==7))って書けるってことはAddは頻繁に行わないと受け取ったわ

944 :デフォルトの名無しさん :2019/03/03(日) 12:55:52.71 ID:3ZaOSZpTa.net
述語の部分が、

(1) 全要素を常に == で評価
(2) 全要素を同じ演算子で評価するが、==以外の演算子も使われる場合がある
(3) 要素ごとに個別の評価方法

で最適な答えが変わりそうなんでその辺ははっきりした方がよかったかもね。
質問者は
(a==1) || (a==4) || (a==5) || (a==7)
の代替案を聞いてるんだから普通に考えれば要素数はそんなに多くないはずで
パフォーマンス云々は風呂敷広げすぎだろうw

945 :デフォルトの名無しさん :2019/03/03(日) 13:55:56.58 ID:Nfj27eon0.net
議論の途中で申し訳ないのですが
例えば独自クラスで、こんなのがある。

独自クラス{
string name {get; set;}
decimal num1 {get; set;}
decimal num2 {get; set;}


というのがあって、グリッドビューにList〈独自クラス〉をデータソースとして渡して表示させたいのですが
numは3,4,と増える可能性があります。(型はすべて同じ)
この場合にソースコードをメンテナンスすることなくnumの増減に対応するにはどのようにすれば良いでしょうか?

946 :デフォルトの名無しさん :2019/03/03(日) 14:46:12.80 ID:NjSnZzWN0.net
decimal[] num {get; set;}
とか、
Dictionary<int,decimal> num { get; set; }
じゃダメなの?
なんか設計レベルで問題がありそうな気もするけど。

947 :デフォルトの名無しさん :2019/03/03(日) 15:03:54.49 ID:EUJr/Yte0.net
>>945
配列なりListなり使えばいいだけじゃねーの?

948 :デフォルトの名無しさん :2019/03/03(日) 16:04:38.55 ID:lbgm80aQ0.net
固定値でIFするのは好きじゃないな。
ソースの冒頭で定数を定義したい。

949 :デフォルトの名無しさん :2019/03/03(日) 16:50:33.82 ID:fEIk0m7q0.net
>>945
列が可変になるのならデータテーブル使うのが楽だと思う。クラスでやるとしたらexpandoで作るもなくはないと思うけど、それなら上にある通りDictionaryの方がシンプルではないかと。

950 :デフォルトの名無しさん :2019/03/03(日) 21:37:48.24 ID:5kU0Dorz0.net
>>944
質問者がオーバーヘッド気になるとか発言してるので、パフォーマンスを考慮することに意味はあるんじゃね

まあ、ずらずらと手書き出来る程度の要素数ならどれ使っても大差ないって言っとくべきではあるかもしれんが

951 :デフォルトの名無しさん :2019/03/05(火) 02:59:42.60 ID:01ls3eLR0.net
C#はセキュリティー的に問題があるので使わないほうがいい。

952 :デフォルトの名無しさん :2019/03/05(火) 03:03:58.87 ID:uKTTdpNO0.net
>>951
詳しく

953 :デフォルトの名無しさん :2019/03/05(火) 04:19:27.01 ID:6CrjVVG40.net
お前何回も見てるから詳しくしなくていい

954 :デフォルトの名無しさん :2019/03/05(火) 08:33:58.12 ID:Q/LSKwqY0.net
>>953
詳しく

955 :デフォルトの名無しさん :2019/03/05(火) 12:55:11.87 ID:xG/V/FM40.net
一発でソースコード復元されるからか?
それを言ったらJavaも同じだから泥アプリとか簡単に解析出来るけど

956 :デフォルトの名無しさん :2019/03/05(火) 15:29:31.29 ID:zDemJk6G0.net
それはMSも認識してるしフリーの難読化ツールが何個も出てるんやで

難読化が必要な理由 | Microsoft Docs https://docs.microsoft.com/ja-jp/previous-versions/visualstudio/visual-studio-2008/ms227271(v=vs.90)

957 :デフォルトの名無しさん :2019/03/05(火) 20:24:10.57 ID:X7v05Ly8M.net
うちのソースは普通に難読だけどな

958 :デフォルトの名無しさん :2019/03/05(火) 20:50:38.72 ID:phKvM6KvM.net
おれのソースコードはデフォで難読だから余裕

959 :デフォルトの名無しさん :2019/03/07(木) 00:13:41.81 ID:30anmeL+0.net
難読化しないとってほどのソースコードなんてそんなに無いような気がするけどな…
そもそもOSSが当たり前みたいなこんな時代に

960 :デフォルトの名無しさん :2019/03/07(木) 01:10:43.27 ID:tnYmqFtJ0.net
>>959
見せられない処理はAPIの向こう側だしね

961 :デフォルトの名無しさん :2019/03/07(木) 19:34:45.84 ID:Kf1DGo5Q0.net
ゲームは改造対策に難読化したほうが良さげ

962 :デフォルトの名無しさん :2019/03/08(金) 13:12:26.41 ID:5Js7CVOV0.net
オリジナルソースがスパゲッティでも
ILSpyなんかを通すとオリジナルより見やすく逆コンパイルしてくれるからな。

963 :デフォルトの名無しさん :2019/03/08(金) 14:21:31.67 ID:p3uWfhXt0.net
そんなのあるんだ?ありがたいな。スパゲティにはほとほと手を焼いてたんだ。きれいにしてくれるなら使ってみようかなw

964 :デフォルトの名無しさん :2019/03/08(金) 18:09:25.36 ID:XK/LB6aKd.net
メソッド単位は変わらないからプライベートやグローバル使いまくりのスパゲティはどうにもならないけどね

965 :デフォルトの名無しさん :2019/03/08(金) 19:36:48.59 ID:W3YxLksd0.net
制御フロー難読化をやるとさらに汚くしてくれるからオススメ

966 :デフォルトの名無しさん :2019/03/08(金) 20:13:44.24 ID:S6VEx3Fw0.net
メソッドのローカル変数をきれいに整頓してくれるILSpy△
そろそろここも終わるけど
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
でいいよね。隔離スレをわざわざ新しく立てる必要もないし

967 :デフォルトの名無しさん :2019/03/14(木) 19:31:23.01 ID:uF+nNtm+0.net
ライブラリレベルのオーバーヘッドを気にするのは止めましょう
ガベージコレクションが前提の言語を使ってる以上無駄な努力に終わります
性能絶対重視なら最初からCやASMで書いた方が良いし
よほどのスパーハカーでもない限りそんな努力が報われるほどの性能差にならないと思われます

968 :デフォルトの名無しさん :2019/03/14(木) 21:34:22.29 ID:DpwzO91B0.net
ASM?
コンパイラに勝てると思ってるのか?

969 : :2019/03/14(木) 21:49:31.03 ID:NTAm4EVS0.net
>>968
asm の教科書を書いていますが、「そのお題、asm で書く理由がない…」という深刻な問題に直面しています
asm で書くのに適したお題は何かありませんか?

970 :デフォルトの名無しさん :2019/03/14(木) 21:52:50.86 ID:SvZaCm1k0.net
最初のCコンパイラかな

971 :デフォルトの名無しさん :2019/03/14(木) 22:53:26.94 ID:fi3bTXEpa.net
x86の機械語は知らんけど、CPUを汎用計算機ではなくHWとして使いたい場合は
直接機械語で書くしかないでしょう

972 :デフォルトの名無しさん :2019/03/14(木) 22:56:05.33 ID:6sRnwOjo0.net
CPUを汎用計算機じゃなくてHWとして使いたいようなニーズなんてほとんどの人にはねえだろw

973 :デフォルトの名無しさん :2019/03/14(木) 22:59:30.46 ID:fi3bTXEpa.net
だからASMなんて(今となっては)ニッチな需要しかないのでは?

974 : :2019/03/14(木) 23:12:09.22 ID:NTAm4EVS0.net
>>973
その需要の一例を知りたいですね…

975 :デフォルトの名無しさん :2019/03/14(木) 23:13:00.27 ID:3EvgP48J0.net
>>969
ブート部分とかかな
I/O命令とかを発行する部分もあるけどこっちはインラインアセンブラでもいいかな

976 :デフォルトの名無しさん :2019/03/14(木) 23:43:27.63 ID:fi3bTXEpa.net
>>974
必要を無視すればBCD演算とか。
最終的にBCD演算命令に翻訳されるようなコードをC#では(Cでも)書けないはず。

まあx86ならマルチメディア系の命令とかが王道なんだろうけどね知らんけど。

977 :デフォルトの名無しさん :2019/03/14(木) 23:48:39.57 ID:nlDJyEEg0.net
ニッチな事には変わりないけど、
https://ufcpp.net/blog/2018/12/hdintrinsic/
hardware intrinsicとか入ってくるし

978 :デフォルトの名無しさん :2019/03/15(金) 20:54:11.25 ID:lWIPCB/k0.net
20年ぐらい前の1クロックが今より数十倍以上高価だった頃なら、
ASMによる人力高速化も(コスト的に見合うという点で)意味があった

Cコードで表現されてない知識も使ってちっちゃな関数でも結構簡単に数十クロック程度は高速化できた
Cコードで表現されてない部分を使えば、今もやろうとすれば高速化はできると思う(コストに見合わないだけで)
(変数aとbは実はいつも a<b なのでこのニーモニックが使えるとか、
ここの条件判定文は実は別の変数を計算したときのレジスタのフラグと同じ意味なので計算しなおす必要はないとか)

>>977 の話題に近いけど、
今ならASMの意味があるのはJITまわりとかかな?

979 :デフォルトの名無しさん :2019/03/15(金) 21:48:50.55 ID:D5NVJqkY0.net
コンパイラはパイプラインでデータハザードが起きない様に計算して命令の組み替えしたりする。
人間がそこまでできるかな?
オレは20年ぐらい前にmemcpyを高速化するためにアセンブラで組んだ。
今思うとCで組んでコンパイラに最適化させるべきだったかもね。
若気の至りだ。

980 :デフォルトの名無しさん :2019/03/16(土) 00:00:03.09 ID:6P+M3e6E0.net
asmはコンピュータの仕組みを理解するにはうってつけの題材では有るね
最新の特殊命令なんか不要だが、68Kなんか最高の素材だと思うわ

981 :デフォルトの名無しさん :2019/03/16(土) 00:15:39.88 ID:sQCNGdE30.net
ERMSBなんかを考えるとコンパイラも小手先なんかね
実行ハードでスケールするか、安定的な最適化か
汎用性を考えれば普通は後者になるだろうけど

というかC#ならCILレベルに留めるべきではねか

982 :デフォルトの名無しさん :2019/03/16(土) 05:39:50.41 ID:lafVI2fNM.net
WASMを最適化してくれ

983 :デフォルトの名無しさん :2019/03/16(土) 14:26:07.02 ID:gcoRXnnM0.net
今やIoT用でもメモリMBクラスだろ
アセンブラでハック必要な用途なんてないだろな

984 :デフォルトの名無しさん :2019/03/16(土) 15:56:32.11 ID:zOgp3uDK0.net
>>982
wasmになる前のLLVMの段階で既に最適化が出来る。
あと、詳しくは分からないが、wasmになった後の最適化も、
Emscriptein の opt.exe で一応はできるらしい。
但し、asm.jsとの「グルー」が複雑に絡んでいるので、
何をやっているかを理解するのはかなり難しく、
wasmで最適化しているのか、asm.jsで最適化しているのかは
忘れてしまった。

985 :デフォルトの名無しさん :2019/03/16(土) 19:51:51.79 ID:Ox1b9ZEv0.net
スレを間違えたかと思っただろ

986 :デフォルトの名無しさん :2019/03/16(土) 20:27:45.17 ID:0AnVFDDg0.net
スレ終わりなんだから内容気にせず埋めてしまえwここ即死判定もないし
GetFilesやGetDirectoriesのようなメソッドでエクスプローラーと同じ順に格納してくれるメソッドが欲しい
ソートし直すのたまに忘れてしまう

987 :デフォルトの名無しさん :2019/03/16(土) 21:07:46.17 ID:d1qKciPD0.net
>>986
自分でユーティリティライブラリ作っとけば

988 :デフォルトの名無しさん :2019/03/16(土) 21:16:16.11 ID:LVoOn4ja0.net
>>986
こういうことじゃなくて?
var files = Directory.GetFiles(@"C:\hoge").OrderBy(name => name).ToArray();

989 :デフォルトの名無しさん :2019/03/16(土) 21:24:01.46 ID:m10rap++a.net
>>988
そんな単純な話じゃないはず
https://wiki.dobon.net/index.php?.NET%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%B8%A6%B5%E6%2F111

990 :デフォルトの名無しさん :2019/03/16(土) 21:28:11.62 ID:aNdxzMMr0.net
エクスプローラーと同じ順って今のエクスプローラーにどれだけソート項目があるか知ってんのか・・・

991 :デフォルトの名無しさん :2019/03/16(土) 21:28:35.53 ID:fhPcOkRld.net
>>989
なるほど

992 :デフォルトの名無しさん :2019/03/16(土) 22:01:49.01 ID:wgxWGDdm0.net
IEEEでまだ規格化されてない多ビット長の四則演算や、超コンパクトに処理を書く方法とか

993 :デフォルトの名無しさん :2019/03/17(日) 07:10:24.22 ID:WBoQCy0zM.net
>>990
普通の頭持ってりゃ名前のソートであることぐらいはわかりそうなもんだけどなw

994 :デフォルトの名無しさん :2019/03/20(水) 07:42:02.03 ID:74ozQqG6a.net
Visual Studioって2015と2017両方いれて、2015だけ綺麗にアンスコできる?

995 :デフォルトの名無しさん :2019/03/20(水) 07:54:36.58 ID:LAIwbd+70.net
>>994
単体で入れても綺麗には削除できんぞ

996 :デフォルトの名無しさん :2019/03/20(水) 09:19:38.34 ID:W/HUsmxnM.net
ワロタ

997 :デフォルトの名無しさん :2019/03/20(水) 12:21:41.32 ID:NDw+q9p/a.net
>>995
ありがとう
そ、それは置いといて(笑)
どちらか片方だけアンスコしたときにもう片方に必要なもんを削除されたりはしない?

998 :デフォルトの名無しさん :2019/03/20(水) 12:41:43.72 ID:JR1ztFlDa.net
VSに限らず明らかなNGは後から古いバージョンをインストールする行為だけのはず
アンインストールに関しては「意図としては」大丈夫なように作ってあるはず。

やってみたら?
最悪新しい方の修復インストールかOSの復元機能で何とかなるでしょ

999 :デフォルトの名無しさん :2019/03/20(水) 14:05:02.42 ID:vc7KPojzd.net
試してみて欲しい
俺のPCにもVisual Studio 2010から全バージョンインストールされてるから参考にする

1000 :デフォルトの名無しさん :2019/03/20(水) 18:48:25.28 ID:jN76oFxX0.net
2015だけ削除したいって何がしたいんだろ
C#使う分には複数バージョンあって困ることないし

1001 :デフォルトの名無しさん :2019/03/20(水) 18:53:06.53 ID:CvIVS+n40.net
>>1000
使わないものを入れておいてもストレージ占有するだけ無駄じゃん
普通にある要求だと思うけど

1002 :デフォルトの名無しさん :2019/03/20(水) 18:54:52.24 ID:jJ3kq/hZ0.net
2015の後に2017入れて2015アンインストールしたけど問題なかった
そのあとふと2015入れてみたら俺環だろうけど2015でビルド出来なくなった。2017の方は問題なし
そして問題のあった2015を再びアンインストールしたけど2017でずっと問題なし
>>997
2017だけ使う分には問題ないはず

1003 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1003
269 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★