X



C#, C♯, C#相談室 Part93©2ch.net
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん 転載ダメ©2ch.net (ワッチョイ 1e06-m8Mb)
垢版 |
2017/04/22(土) 08:52:00.93ID:iVvswOrb0
■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
0002デフォルトの名無しさん (ワッチョイ de35-HDOw)
垢版 |
2017/04/22(土) 10:57:42.55ID:g8ZT1khs0
■過去スレ
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
0004デフォルトの名無しさん (ワッチョイ 7ff7-/JtG)
垢版 |
2017/04/22(土) 14:55:56.60ID:c4VI05+R0
おつかれ
キチガイの人(山口人生)は、複数回線もっていそうだからどこまで効果するかは分からんけれど
何もしないよりマシだね、今後もワッチョイ有りで行こう。
死ねばいいのに・・・・
0007デフォルトの名無しさん (ワッチョイ 7ff7-/JtG)
垢版 |
2017/04/22(土) 16:06:32.09ID:c4VI05+R0
>>5
ググッてみてば分かるw
東大出でイリノイ大学で不完全性定理で有名なゲーデルの弟子として著名な
竹内外史先生の弟子になってPh.Dを取るも、神奈川大学で万年講師、研究室の壁を蹴って騒音出していたらクビになってしまったヤツwww
経歴だけ見るとスーパーエリートwwww
学歴荒らしがあるところに山口人生あり、酷い学歴厨の60台後半じぃさん
実家はお金持ち、もう親は鬼籍かな?ビル持っていて資産が一億切っているとか、絶対ヤバそうw
P=NPを主張しているが誰にも相手にされず、学会では芸人扱いw
0011デフォルトの名無しさん (ワッチョイ 7ff7-/JtG)
垢版 |
2017/04/22(土) 19:41:05.45ID:c4VI05+R0
張り付き方が異常、現役じゃ不可能
発言が山口人生と似ているし話が高齢者臭い、中年ですらない
Delphiを使っていて最近C#に移ってきている
ここまでのマジキチには普通日常で出会うことは無い、希少種

そんなヤツがこの日本に何人もいてたまるかwwww
0015デフォルトの名無しさん (ワッチョイ 93f7-6g+b)
垢版 |
2017/05/05(金) 16:32:19.84ID:bVbNjYk40
今日発見した衝撃の事実
なぜWindowsUpdateの時ファイルがぶっ壊れるのかというのがずっと謎だった
Application.ThreadExit イベントで書き出しスレッドの終了処理していたのだが
手動のシャットダウンだと問題なく呼ばれるのに、リブートするとThreadExitが呼ばれない
それどころか、フォアグラウンドで作成していたスレッドが強制終了させられている上
System.Threading.ThreadAbortExceptionmもSystem.Threading.ThreadInterruptedExceptionも送出されないまま
突然中断で終了しやがってた・・・
ひでぇ終了の仕方だ・・・
なんでリブートに限りこんなシーケンスで強制終了しやがるんだ、この糞が・・・
0019デフォルトの名無しさん (ワッチョイ 93f7-6g+b)
垢版 |
2017/05/05(金) 17:16:16.69ID:bVbNjYk40
>>16
セキュリティは最終的には自分のファイルが壊れないことを目的にやるわけだが
そのセキュリティ対策が破壊してくれるのであれば、本末転倒なのでそんな対策は不必要って思うわけだよ。
0020デフォルトの名無しさん (ワッチョイ 93f7-6g+b)
垢版 |
2017/05/05(金) 17:17:13.60ID:bVbNjYk40
>>18
SessionEndingイベントが来たときはもう殺された後だねw
ここでは対策出来ない。
0027(スフッ Sd52-gZQE)
垢版 |
2017/05/05(金) 20:10:07.89ID:05XvGSted
プロセスの終了確認はあるだろうか、その結果タイムアウトした時のスレッドの落とし方はものすごい強引だった気がする。
昔shutdown -s -t 01で落として確認した事ある。
0030デフォルトの名無しさん (アウアウイー Sa37-wexB)
垢版 |
2017/05/05(金) 20:30:18.07ID:A3oUashQa
いやいやデフォではプロセス強制終了なんてないよ絶対w

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

XPの時代はそんな経験したような記憶もあるけど
少なくともVista以降はないと思うよ
0031デフォルトの名無しさん (ワッチョイ 7606-7zcB)
垢版 |
2017/05/05(金) 20:34:57.11ID:3cKL/0El0
俺は趣味でやっているだけだしアップデートも任意のタイミングでしかやらないからどうでもいいが
VSの有料ライセンス買っている人がいて心配だったら直にMSに聞いた方がいいな
0032(スフッ Sd52-gZQE)
垢版 |
2017/05/05(金) 20:48:13.06ID:05XvGSted
>>28
業務アプリが走るような環境は、社内でKB単位で配布して、ログイン前に当たるようにしてると思う。
>>30
本人はプロセスじゃなくてスレッドを問題視してるのでは?
0037(スフッ Sd52-gZQE)
垢版 |
2017/05/06(土) 08:57:56.21ID:BE072L/9d
>>36
UIスレッドでメッセージボックス出しとくと、プロセスを落とす正規ルートからはずれて再現できるとか、なんか色々こねくり回したよ。
今だと仮想マシンあるから、マシンが上がってくるの待つ辛さ無いかもね。
0038デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 06:03:37.70ID:OZ9w4Yf70
ロック処理についてちょっと相談です

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

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

●そこで、言語に以下のような構文があれば理想的なのだが
ないので、それらしいヘルパを作りたい、できれば効率的な物。
lock(obj1,obj2, ... ,timeout=1000) {
 ロック成功の場合の処理
}
timeout {
 タイムアウトした場合の処理
}
0039デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 06:03:54.24ID:OZ9w4Yf70
●とりあえず簡単に考えた、しかし無駄が多そうに見える、もっと良いものが欲しい。
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 再試行;
 }
}
タイムアウト:
{
 タイムアウト処理
}
ロック成功:
0041デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 07:32:55.17ID:OZ9w4Yf70
>>40
それだとロック粒度が大きくなりすぎて逆にデッドロックの可能性を拡大してしまいますね。
0043デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 07:36:13.98ID:OZ9w4Yf70
>>42
セマフォは重いんですよねぇ
それをやるくらいなら>>39の例の方が効率的ですね。
0044デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 07:50:05.84ID:OZ9w4Yf70
>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はやはり捨てがたいものです。
0046デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 08:20:40.14ID:OZ9w4Yf70
>>45
そんな事は無いと思うんだけどな、セマフォに標準で実装されているように
これはマルチスレッドデザインパターンとしては基本になるかと。
というか教科書にある典型ですし。
ところが、Monitorにはなかったので、おや何故ない?となっている所。
せっかく高性能なのに有効活用できないのは勿体ないと。
0048デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 08:34:06.74ID:OZ9w4Yf70
>>47
分からないならレスしないでもらえますか?
流されては叶いません。
0049デフォルトの名無しさん (ワッチョイ 4bcd-yumd)
垢版 |
2017/05/25(木) 08:52:37.16ID:CNpknsWj0
>>39
みたいなことをするぐらいならSpinLockを使った自前実装で処理したほうが良いかもしれない。

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

というか、言葉遣いに気を付けたほうが良いと思うよ。
0052デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:04:40.54ID:OZ9w4Yf70
>>49
ここにいる知らなくてもレスしないと死ぬ病気にかかっている奴はどうしょうもない。初心者の上にキチガイなら死ねって感じですが。
とりあえず、スピンロックは使いたくないですね、あれはCPUタイムをすり潰しながら高速動作を確保しようとするものだから
それの主用途は、激重計算タスクを並列処理するための物であって、目的とちょっと違いますね。
あと、排他処理をちゃんと勉強すると、順序等を考えていても意味が無くて
ロックする瞬間に作業に必要になるリソースをすべて確保して、必ず抜けられるという事の方がデッドロックに対する対処としては有用です。
でも、上に書かれているように一つのオブジェクトで粒度を上げてしまったら本末転倒になります。
0053デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:05:42.97ID:OZ9w4Yf70
>>51
ちゃんとわかっている人を待っているんだから黙ってろ
0054デフォルトの名無しさん (ワッチョイ 2bd4-WXs4)
垢版 |
2017/05/25(木) 09:12:36.71ID:foQMlEN20
アイデアを募るならもっと広い視野で考えたほうがいいってことでしょ
矮小な問題に限定されすぎていて、マイクロベンチマークレベルの不毛な議論にしかならない
状況によっては工夫すればロックフリーな実装もできるかもしれないよ
0056デフォルトの名無しさん (ワッチョイ 4bcd-yumd)
垢版 |
2017/05/25(木) 09:24:19.81ID:CNpknsWj0
>>52
https://www.jpcert.or.jp/java-rules/lck07-j.html
ソースはそれっぽいものを適当に引っ張ってきた
ロックする順序は意味あると思うんだけど、、、

デッドロックが怖いってことだと思うんだけどさ
親から子へ順番守ってロックすればデッドロックしないじゃん?
0057デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:24:47.08ID:OZ9w4Yf70
>>55
世の中上には上の奴がいるんだよ、俺なんかよりはるかに知識を持っている奴はいくらでも。
お前より俺の方が知識あるが、そんな俺よりもはるかに凄いやつは山のようにいるんだ。
そろそろ、中二病みたいな全能感は捨てな
0058デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 09:32:43.15ID:OZ9w4Yf70
>>56
親子関係があれば、親についている操作ようのメソッドにロック処理をいれれば問題ないですね。
でも、今回のは完全に独立しているオブジェクト間です。
ちょっと難しいですね。
実際問題としては、順序を使う側にすべて守らせるというのは、理屈では語れても実践的ではないかもしれません。
やはり、ロック時間を短くする事が肝要であり、その為には粒度を小さくするのが基本となるかと。
汎用的なやり方としては、この方法がもっとも優れていると思います。
なので、この方法をより高パフォーマンスで実現できるヘルパーを実装して纏めて利用したい訳です。
だから、別の方法は考えていないです。Monitorを使った高速排他処理が今回の最終目標です。
0059デフォルトの名無しさん (ワッチョイ 0f75-jnQe)
垢版 |
2017/05/25(木) 11:13:36.68ID:5itOJ4P90
楽観的ロックのタイムアウトで、ロールバックするのが確実

人間には絶対にミス・バグがあるから、
デッドロックを100%、起こさないようにする事は、絶対に出来ないから
0061デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 11:39:35.31ID:OZ9w4Yf70
>>59-60
だから、もう来るなって、お前には何も聞きたいことは無いし、そんな話は聞かされたところで新たな何かには全くつながらない。
C#スレには、初心者用じゃないもう一本の匿名ゴミすれあるだろ、そっちいけよ。
分かっている人が来たときにコメントがゴミだらけになる。
0062デフォルトの名無しさん (アウアウイー Sa0f-UhbI)
垢版 |
2017/05/25(木) 12:20:12.43ID:XlAyjrlQa
たぶん質問者の方が俺よりずっと詳しそうだから釈迦に説法だと思うけど、

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

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

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

だから、ネストの内側のock(obj2) だけをタイムアウト付きのMonitor.TryEnterに置き換えれば
効率的かどうかはどうかはともかく、要件は満たせるんじゃいないの?
知らんけど
0063デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 12:28:42.96ID:OZ9w4Yf70
>>62
まさにその通りです、それが直下に書いた雑な例です。
このヘルパーを作りたいという訳です、見るからに美しくないので詳しい人の登場をお待ちしているという所です。
必要な全ロック取得に失敗したら即座に全て解放して、乱数時間まって次を伺う。
これはよくある教科書通りです。
0066デフォルトの名無しさん (ワッチョイ 4bcd-yumd)
垢版 |
2017/05/25(木) 13:51:23.71ID:CNpknsWj0
http://ideone.com/GHvgKN
勢いで書いた。
0067デフォルトの名無しさん (ワッチョイ fbf7-Ksx5)
垢版 |
2017/05/25(木) 13:59:41.85ID:OZ9w4Yf70
>>66
いいっすね、いいっすね
Thread.Sleep(100); ← ここがもうちょっとマシな待ち方になるといいんですがw
自分はインターフェイスは、IDispose使ってロック範囲を lock で書いたような雰囲気にしてます。
タイマーは、初ロック失敗の後にスタートさせて、ロック成功(大半のケース)でロスが少ないようにしてます。
なかなか素敵な感じになってくれませんw
0068デフォルトの名無しさん (ワッチョイ 1f1b-6//c)
垢版 |
2017/07/11(火) 08:22:12.16ID:MCsEtOKi0
↓のテンプレートとジェネリックの違い、にある
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/generics/differences-between-cpp-templates-and-csharp-generics
トップ項目にある
・C# ジェネリック クラスでは、ユーザー定義演算子は呼び出すことができますが、算術演算子を呼び出すことはできません。
"算術演算子を呼び出すことはできません"ってどーいう意味っすか?
算術演算子って+-*/のこと?
0071デフォルトの名無しさん (ワッチョイ 6a90-qWRz)
垢版 |
2017/07/29(土) 20:36:18.47ID:Gw88XuqA0
ジェネリックに算術演算子を使うなら、そんなに速度が要求されないんなら
(dynamic)にキャストしてからなら演算子が使える
まあこれキャッシュ付きのリフレクションだから速度は期待しないでよー
0072デフォルトの名無しさん (ワッチョイ 331b-z1u6)
垢版 |
2017/08/21(月) 18:56:43.94ID:LgNyTwHt0
C++ではテンプレートに焦点をあてた書籍はいくつかあるけど
C#でジェネリックに絞ったオススメ書物ってのはありますか?
C++のテンプレートテクニックのどれが使えないか?ってのは知りたい。
0076デフォルトの名無しさん (ワッチョイ da1b-KdCs)
垢版 |
2017/08/27(日) 02:29:03.34ID:/hywh0UG0
式テンプレートジェネリックでどー書くんだよ
0077デフォルトの名無しさん (アウアウウー Sa39-B8PL)
垢版 |
2017/10/09(月) 21:40:27.74ID:dzl0TrLma
すみません。ちょっと急いでいます。

C#でクラスを宣言する際に、
class {...} とpublic class {...}
このふたつの違いが判りません。
教えてください。
0078デフォルトの名無しさん (ワッチョイ dad2-B8PL)
垢版 |
2017/10/09(月) 21:54:29.58ID:rAF1hT8M0
お願いします。同じものですか?
0081デフォルトの名無しさん (ワッチョイ dad2-B8PL)
垢版 |
2017/10/09(月) 22:03:58.01ID:rAF1hT8M0
ありがとうごぜます。
internalですね。アセンブリ言語レベルの話のようなので
まだそこまで至ってないのでpublic, private, protectedだけ使います。
すみませんでした。
0086デフォルトの名無しさん (ワッチョイ 7d80-Wlpn)
垢版 |
2017/10/10(火) 00:40:47.02ID:pliWVB3X0
今となっては、いや初めから忘れてもいい話だったけど
ファイル単位の物理的なまとまりはモジュール(.netmodule)で
モジュールをまとめた論理的まとまりがアセンブリ(.dll/.exe)
Visual Studioが2002の初めから一貫してサポートしてないこのモジュールって単位をMSはどう使うつもりだったんだろう
0087デフォルトの名無しさん (ワッチョイ 718a-QWl5)
垢版 |
2017/10/10(火) 21:13:43.71ID:9Raz+qz10
最終的に1つのライブラリにしたいものをC#とF#で部分ごとに書き分けるとかそういう例は見た事あるけど
(ものによってはF#のほうが書きやすいとか)
実際それが必要なユーザがどれだけいるのかって話な
0088デフォルトの名無しさん (ワッチョイ b66c-XSap)
垢版 |
2017/10/10(火) 23:25:11.21ID:I+aeGBiR0
C++/CLIとC#の組み合わせがある。

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

C#とF#の組み合わせとか、ほとんど無意味に思えるが…
0090デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)
垢版 |
2017/10/18(水) 13:52:47.94ID:ufsScDVj0
event解除ってnullぶっこんでもいいのかしら?
何処見ても-=でしろってのばかりで全解除の適切なやり方載ってないんだけど
一応null代入で動いてるぽいけどちと不安
0092デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)
垢版 |
2017/10/18(水) 14:18:32.71ID:ufsScDVj0
全解除ってそれなりに需要あると思うんだが何処も扱ってない不思議
+=って内から外へ処理出しする訳だから
インスタンスが破棄されたら当然破棄されるべきなのにどうもそうなってない
nullぶっこめばGC回収されるみたいだけど正しいやり方なのかな
0094デフォルトの名無しさん (アウアウエー Sae3-FoSE)
垢版 |
2017/10/18(水) 15:34:04.84ID:jnsT8t6ma
購読側じゃなく発行側が勝手に解除ってのがちょっと...
むしろどういう場面で必要になるのか想像できないな

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

まあ、イベントというかデリゲートのマルキチャストの仕組みが分かりづらいのはわかる
0096デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)
垢版 |
2017/10/18(水) 16:11:03.50ID:ufsScDVj0
>>94
例えば非同期通信でデシリアライズ終わったらイベント投げて後は勝手に死ね、って場合
-=だと発行側で解除するのが困難でリークしちまう
最新VerC#ならTaskで後処理書けばいいけど、Unityだとつい最近まで3.5だったから
0097デフォルトの名無しさん (アウアウエー Sae3-FoSE)
垢版 |
2017/10/18(水) 16:24:45.96ID:jnsT8t6ma
>>96
俺の理解不足だったらごめん

リークするのはイベントの購読側のオブジェクトLがイベントの購読を解除しないまま
Lを参照する変数がなくなった場合で、発行側のオブジェクトPのイベントに
Lのメソッドが登録されたままPへの参照がなくなってもそれはリークにならないと思うんですが
0098デフォルトの名無しさん (ワッチョイ 0b7a-7iB9)
垢版 |
2017/10/18(水) 16:39:10.41ID:ufsScDVj0
>>97
そう思ってた時期が俺にもありました
しかし実際はリークしてOutofMemoryが出る
どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい
本当にそういう理屈かは知らんけどnullぶち込むと例外でなくなる
0100デフォルトの名無しさん (ワッチョイ 93b3-meYy)
垢版 |
2017/10/18(水) 17:46:05.16ID:GswCLlj60
>>98
>どうも購読側参照が残ってると到達可能と見られてGC回収されないぽい

登録解除してないから購読側は発行側から参照されてて回収されない
その状態で購読側が発行側を参照してるんなら発行側も回収されないよね
0101デフォルトの名無しさん (ワッチョイ 7996-lqEX)
垢版 |
2017/10/18(水) 19:19:26.31ID:j/PgXgnk0
循環参照しててもルートから到達不能なら回収されるよ
されないなら単に循環参照以外の参照が何かしら残ってるだけ

いいや解放されないね!とかいう思い込みに付き合う気はないから
口ごたえがしたければ、VSのメモリーアナライザーで
リークしているというオブジェクトの参照状態のスナップショットを撮って
ここに貼り付けてから続けるように
0103デフォルトの名無しさん (ワッチョイ 318a-SWEl)
垢版 |
2017/11/07(火) 14:20:16.62ID:7CEykIkZ0
WebBrowserコントロールを使うと、レジストリ編集しないと自動的にIE7相当になってしまうんですが、
レジストリ編集無しでIE11相当にするにはどうしたらいいでしょうか?

もしくは、dllファイル1つで済むなら、他のブラウザコンポーネントでもいいです。
0107デフォルトの名無しさん (ワッチョイ dfb3-iA8U)
垢版 |
2017/12/18(月) 07:59:20.53ID:mWvJQqvN0
#EntityFrameworkの質問ってここでよいですか?

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

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

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

毎回相対パス指定を変えるのが面倒で、かつ絶対パス指定はしたくないもので。
何か良い方法はありませんでしょうか。
0111107 (ワッチョイ dfb3-iA8U)
垢版 |
2017/12/18(月) 23:30:30.75ID:mWvJQqvN0
>>109
プロジェクトフォルダにできます。
ただ、プログラム実行時は別のパス見てるからDBないエラーになります。

>>110
あー、それいいかもです。
やってみます。
0126デフォルトの名無しさん (ワッチョイ 7b17-Ogju)
垢版 |
2018/01/08(月) 21:07:22.93ID:ff9XOb220
ILMergeについて質問です

例えば自作アプリ X.EXE に外部ライブラリ A.DLL と B.DLL を結合して X2.EXE を作ったとします
この X2.EXE を配布する場合、A.DLL と B.DLL の著作権情報を明記すれば問題ないという認識で合っていますか?
0130デフォルトの名無しさん (ワッチョイ bad2-4vN5)
垢版 |
2018/01/31(水) 23:46:33.39ID:3zSQiFnB0
ラムダ式から右辺の情報を取得する事は出来ますか?

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

ということは、ラムダ式 m => model.name から name プロパティの属性情報を取得しているのだと思うのですが、
どうやってるのかさっぱり分からず。
調べるべきキーワードだけでもいいので、ヒントをいただけませんか。
0132130 (ワッチョイ 9fd2-K3c3)
垢版 |
2018/02/02(金) 00:27:05.13ID:eoTWLp2s0
>>131
ありがとー。
軽く見てみましたが、Expression ってよく分からないですね。。
式ツリーでも、もっと調べてみます。
0134デフォルトの名無しさん (ワキゲー MM8a-/z5x)
垢版 |
2018/02/13(火) 20:22:55.89ID:ElvL/+ZbM
とりあえず一般的には
FindWindowやEnumWindowsで目的のウィンドウのウィンドウハンドルを手に入れて
SetWindowPosする
>>133のウィンドウがこれでできるかどうかはそのプログラムの作り次第
0135デフォルトの名無しさん (ワッチョイ 6eed-nHV3)
垢版 |
2018/02/13(火) 20:56:39.50ID:KbLCHvlc0
>>134
ありがとうございます
それで移動、サイズ変更できないウィンドウをどうにかできないかなと思い質問してみました
ユーザーが移動サイズ変更できないウィンドウでも強引にしてしまうプログラムがあるらしいので、どうしてるのかな?と
0138デフォルトの名無しさん (ワッチョイ f7e0-T3WU)
垢版 |
2018/02/16(金) 06:01:32.86ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0139デフォルトの名無しさん (ワッチョイ c67a-Uf7X)
垢版 |
2018/04/09(月) 14:21:53.70ID:hXBdpr6O0
厳密に言うとC#の話じゃないんだけど
TcpClientでコネクション使い回しというか
開けっ放しでデータ送り切るって出来ない?
flushしてもデータ残っててCloseしないと全部送られない
0141デフォルトの名無しさん (ワッチョイ c67a-Uf7X)
垢版 |
2018/04/09(月) 15:51:30.50ID:hXBdpr6O0
そんな複雑な話じゃないんだ
GetStream()でストリーム取ってWrite()するだろ
でもClose()しないとケツのいくばくかはいつまで経っても送られない
断続的に送りたいから、いちいちClose()してからConnect()やり直すとかしないで済む方法あるか知りたい
0144デフォルトの名無しさん (ワッチョイ ffe7-UPLz)
垢版 |
2018/04/16(月) 21:16:34.15ID:f86xegYk0
質問です。

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

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

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()は同時に実行されるという意味でしょうか?
0146デフォルトの名無しさん (ワッチョイ cf80-SL3i)
垢版 |
2018/04/16(月) 23:04:11.81ID:qlfABgAK0
マルチスレッドなんて、素人がやるものじゃない。
Ruby を作った、Matz でさえ、何十年もやっていないのに

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

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

逆に言えば、バラバラに動くスレッドの、
現在実行中のコードがわかるのなら、それは同期処理になる
0149デフォルトの名無しさん (ブーイモ MMff-C98h)
垢版 |
2018/04/17(火) 08:18:31.78ID:iJwyhGM3M
シングルスレッドだけで出来る仕事って限られてないか。通信なんか絡んだらマルチスレッド必須でしょう。私の現場は.net3.5なんでback|ground work|er使ってるよ。
0164デフォルトの名無しさん (アウアウウー Sae7-5Vj6)
垢版 |
2018/04/18(水) 14:53:40.81ID:ur62Feqwa
インストールされている証明書の読み取り、エクスポートをやりたいんだけどさ
ググるといろいろ出てきてX509とかってのを使うと良いとある
まだ実装とか全然なんだけど、この情報だけだと不安なのでだれかやったことのある人いない?

X509Cartificate.Exportはバイトデータを吐き出してそのままファイルに保存できるるっぽいけど、秘密キーを設定したいとかあったりしてモヤモヤしてる
0167デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/04(金) 20:04:32.00ID:hRV05sGM0
windowformアプリケーションで

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

ってしたいんだけど

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

のどちらがお作法的に正しいんでしょう?
0168デフォルトの名無しさん (アウアウウー Sacf-B51h)
垢版 |
2018/05/04(金) 20:12:02.30ID:h17LifXxa
データとUIを分離するとして、データ保持と計算用のクラス、formは入力のみ、表示のみって感じになるのかな
でも、まぁそんなのAでもBでもいいだろ

関係ないが解像度ぐらい自動で取得してくれると楽
0171デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/04(金) 20:22:53.75ID:hRV05sGM0
>>169
すいません。
プログラミング初めて勉強なので、なるべくへんなコーディングしないように可読性高くと考えてまして、
普通はどう描くんだろうなというところが気になって仕方ない。
public変数作りすぎると、後でどこかで変に触るとわけわからんことになるのかなと極力使わないように心がけてます。
0178デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/04(金) 22:18:10.81ID:hRV05sGM0
Form1で作成したmethod1をForm2で使用したい場合どのようにすればいいのでしょう?

Form1.method1();

だとエラーなのですが、form自体がクラスだからインスタンス生成が必要ということでしょうか?
本当に初歩的な質問ばかりですいません。
0179デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/04(金) 23:14:52.98ID:hRV05sGM0
駄目だ煮詰まってきた。

Visualstudioで新規ソリューションを作成して、既存のソリューションからフォームを追加したのですが、
フォームデザインでは新規フォームが表示されているだけ、.Designer.csを除くときちんとコードが記載されているのですが、
[デザイン]:の画面では反映されておらず、この画面でコントロールを追加などするとエラーがでてビルドできなくなります。
フォームの追加の仕方が間違ってるのかなぁ。
0182デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/05(土) 08:03:54.33ID:CBIAOUw10
>>181

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

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

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

.Designer.csを見るときちんとコードが書かれているので
[デザイン]と.Designer.csが一致していない状態になっているようです。
0184デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/05(土) 08:36:55.68ID:CBIAOUw10
地道に

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

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

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

ってやると後々まで得体のしれないエラーに悩まされるので、上の方法を推奨している方がいました。
Visual Studioかフォーム自体の持つバグなんですかね…。
0192デフォルトの名無しさん (ワッチョイ 1e9a-XJxX)
垢版 |
2018/05/05(土) 20:20:18.85ID:xedbZMvy0
>>184
情報共有する場所なんだからこういったいいかげんなこと書くのやめてほしいな
まずソースをそのまま取り込みたいのならプロジェクトに追加で何も不具合は起こらない
それでデザイナが反映されないのならDesigner.csを直接書き換え(認識できなくなるような書き換え)やっているはず
あとユーザーコントロールを内部で追加している場合は一度ビルドするとデザイナで反映される
プロジェクトでなくソリューションにソース追加しても当然何も起こらない
最初からふらっとにいけばいいのに
0196デフォルトの名無しさん (ワッチョイ 1e96-XJxX)
垢版 |
2018/05/05(土) 22:40:45.58ID:CBIAOUw10
フォームをコントロール含めて継承すると継承先でコントロールの編集ができなかったり云々
という書き込みを見たので、
そこで提案されていた新規フォーム作成して
そこにコピペとしてみて結果オーライだったのでそれで良しとしたのですが、
私の方でなにか既存のフォームを取り込むのにまずいことをしてたのかもしれません。
記憶にないけどDesigner.csを直接書き換えしたかなぁ・・・。

フォームで作成するかWPFを使うかを悩んでた時にフォームは放置されたバグが多いと警告されていたので、
単純にバグなのかと思いましたが根拠なくソフトのバグと書き込むのはまずかったですね。
失礼しました。
0200デフォルトの名無しさん (ブーイモ MMc7-80IO)
垢版 |
2018/05/06(日) 17:34:01.02ID:ZPoK8KSTM
WPFそのものの将来性はともかくとして、その技術のエッセンスが次代に引き継がれると思うんです。
今後もWinアプリを開発することになるんで、なるべく将来性と言うか潰しのきく技術に投資したいと思ってWPFにしたんだけど。
0201デフォルトの名無しさん (アウアウエー Sa82-oFLj)
垢版 |
2018/05/06(日) 17:36:34.98ID:w10wIaHya
>>199
それはないよw
継承の段数は関係なくて、単にコントロールのカスタマイズは意外と難しいってだけの話

俺も経験があるけど簡単にシステム側のバグを疑いたくなる現象にぶち当たるけど、
ほとんどの場合はプログラマの理解不足によるユーザーコード側のバグが原因
0204デフォルトの名無しさん (アウアウウー Sacf-Tk2U)
垢版 |
2018/05/06(日) 17:41:16.14ID:6XezKW2ea
>>201
いや正確にはシステムがぶっ壊してるんじゃなく
レイアウト決定だの初期化順番だので罠にはまる確率がガンと上がるって話
コントロール1種を少々カスタマイズしたくらいじゃあんまハマらんさ
0208デフォルトの名無しさん (アウアウウー Sacf-B51h)
垢版 |
2018/05/06(日) 18:17:55.59ID:JGiuZYwWa
formとwpfどっちかじゃなくて、状況に応じてどっちか使えばいい
言語だってそうだ。c#に拘らず、必要に応じてほかの言語も使えば楽になるぞ
縛りプレイとか馬鹿臭くてやってられん
0214デフォルトの名無しさん (ワッチョイ 8f9f-80IO)
垢版 |
2018/05/06(日) 19:05:20.38ID:8BI4PAGy0
なんか変なイチャモン付けてる人いるけど。
CAD作れるかとか、Formならできるの?
Windows、.net、C#でGUIアプリ作るならFormかWPFしかないじゃん。
Formは終わった技術で行き止まり、WPFは普及しなくて過渡的な技術になるかも知れないがその先につながりそうでって言ってんです。
もっと論理的に反論して欲しいです。
0216デフォルトの名無しさん (ワッチョイ 8f9f-80IO)
垢版 |
2018/05/06(日) 19:13:48.84ID:8BI4PAGy0
>>215
昔から居てもアホな書き込みすると初学者は惑わされるのよ。
自分が理解出来ない技術はみんなダメって言ってないか?
ちゃんと論理的に反論してよ。
出来ないなら駄まってろ。
0222デフォルトの名無しさん (ワッチョイ 0e33-Tk2U)
垢版 |
2018/05/06(日) 19:34:40.78ID:OZSh5wZJ0
XAMLの筋が悪い一例としてIDEサポートがHTMLにすら劣る点が上げられる
今でも時々vsごと落ちる
まあ次が出る前にWinアプリ自体がオワコンになる可能性も低くないけどな
あんたの人生だから好きにしたらいいよ
0223デフォルトの名無しさん (ワッチョイ 8f9f-80IO)
垢版 |
2018/05/06(日) 19:44:28.98ID:8BI4PAGy0
>>222
XAMLでの開発3年弱だがVS落ちた経験ないよ。
Winアプリがオワコンになるんだったら、早いとこ他の言語・環境に移行したら?
オレはWinアプリだけじゃなくタブレットとかスマホにも適用できると思ってるから、この道行くよ。
0228デフォルトの名無しさん (ワッチョイ 8f9f-80IO)
垢版 |
2018/05/06(日) 20:19:15.57ID:8BI4PAGy0
>>226
すごいな。なかなか落とせるもんじゃない。
そんなにWinの将来に悲観的なら、本当にどこかに行ってください。
間違った書き込みを堂々と恫喝的にされると初学者の道を誤らせるよ。
それって罪なことです。
このスレタイでは。
0235デフォルトの名無しさん (ワッチョイ 0e33-Tk2U)
垢版 |
2018/05/06(日) 20:46:08.35ID:OZSh5wZJ0
わかりやすく発狂してんなー
初学者どうたら言うんならもっと普及してるもん押すべきじゃあないの?
言っとくけどC#自体は他でも使われてるからなUnityとか

>>229
毎度再現するんでもないからなー
Formでは一回も落ちたことないからXAML関係が比較的不安定なのはそうじゃないの
0243デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/11(金) 22:56:53.52ID:oqUyZvi20
フォームアプリケーションで

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

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

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

独学でコーディングしているので、お仕事でプログラミングされている方のご意見を伺いたいです。
0244デフォルトの名無しさん (ワッチョイ 2565-5o/y)
垢版 |
2018/05/11(金) 23:05:04.79ID:KxM4SNOx0
>>243
Aが入出力と, モデルのデータ保持という3役を担っているのが良くない。
出力が本業なので可能ならばそれに特化するが, 差し当たってはデータ保持を分離して別クラス(モデル)に切り出す
0245デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 08:19:23.20ID:RvuVG0qm0
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行近くになっているのが可読性低下の原因かと思います。
0246デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 08:19:38.98ID:RvuVG0qm0
Bの別のクラスを作って分離させたいんだけどBからAのインスタンス生成しているので、
BAの画面処理に基づいた1234はすべてBに入れることになってるんですよね。

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

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

チームでプログラミングされているプロの方の意見をお伺いできればと思います。
(長文本当に申し訳ありません)
0248デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 09:11:24.66ID:RvuVG0qm0
>>247
私の説明か理解が悪いのでしょうか?

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

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

コード全部見せないで質問すること自体に無理があるのかもしれませんね。
すいません。
0249デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 09:18:34.84ID:RvuVG0qm0
たぶん端的にこう質問すればよかったのかと思います。

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

こういうコードってチームで作業してるプロから見て許容できる範囲でしょうか?
処理が多少冗長になってもメンバ変数を少なくして、メソッド内でグローバル変数として定義するべきでしょうか?
0250デフォルトの名無しさん (アウアウウー Sa89-5o/y)
垢版 |
2018/05/12(土) 09:19:07.30ID:vhGL8v7ea
>>248
Aを入出力専門のAViewとデータ保持専門のDataHolderに分離
Bをゲーム画面描画専門のBViewと実際の内部処理を行うGameModel, 各種書き出しを行うWriterに分離

Windowのインスタンスの内部で色々な処理を行うのがそもそも間違ってる
描画と変更の通知以外何もさせるな
0251デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 10:01:27.82ID:RvuVG0qm0
>>250
ありがとうございます。
理解できました。

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

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

分かりやすい。
これがオブジェクト指向ってやつか・・・。
0252デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 10:07:34.76ID:RvuVG0qm0
自分は成り行きでBの機能の一部をCに放り込んでしまったから、
Bを処理するDも必要に迫られてCに入れざるを得なくなってたんですね。

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

こういうのって本では学びづらいですね。
勉強になりました。
ありがとうございます。
0255デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 11:23:13.92ID:RvuVG0qm0
MVCは初耳で今ググって勉強しました。

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

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

こういうのが学べるいい本があったらいいなぁ。
0256デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 11:32:37.31ID:RvuVG0qm0
dataHolderクラスってABCDどれからもアクセスすることになるんですが、
パブリックにして、どこからでも読み書きできるようにしていいんでしょうか?

バグの温床になるからダメ?
0257デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 11:36:18.82ID:RvuVG0qm0
マイクロソフトのホームページだとPublicにしてますね。

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

うーん・・・。
世の中そんなもんなのか?
0258デフォルトの名無しさん (アウアウウー Sa89-5o/y)
垢版 |
2018/05/12(土) 11:43:38.40ID:vhGL8v7ea
>>256
お好きに
結局は書きやすさと安全性のトレードオフ

ガッチガチに書くならgetterだけのImmutableオブジェクトを表すインターフェイスとそれを実装する具体クラスに分離してViewにはインターフェイスだけ教えるとか(あまりやらない)
作る人数とか規模によってどの程度強制するか変わってくるから程よくやるのが重要, 一貫性は重要だが徹底しすぎるとしんどい
0259デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 11:57:15.21ID:RvuVG0qm0
>>258
immutableなんてものがあるんですね。
ごく一部の変数以外はimmutableで事足りるから、immutable設定にします。
publicでdataHolderクラス作ってメンバ変数はすべてimmutableにすれば、

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

全部満たせますね。
なんて便利なんだ…。( ゚д゚)
0260デフォルトの名無しさん (アウアウウー Sa89-5o/y)
垢版 |
2018/05/12(土) 12:02:17.65ID:vhGL8v7ea
>>259
残念ながらC#では上手くImmutableに出来ない(出来るかもしれないが最近やってないので詳しい人教えて)
TypeScriptとかなら既存の型にReadonlyを再帰的に付けた型が簡単に作れるんだけどなぁ
0263デフォルトの名無しさん (ササクッテロラ Sp21-4FyP)
垢版 |
2018/05/12(土) 12:12:09.32ID:F4kLnVK3p
そそ、MVCやMVPってのは、オンラインサービスみたいにデータ管理と画面操作が隔離してる様なコンピュータサービスでなら適してるけど、スマホとかパソコンの中で完結した操作性重視のアプリの設計には適して無いんだよな。
0265デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 12:57:15.57ID:RvuVG0qm0
残念・・・

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

みたいに定数をフォームから取得できればありがたいんだけどなぁ。
そういう需要ってあんまりないんだろうか。
0272デフォルトの名無しさん (ブーイモ MM19-obfm)
垢版 |
2018/05/12(土) 17:32:27.30ID:XEHHkDisM
初心者が勉強のためにゲームプログラムを作るのにMVCなんてナンセンスです。
先ず、何でもいいから動くものを作る。プログラムスタイルはそれからいろんなな本で学べばいい。
0274デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 18:06:22.88ID:RvuVG0qm0
頭の中がどぁーっとなってきました。
とりあえずゲーム本体は完成したんですが、一部改変しようとしたらかなりの機能がすべてゲーム画面フォームにくっついてるので読みづらいことこの上ないなと。
データ部分を別構造にしたかったんですが、ほぼ句見直しに近い改変であたまがわやになってます。
0277デフォルトの名無しさん (ワッチョイ 25b5-4FyP)
垢版 |
2018/05/12(土) 18:16:14.33ID:XIsYMxrj0
動くコード書ける奴の方が神だからな。
設計どうのこうのなんて、動くコード書ける様になってから理解すれば良い。
何なら作った後で反省的を挙げながらここはこう言う構造の方が良かったんじゃね?
なんてやるのが一番設計の知識ぐ身につく。
0278デフォルトの名無しさん (ブーイモ MM19-obfm)
垢版 |
2018/05/12(土) 18:23:40.04ID:XEHHkDisM
自分のプログラムが汚いわかりにくいと思ったのなら、あなたはセンスがあるんだよ。
汚いプログラム書いて平気なプロもいるからね。
後はいろんなサンプルプログラムを検索して読んだらいい。あっ、これがいいとか気付きがあると思う。
0280デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 18:31:48.49ID:RvuVG0qm0
あれ、根本的なことが分かってないことが分かりました。

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

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

CからDにdataHolder1の参照を渡すってこと??
0284デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 18:37:29.64ID:RvuVG0qm0
>>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の参照を渡すってこと??
0285デフォルトの名無しさん (アウアウウー Sa89-9tI+)
垢版 |
2018/05/12(土) 20:01:02.99ID:9rdAnFG4a
まあなんだよ
今の君に必要なのは鉛筆と紙だ
なんたらチャートのお作法なんぞ知らんでいいから、まずは機能を書き出して丸で囲め
それからどの機能が何処から必要になるかを線引っ張って繋げ
めちゃくちゃ線がごちゃごちゃするだろう?
それをなるべく少ない線で済むように書き直すんだ何回でも
0287デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/12(土) 23:36:15.36ID:RvuVG0qm0
Aフォームのメンバ変数、メソッドを
BCフォームからも使用できるようするにはどうすればいいのでしょう。

Bだけで使用するならB内でAのインスタンス生成→ShowでAフォームを表示させればいいと思うのですが、
Cフォームでも使用するとなると、Cフォームで新たにAのインスタンスを生成するわけにもいかないですよね。
0289デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/13(日) 11:04:57.10ID:ySggkKZM0
>>288
すいません。
ググってもよくわからなかったので質問したのですが安易に人に頼りすぎてましたね。

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

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

と色々方法あるんですね。インスタンスの参照を渡す方法が分かってなかったから一つのクラスに一杯盛り込むことになってたんだと理解できました。
0290デフォルトの名無しさん (ワッチョイ cb96-k37M)
垢版 |
2018/05/13(日) 11:06:37.40ID:ySggkKZM0
こういうのってCやってれば常識なんですね。
どこからC#でどこまでCの質問か分からずこちらで何でも聞いていました。

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

でも、みなさんのおかげでだいぶいろいろなことを学べました。
ありがとうございます。
0291デフォルトの名無しさん (ワッチョイ 25b5-4FyP)
垢版 |
2018/05/13(日) 13:59:35.41ID:23x2pXKw0
〇〇する機能みたいにして、重要だと思う機能ほど大きく書いて相関関係を、ドラマの登場人物の関係図みたいに描いたらなんとなくクラス図の基本が出来上がる。
0293デフォルトの名無しさん (ワッチョイ 89fa-9WOx)
垢版 |
2018/05/23(水) 19:32:08.48ID:Au5e7VGg0
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』

094C5
0295デフォルトの名無しさん (ワッチョイ f103-cS+N)
垢版 |
2018/05/25(金) 23:51:50.59ID:q1degsPf0
わかりやすくする為にわけるのではない
問題が適切に表現される様に自ずとにわかれるのだ
それが本質的にわかりにくい問題であるならば
わかれた結果わかりにくいのは当然の帰結である
己の能力をわかるまで高めるしかあるまい
わかめ
0299デフォルトの名無しさん (JP 0Hcd-ftu6)
垢版 |
2018/05/28(月) 11:28:40.07ID:vRphuiRoH
ゲームくんのゲームは完成したのだろうか?
そもそもGameManagerクラスみたいなゲームを管理するクラス作ってないのが不思議
ゲーム管理クラス通して設定画面開いたり設定値を取得すればいいのに
0301デフォルトの名無しさん (ワッチョイ b1d2-Du++)
垢版 |
2018/05/29(火) 12:36:07.71ID:0Vp36Os40
C#の勉強を講習会なりでお金を払う方式でレクチャーを受けたいのですが、どういった所が良いでしょうか?
ドットインストールやプロゲートの様な既にある動画を有料で見るのではなく、
欲を言えば1対1で即座に質問できる方式が良いのですが探してみたところ見つけられず、
初心者〜中級者を対象にした評判の良い講習会の様なものがあれば教えて頂けないでしょうか
東京都の渋谷区に住んでいます
0307デフォルトの名無しさん (アウアウオー Sa63-9v30)
垢版 |
2018/05/29(火) 18:33:40.52ID:/62QaXdPa
>>301
金と時間の無駄って意見に俺も一票。

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

子供の習い事みたいにモティベーション不足を金で補うっていうのはありかもしれないけど。
0314デフォルトの名無しさん (アウアウカー Sa95-9DOT)
垢版 |
2018/05/29(火) 21:30:02.17ID:+v4yesMaa
独学でやってると自分のやり方が正しいのか確認が出来ない不安があるのはわかる
とにかくプログラムを書くこと、実務を重ねるとその不安は経験値でだんだん消えていく
とにかく経験を積むしかない
0318デフォルトの名無しさん (アウアウウー Sadd-DqgS)
垢版 |
2018/05/30(水) 11:53:56.18ID:8D7UWmqma
メンター(導師)ってリアルで言ってる人を見ると笑うけど
意識高い系ですかって
メンターは技術面より精神的な面のよりどころだな
わけわからんけどこの人は正しい導いてくれるって人って思いこむ相手

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

入門者には導師より同志が必要かな
0326デフォルトの名無しさん (スッップ Sd9a-faVr)
垢版 |
2018/05/31(木) 18:07:05.50ID:ZDpw5PAMd
引数ありのdelicateでデリゲートをnewする段階で
関数に引数渡しておくことはできますか?

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

delicateじゃなくてもそういう方法があれば教えてほしいです
0329デフォルトの名無しさん (アウアウカー Sa5d-SvXf)
垢版 |
2018/05/31(木) 20:29:05.32ID:XpaqSCj3a
>>328
普通に考えたらそうなるわな
何がいいたいんやろ
0333デフォルトの名無しさん (ワッチョイ fa23-i+D0)
垢版 |
2018/06/02(土) 01:19:12.37ID:te+Rl8LG0
もうふらっとと統合しろよ
0336デフォルトの名無しさん (ワッチョイ 7ad2-OufX)
垢版 |
2018/06/05(火) 23:17:30.29ID:vNq9k7GF0
>>335
関数ポインタ
0339デフォルトの名無しさん (アウアウエー Sa22-UB1l)
垢版 |
2018/06/06(水) 13:00:14.82ID:/mNmPD5La
>>337
「〜とは何か」って哲学論争はたぶん時間の無駄w
実際の使われ方を見て何に使えるかを理解するのがいいよ

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

デリゲートの使えない従来の言語は、コードの中にdoubleのリテラルしか書けず
doubleの変数が作れないようなものだった
0343デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/07(木) 21:34:36.55ID:uqa5AZHUa
あーこういうの出来たら便利なのにー
って思ったら調べて使えばいいよ
使わんと頭入らないし
0352デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/08(金) 07:59:48.51ID:FRxZCKgGa
メソッドを引数にして渡してあげられると、実行する側は何をするか気にしないでいいじゃない
0354デフォルトの名無しさん (スップ Sd73-x2t7)
垢版 |
2018/06/08(金) 08:30:05.85ID:V2PqzfzLd
>>351
今までの処理は極力変えたくない

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

なんでこうするかってテストするのがめんどいからとか色々
0357デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/08(金) 11:49:27.44ID:SrLrQXUUa
済まないw

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

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

っていうかこの質問者、本当は分かってて質問してる変な奴だろうね8割方w
たぶん2chの他の板によくいる、サヨクを演じて自作自演やってる頭のおかしいネトウヨと似たようなメンタルの持主なんだろうと想像
0364デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/08(金) 20:53:34.63ID:KYYD9BLCa
ごめん。ちょっと何言ってるかわかんない
0365デフォルトの名無しさん (ワッチョイ ebe8-LHz9)
垢版 |
2018/06/08(金) 21:00:06.62ID:E4qbFGXm0
結局デリゲートの非同期処理BeginInvokeを使用するってのが
従来大きな役割だったんじゃない?
でも今Taskクラスできたから必要なくなった
0367デフォルトの名無しさん (ブーイモ MM33-EqDK)
垢版 |
2018/06/09(土) 12:11:29.33ID:VOfp/P7BM
デリゲート(委譲)って名前が悪いのかな
メソッドを他に渡しておいて適宜実行してもらうから委譲ともいえるけどそれは機能の一面しか表してない
MVPの人も過去にデリゲートいらねえって言ってたけど理解力が足りてない

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

コールバックとして使えるしeventはデリゲートをもとに作られてるので基本的な使用範囲は広い
0368デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/09(土) 12:44:45.38ID:DBY1R4Jva
>>367
真面目な話、そういう衒学趣味の文系学生みたいな
文章が一番人を混乱させる。

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

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

でも重要なのは、「デリゲートとは何か」なんか分からなくてもデリゲートは使えるってこと。
「何か」なんか理解しなくていい。それを使って何が出来るかだけ理解すればいい。
0373デフォルトの名無しさん (ブーイモ MM33-EqDK)
垢版 |
2018/06/09(土) 13:40:09.88ID:VOfp/P7BM
>>368
他の言語ではメソッドもオブジェクトとして扱えるものもある
c#はメソッドはオブジェクトじゃない

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

機能的には似たようなものに見えるけど全然別物だ
0374デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 13:51:37.94ID:MhKfyDgC0
>>368
文系学生もプログラミングする時代になったって事だよ。

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

「デリゲート」は失敗作だから新言語を作る気がないのなら理解する必要はない。
あれはthis+関数ポインタで、一番近いのはC++の「メンバ関数ポインタ」だが、
無駄に「クラス」「関数ポインタ」「ラムダ」を抽象化しようとしておかしくなってる。
結局ラムダを導入してしまったし、当初の方針は間違いだと認められたことになる。
今後「デリゲート」を採用する言語はないだろうよ。
0377デフォルトの名無しさん (ブーイモ MM33-EqDK)
垢版 |
2018/06/09(土) 14:07:54.32ID:VOfp/P7BM
もともと関数がオブジェクトである言語はデリゲートを導入するメリットは少ない
c#にデリゲートが無かったらjavaの様に専用のインターフェイスを継承した無駄なクラスを作らなければならなかった

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

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

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

>>377
Javaみたいなそもそも「関数ポインタ」がなかった糞言語と比較したら駄目だよ。
Cには関数ポインタはあった。
C#はそれを「デリゲート」として拡張した。
他言語は「第一級オブジェクト」として拡張した。
今のところ、後者の方が正解っぽいだろ。
(俺自身にはイマイチ「第一級オブジェクト」である利点/必然性は見えないのだが)
0379デフォルトの名無しさん (ブーイモ MM33-EqDK)
垢版 |
2018/06/09(土) 14:24:48.97ID:VOfp/P7BM
関数がもしobjectクラスから派生したオブジェクトになるとメンバーを持てることになるんだけど
A.B().ToString()のToStringが
B()というメソッド自体に係ってるのか
B()の返した戻り値にかかってるのかがよくわからないことになる
0381デフォルトの名無しさん (アウアウウー Sad5-rZS7)
垢版 |
2018/06/09(土) 14:30:26.04ID:AO7Grx3Qa
1+2*3
こんな計算式があったときに1+2をしてから3かけて答えは9
こうはならないだろ。それは優先順位を定めてるから。(1+2)*3のようにかけば期待通りになる

それと同じで関数がオブジェクトでメンバー持ててもそれに合わせた処理の優先順位を定めればいいだけ
0382デフォルトの名無しさん (ブーイモ MM33-EqDK)
垢版 |
2018/06/09(土) 14:32:21.62ID:VOfp/P7BM
理解しないのと誤解してるのではわかっていないという点では同じだけど
理解してない場合は理解していない前提で行動できる
一方の誤解してる場合は悲惨だ
0385デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 14:36:40.18ID:MhKfyDgC0
>>382
お前は日本語を勉強しろ。

俺達は「理解しなくていい」=「完全に理解してはいないという自覚の元で使え」と言っているのであって、
それは「誤解」には繋がらない。
「誤解」ってのは、「理解してない馬鹿が理解しているつもりになっている」事を言う。
例えば、右結合と左結合を知らないお前みたいな馬鹿のことだ。
0386デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 14:39:35.51ID:MhKfyDgC0
>>384
意味不明。何を書いて欲しいのか分からん。

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

で、何をしたい場合の記述が欲しいんだ?
0388デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 14:54:44.86ID:MhKfyDgC0
>>384
エスパーすると、言いたいことは分かった。
お前は「第一級オブジェクト」も理解しておらず、「誤解」している。ちゃんと勉強しろ。

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


>>387
なら日本語を勉強しろ
> B()というメソッド自体に係ってるのか
これで何を表現しようとしたか言ってみろ。それは
> A.B.ToString()
ではないだろ。
0389デフォルトの名無しさん (ブーイモ MM33-EqDK)
垢版 |
2018/06/09(土) 15:04:32.47ID:VOfp/P7BM
>>385
誤解は悲惨
delegateを削除しろと言って削除してみたらActionもFuncも使えませんでした
eventも使えませんでした

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

>>388
> > A.B.ToString()
> ではないだろ。
いやいやそこはそのままであってるし普通にそう理解できないのか?
A.B.ToString()が正解
逆にどう勘違いしたのか聞きたい
0393デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 15:18:29.92ID:MhKfyDgC0
>>389
日本語で言うと、
> B()というメソッド自体に係ってるのか
と理解したって事だよ。

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

>>387
> クラスにフィールドとメソッドを同名にできないから区別できる
これは先見の明があったかもな。
関数を「第一級オブジェクト」に昇格させるのに文法的制約がない。
Javaに対しての利点にはなり、生き残る道かも。
0394デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 15:25:50.19ID:MhKfyDgC0
>>391
JavaScriptではオーバーライドすれば出来る。
フィールド/メソッドの区別がなく、名前だけだから。
C#的には派生クラスで「プロパティ」「を同名の「メソッド」でオーバーライドだが、
これが型チェック的に無理なのか?
しかし名前の重複を許していないのだから、今後の拡張は可能のはずだが。

JavaScriptのデタラメ文法はどうかという奴もいるが、慣れてしまうと、
型あり言語の「型が違うだけ」で色々制約されるのも相当な糞だと気づけるぞ。
型検査はエラーではなく警告に留めるべきで、
プログラマがOKすれば型が不一致でも通してくれた方がマジで楽。
一番近いのはCってことになってしまうが。
0398デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/09(土) 16:54:07.78ID:DBY1R4Jva
だからメソッドがオブジェクトかどうかなんて話はただの衒学趣味的な無益な話w
そんな話は「ではオブジェクトって何?」って不毛な議論になるだけでしょw
初心者がデリゲートを理解して使えるようになるための屁の役にも立たないよw

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

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

なまじマルチキャストなんて機能があるせいで何だかわかりづらくなってる面は否定できないと思う
0399デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 17:08:52.90ID:MhKfyDgC0
>>397
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も再評価されるかもしれん。
0405デフォルトの名無しさん (ブーイモ MMeb-OWkY)
垢版 |
2018/06/09(土) 18:48:11.73ID:0oARoVrcM
デリゲートにラムダ式にLinq大好きだ!
これ無くして生きてけない!
チームの誰も読めないから放置されて我が道を歩んでいる。
生産性と品質が高いから客には好評です。
0409デフォルトの名無しさん (ワントンキン MM53-7qxP)
垢版 |
2018/06/09(土) 20:43:00.38ID:54mp5fzVM
行列計算ライブラリ書いてるときに
おれ掛け算わからんからおれに合わせて全部足し算で実装して
おれはいまお前の案件に関わってないけど将来そのライブラリメンテするかもしれんからヨロシクな
とか言う同僚がいたらこいち頭おかしいのかなって思うじゃん
いやいや掛け算を勉強してからっていうか最低限の単位を取ってからメンテしろよってなるじゃん普通
これがLinqやλやデザインパターンになると当たり前のように底辺至上主義がまかり通る不思議な業界
0416デフォルトの名無しさん (アウアウウー Sad5-rZS7)
垢版 |
2018/06/09(土) 21:07:34.76ID:4W3gH+0Ua
そもそも書けない奴は論外として、使うなってのは同意できる
簡潔に判りやすいラムダ書いてくれりゃいいが、わざとやってんじゃねってぐらい難読化する奴いるからな
正規表現、SQ、掲示板の長文も同じだな
0417デフォルトの名無しさん (ブーイモ MMeb-OWkY)
垢版 |
2018/06/09(土) 21:12:52.02ID:0oARoVrcM
Linqに限らず最近のソフトウェア技術は高度で生産性も高くなってる。
昔も人によって生産性に差が出たが、最近だと理解出来るか出来ないか?ぐらいの圧倒的な格差だ。
理由出来ない人は辞めればいい。
生産性が飛躍的に上がってるので理解出来る奴だけで間に合うよ。
0418デフォルトの名無しさん (アウアウカー Sa2d-SmnY)
垢版 |
2018/06/09(土) 21:17:22.22ID:ekScYlKMa
自称プログラマー(趣味)ならともかく職業プログラマーでLinqすら理解出来ないやついんの?
0425デフォルトの名無しさん (スップ Sd33-YtUU)
垢版 |
2018/06/09(土) 21:35:27.62ID:ZDY9COOVd
業務でいじるレベルのコードなんて知らないものでもグーグル先生いりゃ大抵なんとかならない?
linqも初めて見たときはとっつきにくくてわかりづらかったけど使ってりゃ嫌でも覚えちゃうよ
つっても当然すべてを使いこなしてるわけじゃなくて自分に必要な範囲のみ理解してる程度
業界によってだいぶ差はありそうだけど
0429デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 22:13:44.82ID:MhKfyDgC0
>>415
イテレータの起源なら、C++(1983)は最初から持ってた。
C++のOOPはSimula発で、そっちが持ってたかは知らん。

いずれにしても、Java発の技術は存在しないぞ。
C#はLinqと、多分asyncもか?頑張ってる方だと思うが。
(あとちょっと違うがIDEのインテリセンスもC#が初のはず)
0432デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 22:41:24.00ID:MhKfyDgC0
>>425
> 自分に必要な範囲のみ理解してる程度
多分これくらいが適正で、これなら大して問題にならないんだよ。

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

Linq自体でそんなに格差が出来るはずもない。
仮に、Linq部分を関数呼び出しに変えたところで、本体のコード構造は全く変わらないだろ。
便利機能だが、その程度でしかないんだよ。
逆に言うと、制御構造の違いで勝負出来ない、
新文法が読めることしか威張れない馬鹿がそこに無駄に拘っている気がする。
0433デフォルトの名無しさん (ワッチョイ 497f-LHz9)
垢版 |
2018/06/09(土) 23:00:28.94ID:0BGOlb7W0
linq で Where と OrderBy 使ったところをチームリーダーから For と List<T>.Sort() に書き換えられたことはある。理由は「他と違うから」
他と書き方を合わせておくのが大事なのはわかるけど…
0435デフォルトの名無しさん (ワッチョイ 0b9f-SAfv)
垢版 |
2018/06/09(土) 23:45:05.02ID:v7FNkyrH0
>>433
他と違うからって理由で直すのは良くないと思うな
本来関係ないはずのクラスの間に存在しないはずの関係性を作りこんでしまう
その結果、必要ない作業や、縛りを生み出して生産性を下げることになる
俺が経験したものだと
すでに書き終えたforeachをすべてforに統一
テスト済のDAO、DTOのsnake_caseを他レイヤに合わせてCamelCaseに統一
この2つが最高にバカバカしかった
0436デフォルトの名無しさん (ワントンキン MM53-7qxP)
垢版 |
2018/06/09(土) 23:56:36.61ID:wFjp4I59M
カプセル化を知らない人が少なくないのかな
「publicメンバーはクラス間のコミュニケーション円滑化のために規約として形式化しましょう」ぐらいならまあ理解できるが
「Linqはやめてループにしてくれ」なんて内部実装の形式にまで踏み込んでくるなよな
クラススコープで違和感なければそれでいいだろ
0437デフォルトの名無しさん (ワッチョイ d19f-NuDx)
垢版 |
2018/06/09(土) 23:59:33.29ID:MhKfyDgC0
>>433
俺はC#erではないが…。

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

基本的には関数呼び出しにしてその先は隠蔽、
つまりLinq実装かFor/List/Sort実装かは上位からは見えない、ってことにすれば関係ないはずだ。
ただ、その場にベタで「何を選択しているか」が書かれている方が読みやすいことは多々あり、
Linqもその局面で使われているとは思うので、全面書き直しだと余計に読みにくくなるとも思うが。
0439デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/10(日) 00:11:20.35ID:FNJYuW1ra
>>436
どうでもいい議論だけど、一言。
カプセル化っていうのは「メソッドの中は可読性考えなくてよい」って意味じゃないよw

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

実際、筋の悪いプログラマが好む100行オーバーのメソッドに近い物になりうる
0440デフォルトの名無しさん (ワントンキン MM53-7qxP)
垢版 |
2018/06/10(日) 00:20:43.11ID:kZ6+r7gZM
>>439
どう読んだら「メソッドの中の可読性は考えなくていいよ」になるんだろ
外部の都合を内部実装にまで持ち込むな
クラス内での可読性が十分ならそれでいいだろ
って主張な
正しく動いて綺麗なコードを他のクラスの都合で書き直す
俺はこれある意味カプセル化破壊と言っていいと思う
もちろん本来の意味でのカプセル化とは違うのはわかってる
0441デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/10(日) 02:00:10.36ID:gGHljlXMa
>>440
どう読んでもそうとしか読めません
自分で自分の書いてあることが理解できないのかw

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

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

なぜなら、カプセル化とは「メソッドの中の可読性は考えなくていいよ」という意味ではないからだ
0450デフォルトの名無しさん (ワッチョイ 13e3-LHz9)
垢版 |
2018/06/10(日) 09:35:53.15ID:0WF1gq+N0
スレにも規約作って変な奴は矯正しないといかんな。
0451デフォルトの名無しさん (ワントンキン MM53-7qxP)
垢版 |
2018/06/10(日) 09:58:39.22ID:kZ6+r7gZM
変数を関数の先頭に書く
returnは1つまで
変数名の先頭に型の略字を書く
varは使ってはいけない

こういうひと昔前まで大衆が信じてたバカ規約
システム全体で統一感のあるコードを書くって規約もいずれその仲間入りするとおもう
いまはまだIT業界全体が未熟だからみんな気付いてないだけ
0452デフォルトの名無しさん (ブーイモ MMeb-OWkY)
垢版 |
2018/06/10(日) 10:22:35.79ID:YCs8n+CmM
ちょっといいですか、この関数100行超えてます。
規約違反で可読性なくなります!
レビューで積極的に発言するサル、何も知らないで自分は立派なプログラム書いてると思っている。
ちなみににLinqの方が可読性上がるよ。
Linqはやりたいことをズバッと書ける。
古いやり方だと、このforループなに?ってなる。
forループは実装手段であって目的じゃないから。
単に慣れ、新しいこと勉強したくない連中が可読性だの規約だの持ち出す。
0462デフォルトの名無しさん (ブーイモ MM15-LHz9)
垢版 |
2018/06/10(日) 18:55:50.21ID:FyF+mujLM
クエリ式を使ったのは単純なのはわかりやすいけど複雑になるとお手上げ
メソッド形式で使ったとしても逆にクエリ式のfromを二重の使ったほうがいいのにSelectManyを使ってるやつは非常に醜い
JoinやAggregateも可読性が以上に低い
0463デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/10(日) 18:58:38.79ID:0FFsGNUEa
意見は分かれると思うが、川俣大先生が連載記事で引用してた
このサンプルあたりがボーダーラインかね
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じゃなくてクエリ式の話をしてるんじゃないのかと
0465デフォルトの名無しさん (ワッチョイ 8917-LHz9)
垢版 |
2018/06/10(日) 19:22:31.41ID:0nkwjY0q0
これの事?
var queryDupNames =
  from file in fileList
  group file.FullName.Substring(charsToSkip) by file.Name into fileGroup
  where fileGroup.Count() > 1
  select fileGroup;

基礎的なものだけで構築されていて何をやっているか一目瞭然じゃん
0470デフォルトの名無しさん (ワッチョイ e12b-x2t7)
垢版 |
2018/06/10(日) 21:47:34.28ID:WVhS1nfV0
分からないなら勉強するなり聞くなりすればいいじゃんとは思うけどな
可読性あげるのは理解できるが便利な関数を規制するのはおかしいくない?
いつまでたっても個人の技術力上がらなくなるけどいいの?とは思う
0471デフォルトの名無しさん (ブーイモ MM15-LHz9)
垢版 |
2018/06/10(日) 21:54:10.88ID:FyF+mujLM
わからないって意味を誤解してるだろ

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

メソッドだとほぼ一瞬で何をやってるかわかるだろ
わざわざ行数を割いて理解に時間のかかるクエリ式を使う意味はねえよ
0478デフォルトの名無しさん (ワッチョイ 9396-DGJA)
垢版 |
2018/06/11(月) 14:37:15.67ID:dC6OTsii0
リファクタリングをリファクタ言うの非常に気持ち悪い
refactor は refactoring から派生した単語
refactor という動詞は使われだして日も浅く、まだ技術系のスラングの域でしかない

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

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

……MSのスペルチェッカで引っかかってたのか(現在は知らんが)
0485デフォルトの名無しさん (ブーイモ MM05-dEMp)
垢版 |
2018/06/12(火) 13:31:08.41ID:l5O6ZBmRM
もとの言葉がfactor、factoringで、factorは動詞としても使われているのだから、
英語圏ならrefactoringという言葉が登場した時点でrefactorという言葉も同時発生的に生まれていると思うが…
0486デフォルトの名無しさん (アウアウエー Sa23-SCrG)
垢版 |
2018/06/12(火) 14:20:48.56ID:O2DKnY7ra
どうでもいい話だけど、派生した順番はたぶん

factor(名)→ factoring → re-factoring

なんだろう。

完全に想像で何の根拠もないけど、computingが動詞のcomputeの動名詞ではない(たぶん...)
ように、factoringも動詞のfactorの動名詞ではないような気がする
0491デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:13:37.26ID:LyYtEKg40
こういうやつってC#に向いてるんだろうか
https://i.imgur.com/XbewmEQ.jpg
でもUnityとかでゲーム作りたいね思ってるのってこのタイプだろうなと思うし。
0494デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:22:01.32ID:LyYtEKg40
3DCGはうまいけどなw
0495デフォルトの名無しさん (ワッチョイ 81b3-eEtL)
垢版 |
2018/06/13(水) 17:24:47.33ID:LyYtEKg40
図面はやってたけど、なんでもアバウトで絵をかいてるんじゃないからとかボロカス言われた。
0500デフォルトの名無しさん (ワッチョイ c21b-U+xr)
垢版 |
2018/06/14(木) 12:02:14.52ID:ZrVl35qK0
自分、ブックオフで買ってきたOS無しのPCにUbuntu入れてるんですが、
Pythonとか面白いので、C#もやってみたいと思っているんですが、

Mono入れれば、書店で売ってるVisualC#の本とか出来ますか・・?
0501デフォルトの名無しさん (アウアウカー Sa69-qcd4)
垢版 |
2018/06/14(木) 12:26:43.19ID:ZNAi3suja
C#やるなら普通にWindows機でやったほうがいいと思うけど
0504500 (ワッチョイ c21b-CUAo)
垢版 |
2018/06/14(木) 17:14:29.50ID:ZrVl35qK0
>>501
どうもありがとうございます。Windows機は父親のしかありません・・。強奪してこようかな・・。父親全然使っとらん。。

>>502
本のプログラムを打ち込んでみたいです。Pythonとか面白かったのでC#も挑戦してみたいという感じです。なんかいけそうっぽい
0509デフォルトの名無しさん (ワッチョイ 2e9a-gvEZ)
垢版 |
2018/06/14(木) 18:19:58.04ID:T0JMmz9y0
>>506
猫でもわかるシリーズならそんな心配はないな!
>>504
お父さんのPCで間違ってエロコレクションとか見つけたら鬱になるのでやめたほうがいい
ただVisual Studio(VScodeでもいいかも)使えない環境でC#やるのはめんどくさいと思うよ
0537デフォルトの名無しさん (ワッチョイ 4269-m0US)
垢版 |
2018/06/17(日) 09:14:51.45ID:R12hw8Jz0
HSTファイル
調べた限りだとHiSTory fileでFXの履歴を記録したファイルで使われることが多いのかな?
自分が使いたいのはFXの履歴ではないくてカメラの履歴などの情報を取りたいです。C++などのコードで書いてるサイトはあるけどC#が見つからない
0541デフォルトの名無しさん (スップ Sdc2-sRUJ)
垢版 |
2018/06/17(日) 22:18:28.81ID:qGzm+MRqd
そのC++ライブラリはそんな複雑なことしてんの?
数千行あるなら心折れるかもしれんが、自分で移植するほうが早い気がするけど
C#かけるなら余裕でしょ
0542デフォルトの名無しさん (ワントンキン MMe1-qG2Q)
垢版 |
2018/06/17(日) 22:23:59.43ID:IxLGC6rAM
byte[]からstructにマーシャリングするのが簡単かな
あ、でも最近のC#はマルチプラットフォームだからバイトオーダーも気にしないとダメなのかな
地味にめんどくせえな
0543デフォルトの名無しさん (ワッチョイ 4269-m0US)
垢版 |
2018/06/17(日) 22:37:48.08ID:R12hw8Jz0
内容しっかり見てなかったけど100行なかったははず
C#もどこかあるだろで探してたけどC#だけまったく見当たらなかったので、結果的には自分で移植のほうが早かったかな
0544デフォルトの名無しさん (ワッチョイ 9dd2-cPc7)
垢版 |
2018/06/18(月) 00:31:09.66ID:6KD+nJyx0
どなたか助けてください

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

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

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

ご存知の方がいらっしゃいましたらご教授ください。
0548デフォルトの名無しさん (ブーイモ MM6d-2ITt)
垢版 |
2018/06/18(月) 15:38:53.66ID:XzDxjxqSM
バイナリファイルをバイト配列に一気に読み込んでLINQでゴリゴリするなんてC#って言うか.netの醍醐味だね。
C、C++と歩んできて正直C#なめてたが、プログラムの書き方変わったよ。
0549デフォルトの名無しさん (ワッチョイ 0296-gvEZ)
垢版 |
2018/06/18(月) 19:59:56.07ID:YV8aSpRw0
バイナリファイルのバイト配列はストリーム(BinaryReader/Writer)経由でしか扱ったことないな
浅学ですまないが非常に興味があるので、何をする処理にLINQを使っているのか教えてほしい
0552デフォルトの名無しさん (ワッチョイ dd9f-2ITt)
垢版 |
2018/06/18(月) 20:55:37.17ID:Dbb+UGxb0
テキストファイルを一行ずつ読み込むとか、バイナリファイルを1フレームずつ読み込むなんてのは時代遅れなんじゃねかと。
最近は一括読み込みしかしないな。
パフォーマンスはライブラリやOSが担保してくれる。
0553デフォルトの名無しさん (アウアウエー Sa4a-jhA2)
垢版 |
2018/06/18(月) 21:33:32.15ID:ubyRHWyfa
時代遅れかどうかは知らんけど(そういうネトウヨチックな「俺スゲー」という間抜けな自己陶酔、俺は大嫌いだがw)
富豪的であってもそれが一時的(たとえばメソッドの中だけ)なら何も問題ないね。

その方がより簡潔だったり可読的に書けるなら否定する理由は何もない
0557デフォルトの名無しさん (ワッチョイ dd9f-2ITt)
垢版 |
2018/06/18(月) 21:46:48.35ID:Dbb+UGxb0
時系列的に増えていくファイルだとか、ソケット通信のバイトストリートだとかは順次読み込みするしかないよ。
だけどドライブにあるファイルは一括読み込みの方が簡単だよ。1ステップだからね。それをソートするなりデータ抽出するなりLINQ使えば簡単だよ。
それを知ってから逐次読み出しなんか面倒くさくアホらしくなったよ。
0568デフォルトの名無しさん (ワッチョイ 1f8a-DJU/)
垢版 |
2018/06/25(月) 11:21:29.65ID:pxATIqrb0
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;
}
0569デフォルトの名無しさん (ブーイモ MM0f-STG2)
垢版 |
2018/06/25(月) 12:12:52.11ID:DuFsc7dIM
>>568
そういうのはフロー解析による不要なコンパイルエラーを回避するために throw する
例外の種類は状況やポリシーに応じて InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException あたりを使うのが普通
0571デフォルトの名無しさん (アウアウエー Sa7f-3IMT)
垢版 |
2018/06/25(月) 12:33:59.90ID:G9vuY89la
そうかな
>>569が挙げてくれてるので十分でしょ。
少なくともメッセージは自由に設定できるし、本当に必要なら派生もできる。

そもそも例外をそんなに細かく分類する必要が本当にあるのかちょっと疑問
0572デフォルトの名無しさん (アウアウウー Sae3-STG2)
垢版 |
2018/06/25(月) 12:40:32.20ID:M/oLTPjda
常識的にキャッチされない種類の例外なら何でもいいわな
InvalidOperationExceptionだけはキャッチされる場合があるから微妙だけど、慣習的にはわりと多数派な気がする
個人的には常に NotImplementedException にしたい
0575デフォルトの名無しさん (ワッチョイ 7fe9-5Tpg)
垢版 |
2018/06/25(月) 13:00:29.11ID:5ya7SPIm0
細かいけどコンパイルエラー回避のためにthrowする、ってのは違くない?
現実問題そんな感じになってしまうことはあるけど理想はコンパイラの都合に合わせたコードなんて無いほうがいいんだから
0576568 (ワッチョイ 9f8a-DJU/)
垢版 |
2018/06/25(月) 13:23:21.50ID:vUyRGEqk0
>>569
>InvalidOperationException, NotSupportedException, ArgumentException, NotImplementedException
これらの例外は自クラスには非はなく、呼んだ側の使い方が間違っているといった感じの例外に見えますが
そんなにこだわらなくていいんでしょうか

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

これで良ければ1行で定義できて1番明快に思えますが
検索してもこんなことをやってる人は誰もいないっぽい…
0577デフォルトの名無しさん (ブーイモ MM0f-STG2)
垢版 |
2018/06/25(月) 14:49:07.56ID:o35Q9ijAM
>>574
>>568のケースに限れば、defaultに来るのはenumにメンバを追加したのにcaseを追加していない「変更漏れ」であると考えることもできるから、
NotImplementedException でも意味的におかしくはない
NotSupportedExceptionは(継承の都合で)メンバ自体が使えないことを意味するからちょっと違う
0579デフォルトの名無しさん (アウアウエー Sa7f-3IMT)
垢版 |
2018/06/25(月) 18:51:31.43ID:uZsljbpsa
>>577
なるほどそうかも

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

インターフェイスって契約じゃなかったのかよw
0583デフォルトの名無しさん (ワッチョイ 7f96-qn6i)
垢版 |
2018/06/25(月) 21:43:12.62ID:xJKhLBIA0
Debugクラスのメソッドはリリース版のとき消えます、素通りします
Debug.Fail() は起こりえない状況であり、かつ、素通りしても問題ない箇所、
またはリカバリ処理を行っている箇所にしか使用できません

基本は例外か Trace.Fail() を使用するべきです

Debug.Fail() を使用して問題ないのは具体的には下記の条件に当てはまるときぐらいだと思います

・『絶対』に起こらないことを目視や単体テストで確認した上で、後続のコードでリカバリ処理を行っている箇所で、
開発によってコードが壊れてないかチェックするためにコードに挿入する
(絶対に発生しないので単体テストを行う場合は #if で慎重にコードを切り替えてエラー状態を再現することになります)

つまり、リカバリ処理してるなら Debug.Fail() は入れなくても問題ないはずです
0584568 (ワッチョイ 618a-VCRa)
垢版 |
2018/06/28(木) 16:32:42.98ID:mhaIhaYV0
遅くなりましたが例外とログの使い方大変参考になりました。
ありがとうございます。
0585デフォルトの名無しさん (ワッチョイ 45fa-2e90)
垢版 |
2018/07/04(水) 22:15:33.33ID:gFgZc5FG0
81F
0589デフォルトの名無しさん (ササクッテロル Spbd-p+0f)
垢版 |
2018/07/12(木) 21:32:30.73ID:wWmeulvip
単なる構造体にインスタンスもくそもないからな。
0591デフォルトの名無しさん (ブーイモ MMc9-hVvx)
垢版 |
2018/07/14(土) 10:59:20.35ID:21Pqhes0M
型のデフォルト値でね?
0592デフォルトの名無しさん (ワッチョイ a5b3-8eTX)
垢版 |
2018/07/14(土) 11:24:43.76ID:td9rD4BU0
Visual Studio 2017
合計 90 日間が過ぎました。

無料で使いたいんですが、どうすれば良いでしょうか?
0596デフォルトの名無しさん (ワッチョイ a5b3-8eTX)
垢版 |
2018/07/14(土) 12:06:05.24ID:td9rD4BU0
Community版に移行する事にしました。
ありがとうございます
0599デフォルトの名無しさん (ワッチョイ 6db5-p+0f)
垢版 |
2018/07/15(日) 11:14:40.73ID:GMJtRfj30
サブスクリプションで全シリーズ揃えてる俺に死角無し。
0601デフォルトの名無しさん (ササクッテロル Spc7-Bhrm)
垢版 |
2018/08/02(木) 11:31:31.36ID:ijDqx/PBp
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で実現可能でしょうか。
0603デフォルトの名無しさん (ササクッテロル Spc7-Bhrm)
垢版 |
2018/08/02(木) 12:30:22.50ID:ijDqx/PBp
>>602
辿らない場合、スキルクラス単位で条件絞り込みができるのでしょうか?
これができればとても楽なのですが、、、
0605デフォルトの名無しさん (ササクッテロル Spc7-Bhrm)
垢版 |
2018/08/02(木) 15:11:34.29ID:ijDqx/PBp
いえ、辿りたいわけではなくて、辿らないとできないと勝手に思ってただけです
辿らなくて良いなら辿らないでやれればベストです。
ですがその方法がわからないので教えてもらえませんでしょうか。
0606デフォルトの名無しさん (ワッチョイ 8f9f-LI4B)
垢版 |
2018/08/02(木) 21:52:06.55ID:nmSSZypj0
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();
0610デフォルトの名無しさん (ワッチョイ ff58-0Uuo)
垢版 |
2018/08/07(火) 20:55:48.43ID:7nA6P5yg0
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
0611デフォルトの名無しさん (ワッチョイ b3e3-10BI)
垢版 |
2018/08/07(火) 21:22:20.14ID:UKw4EMmv0
>>610
ない頭絞って考えてみた。
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);

どっちも汚い。もっと賢いのおしえろください
0614611 (ワッチョイ b3e3-10BI)
垢版 |
2018/08/07(火) 21:35:47.39ID:UKw4EMmv0
無理矢理LINQつかってみたけど>>613に一票
0616デフォルトの名無しさん (ワッチョイ ff58-0Uuo)
垢版 |
2018/08/07(火) 21:41:47.05ID:7nA6P5yg0
dataAとdataBが1000件以上あるので、まず単純に変更してるのがあるか?で
SequenceEqualを使ってみた流れでLINQを調べていた流れで知りたかったです。
forで書くのがわかりやすいとは思うけど、LINQでもっとうまく書けるかなと思って

>>611参考になりました。ありがとうございます!
0618デフォルトの名無しさん (アウアウカー Sa07-kkiZ)
垢版 |
2018/08/07(火) 23:11:20.30ID:EHUuk9/6a
zip使えばいいんでね?
0619デフォルトの名無しさん (ワッチョイ 8f9f-I2NA)
垢版 |
2018/08/07(火) 23:26:49.96ID:WUtnzCvr0
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); // インデックスを取り出す
}

ループじゃぱっとみ何やってるかわかんねえよ
0621デフォルトの名無しさん (ワッチョイ cfe8-Xflc)
垢版 |
2018/08/07(火) 23:35:51.16ID:vAj7NHSO0
LINQってEntityFrameworkでしか用途なくねえ?
0624デフォルトの名無しさん (アウアウエー Sadf-Eypl)
垢版 |
2018/08/08(水) 00:39:26.55ID:cXv1v5r0a
>>619
うーん、普通にこっちのほうが分かりやすいと思うけど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;
}
0625デフォルトの名無しさん (ワッチョイ 338a-Xflc)
垢版 |
2018/08/08(水) 03:30:51.92ID:x4iNladl0
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);
0627デフォルトの名無しさん (スップ Sd1f-Bh6x)
垢版 |
2018/08/08(水) 13:38:09.59ID:CtU8HUVGd
インデックスが必要な時、わざわざselect挟んでインデックス貼るの馬鹿らしい感じがして好きになれないんだけど仕方ないよね?
そんなにインデックスを参照することが多いなら生成時に一緒に貼っとけって話かもしれんが…
そもそもlinqマスターはインデックスを必要としない設計にいつもなるの?
自分もインデックスが無くて済むように考えるけど結果的に必要になる箇所が細部で出てくるんだよね
0628デフォルトの名無しさん (スプッッ Sd1f-hmJy)
垢版 |
2018/08/08(水) 14:08:00.53ID:csO2M6exd
どうしても必要な時はselect((value, index) => new {V = value, I = index})でインデックス引っ張ってるわ
それでもインデックス欲しい条件1行で書けるのが楽だからLinq便利派だけども
0629デフォルトの名無しさん (スップ Sd1f-Bh6x)
垢版 |
2018/08/08(水) 14:25:20.52ID:CtU8HUVGd
>>628
俺もそれ、ちょくちょくするんだけどforで回したほうがよくね?って思っちゃうことがあるんだよね
もちろん処理によりけりと言ってしまえばそれまでなんだけど
比較するようなもんじゃないかもしれんがjavascriptなんかだと大抵インデックス取れるから、そっち触ったあとにC#に戻ると処理考えるときにインデックスありきで考えがちになっちゃう気がしてる
0630デフォルトの名無しさん (スップ Sd1f-Bh6x)
垢版 |
2018/08/08(水) 14:32:55.42ID:CtU8HUVGd
先に出てた課題でもzipしたあと、そのままlinqで処理を完結させるか、zip後にforで回すか
個人的にはzipがどちらにせよ入るなら最後までlinqの方が1つの処理を1つの手法で解決してる感じがして好き
だけどインデックスが処理に必要だからfor使いたいって気持ちもわかる
0632デフォルトの名無しさん (ワッチョイ 338a-Xflc)
垢版 |
2018/08/08(水) 15:07:53.10ID:x4iNladl0
こういう拡張メソッド作っておくのはたまにやる
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でインデックスつけてる冗長さもないし、添字アクセスもないし、使う時はすっきり意味がわかりやすい
0633デフォルトの名無しさん (ブーイモ MMa7-A/YO)
垢版 |
2018/08/08(水) 16:44:49.34ID:Gn4Y43YUM
>>632
正直クソ分かりにくい
俺がレビューしたらリジェクトするわ
WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する
そもそもメソッド名以前に、LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、
キーやインデックスの方を返すような操作については特に念入りにそれがわかるような明示的な表記になるように工夫したほうがいい
0639デフォルトの名無しさん (ワッチョイ 338a-Xflc)
垢版 |
2018/08/08(水) 18:27:19.45ID:x4iNladl0
>>633
>WhereIndexというメソッド名を見たら大抵の人はインデックスをフィルタ条件にして要素の値を返すメソッドと誤解する

そんなのはWhereでできるし

>LINQって普通はキーやインデックスではなく要素の値を操作していくものっていう暗黙的了解があるから、
>キーやインデックスの方を返すような操作については

それもSelectでできるし
だいたい要素の値を操作していくものっていう暗黙的了解があるならWhereIndexも要素の値が対象と思うんじゃない?
なんか矛盾してね?
0644デフォルトの名無しさん (ワッチョイ de81-8ulZ)
垢版 |
2018/08/11(土) 00:11:00.13ID:p6HuaRWz0
>>643
それってインデックスつけることが一つの目的じゃない?
インデックスってかソートかな?
いろんなところでいろんな処理されるコレクションがあって、その処理の殆どにインデックスが不要だけどごく一部にインデックスがほしいとき、わざわざ1行追加するのスッキリしないなぁって感じ

たった1行なんだから書きゃいいんすよ?
それはわかってるけどなんか気持ち悪いなぁって気がするだけ
0645デフォルトの名無しさん (ワッチョイ 4e9f-+CD1)
垢版 |
2018/08/11(土) 12:41:19.45ID:YyI+aygL0
ほとんど必要が無いインデックスだけど
ごく稀に必要になるから必要になるところでだけインデックスを追加するんだろ
ほとんど使わないインデックスのためにずっとランダムアクセス性を維持するとか無駄じゃん
0647デフォルトの名無しさん (ワッチョイ de81-8ulZ)
垢版 |
2018/08/11(土) 14:23:04.22ID:p6HuaRWz0
>>645
いや、linqでインデックスを付与しないけどランダムアクセスすることはあるよ?
前提変えたらそら意味通らんよ
コレクションをlinq以外で処理しちゃ駄目ルールでもあるの?
0648デフォルトの名無しさん (ワッチョイ 4e9f-+CD1)
垢版 |
2018/08/11(土) 14:36:01.31ID:YyI+aygL0
>>647
なにいってんだ?
IEnumerable<T>にインデックスなんてない
ないからSelectで付与するんでしょ

そんなルールはないけどほとんどほとんどLinqで済むでしょ?
Linqでサクサク処理してるのに中に突然ループが紛れ込んできたらキモいって話をしてる

var tmp = list.Where(...).OrderBy(...).ToArray();

for (int i = 0; ...) {
...
}

var result = tmp.Where(...).Select(...);
0649デフォルトの名無しさん (ワッチョイ de81-8ulZ)
垢版 |
2018/08/11(土) 14:48:08.19ID:p6HuaRWz0
>>648
え?ずっとそういう話をしてたのになんで突然
>ほとんど使わないインデックスのためにずっとランダムアクセス性を維持するとか無駄じゃん
って書いたの?

インデックスのないlinq処理でそれが必要になったときわざわざselectで付与するのなんか気持ち悪いねーって話よ?
0650デフォルトの名無しさん (ワッチョイ 4e9f-+CD1)
垢版 |
2018/08/11(土) 14:59:36.83ID:YyI+aygL0
>>649
気持ち悪いのはお前の感覚ではという話だろ
俺からすればToArrayやToListをかましてメモリとCPUを無駄にしたり余計なメソッドを追加するほうが嫌
メソッド化に関しては再利用性が高いかうまく抽象化されていて可読性が高まるというなら別だが
真にランダムアクセス性が必要なアルゴリズムならば変換せざるを得ないがそもそも今回の問題には必要がない
0651デフォルトの名無しさん (ワッチョイ de81-8ulZ)
垢版 |
2018/08/11(土) 15:12:53.25ID:p6HuaRWz0
>>650
うん、そうだよ
個人的に気持ち悪いなーってだけ
はじめからそういうふうにしか話ししてないつもりだけど

ランダムアクセスが不要だからあえてランダムアクセスできないコレクションを選択するの?
ランダムアクセスは不要だけどあったって使わないだけだからどっちでもいい、ってなるのが普通じゃないの?
パフォーマンス要求がシビアでランダムアクセスできるコレクションを選択することで、その要求から外れてしまう、とかいうならわかるけど
0652デフォルトの名無しさん (ワッチョイ 4e9f-+CD1)
垢版 |
2018/08/11(土) 15:28:37.80ID:YyI+aygL0
>>651
ランダムアクセスが不要なアルゴリズムなら「当然」IEnumerable<T>(ランダムアクセスできないコレクション)を選択するだろう
まったくもって「あえて」と言う理由が分からん
もしもSelectやWhereの引数が配列だったら普通のプログラマなら「あえて配列にしたのはなぜか」と疑問を持つだろう
なんか逆なんだよね思考パターンが
0654デフォルトの名無しさん (ササクッテロラ Sp03-bBK3)
垢版 |
2018/08/12(日) 00:56:37.14ID:UOoEXFjMp
コレクションって言葉がダメだと思うぞ?
そもそもIEnumerableはシーケンシャルな列挙の機能しか提供しない
根本的に理解が間違ってる
0660デフォルトの名無しさん (ワッチョイ b759-EyNT)
垢版 |
2018/09/13(木) 22:10:23.24ID:IOzhaO6j0
doxygenみたいなドキュメント生成ツールを使うとxaml部分がまともに解析出来ません。
bindingしているviewとviewmodelの関係なんかが分かるドキュメントにしたいんですが何か良い方法ないでしょうか?
0661デフォルトの名無しさん (ワッチョイ 57d2-NCQU)
垢版 |
2018/09/14(金) 22:17:10.47ID:BClpbb6X0
Func<string> func = () => { return "text"; };
var res = func();

これを一文で書くことはできますか。

ふと気になっただけではあるけれど、自分で解決できなくて気になって仕方がない。
基本的なことが分かってないような気がする。
0664デフォルトの名無しさん (ワッチョイ ffe8-okpm)
垢版 |
2018/09/15(土) 00:21:48.95ID:elLmwu/20
本当はなにをしたかったんだろう
例題が悪い気がする
0665661 (ワッチョイ 57d2-NCQU)
垢版 |
2018/09/15(土) 00:41:48.54ID:LMkhUY/p0
ああ、そうか。w

パラメータに対してちょっと複雑な変換を掛けるのだけど、汎用性がないから専用関数作るのもなんだし、
だったらラムダ式で書けばいいんじゃね?→ ラムダ式は Func 型?だから戻り値とれねーじゃん ってところから進めなった。
他にやり方はあるので出来なくてもいいのだけど、気にはなって。
0667デフォルトの名無しさん (ワッチョイ ff81-meyQ)
垢版 |
2018/09/15(土) 05:59:42.97ID:crViL/AR0
>>665
参照渡すとか?
0668デフォルトの名無しさん (アウアウエー Sadf-v8l+)
垢版 |
2018/09/15(土) 15:15:22.99ID:aC3C7hdpa
こんなのは嬉しくないね
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;
      }
    )
  )();
0669デフォルトの名無しさん (アウアウエー Sadf-v8l+)
垢版 |
2018/09/15(土) 15:22:04.34ID:aC3C7hdpa
これも却下だな
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;
    }
  );
0672デフォルトの名無しさん (ワッチョイ d79a-KGwk)
垢版 |
2018/09/15(土) 18:34:42.22ID:nwnNkRfe0
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();
>>670こういう意味とは違うの?
整数範囲で出して割った方が範囲や有効桁も決められるからそっちの方がよさそうな気もする
0673デフォルトの名無しさん (アウアウエー Sadf-v8l+)
垢版 |
2018/09/15(土) 18:56:24.76ID:aC3C7hdpa
[0, 1]とか(0, 1)は数学の記号ね(多分高校1年ぐらいで習ってるはずw)

Random.DoubleNextの戻り値は[0, 1)(つまり0≦x<1)らしい
普段乱数使うようなコード書いてないからよく分からんけど、
0≦x≦1とか0<x<1でないと困る場面も多いんじゃないかなと思っただけ
0677デフォルトの名無しさん (ワッチョイ 9fb3-0AE+)
垢版 |
2018/09/15(土) 20:30:38.93ID:OUVvcRON0
>>665
> パラメータに対してちょっと複雑な変換を掛けるのだけど
と言うなら例もパラメーター使ってる例を書かなきゃ

>>668
俺もこれしか思いつかなかった
そもそも
var f = (string x) => { return "abc" + x; };
位は型推論してくれてもいいと思うんだけど難しいのかな?
0679デフォルトの名無しさん (ワッチョイ 9780-9b2l)
垢版 |
2018/09/15(土) 20:42:09.91ID:KIanXBkQ0
面倒だったら擬似乱数生成器を自分で作ればいい
キミラ程度が使う程度の擬似乱数だったら数行コピペでできる程度のもんで十分だからな
0681デフォルトの名無しさん (ワッチョイ 9780-9b2l)
垢版 |
2018/09/15(土) 20:53:08.93ID:KIanXBkQ0
https://ideone.com/PJDFVv

この程度で十分
0684デフォルトの名無しさん (ワッチョイ 9780-9b2l)
垢版 |
2018/09/15(土) 21:37:43.29ID:KIanXBkQ0
やっぱり低学歴知恵遅れは
内側の擬似乱数生成器をかえるだけの話なのがわかってないわ

きっと擬似乱数がなんなのかすらわかってないわ
擬似乱数がなんなのかわからずに乱数()とかいって数字使ってる程度だからな
0685デフォルトの名無しさん (ワッチョイ 9780-9b2l)
垢版 |
2018/09/15(土) 21:39:33.01ID:KIanXBkQ0
つまり
コレがC#なんか使ってるヤツラのオツムの程度
0686デフォルトの名無しさん (ワッチョイ b7e3-TNGn)
垢版 |
2018/09/15(土) 21:40:44.62ID:qw6mr0Vb0
>>673
(0,1)は[0,1)が0ならやりなおし、でいいんじゃないのと単純に思ったがそんなものじゃない?
0687デフォルトの名無しさん (ワッチョイ 9780-9b2l)
垢版 |
2018/09/15(土) 22:05:16.77ID:KIanXBkQ0
そもそも機械イプシロンのこと分かってて
ああいうレスしてるようにはまったく見えないからな
0689661 (ワッチョイ 57d2-NCQU)
垢版 |
2018/09/15(土) 23:10:36.43ID:LMkhUY/p0
気に掛けてくれた方々に。ありがとう。

>>668
ああ。なるほど。型を明示してあげたらよかったのか。
キャストを加えたら期待通りに書くことが出来ました。ありがとうございます。

これってラムダ式を var で宣言した変数に代入できなかったことがヒントになり得たんだな。頭が回ってなかった。
これくらいは型推論してくれても良さそうなのにとは原因が分かった後での負け惜しみ。

>>666,680
今回のはそういうことが出来そうなのに出来なくて悶々としてしまって。
実用性度外視で原因を知りたかったの。
0690デフォルトの名無しさん (ワッチョイ d7c4-8zjY)
垢版 |
2018/09/16(日) 10:09:07.69ID:QiF2mi6W0
今ならref/outがないならAction/Funcに型推論して
シグネチャが同じdelegate間の暗黙の型変換が行われる
初期化時に左辺とかキャストとかでdelegate型が明示されてたらそのdelegate型でnewされる
でいいと思うよな〜
0697デフォルトの名無しさん (ワッチョイ c1d2-C4Ur)
垢版 |
2018/09/26(水) 21:52:32.99ID:rAzbq+Jy0
下みたいなことって出来ます?
やりたいのは object 型の変数に代入したジェネリック系のインスタンスを、さらに元のジェネリックの型にキャストし直すってことなんですが。

void func( object dic )
{
var tmp = (Dictionary)dic;  // ← これみたいなことをやる方法がないかなと
tmp.Add( "test", new object() );
}

var dic = new Dictionary< string, object >();
func( dic );
0700デフォルトの名無しさん (ワッチョイ 17d2-svSY)
垢版 |
2018/09/27(木) 00:24:29.22ID:WuETTr790
>>698
言葉が足りてなかった。申し訳ない。

例示のケースの場合は、
var tmp = (Dictionary<string,object>)dic;
と指定すれば出来るのだけど、Dictionary だけでキャストし直すみたいなコトできないかなって。
as でも Dictionary だけではキャストできないことは確認しました。
0704デフォルトの名無しさん (アウアウエー Sadf-upLT)
垢版 |
2018/09/27(木) 12:48:53.74ID:sTtGwCQ3a
>>700
を読み直してみると、ひょっとして要するにジェネリックの型パラメータを書くのが面倒臭いから
省略できないか?、って言いたいのかな

それなら答えは「できないけど仮に出来たとしても絶対やるな」じゃないの?

もちろん、
using Dictionary = System.Collections.Generic.Dictionary<string, object>;
こういうエイリアスは書けるはずだと思うけど

何にしろ、質問は他人が読んで分かるように書いて欲しいよね
0707697 (ワッチョイ 17d2-svSY)
垢版 |
2018/09/29(土) 00:47:34.72ID:EY+8Y7mF0
ありがと。
やっぱり dynamic 使うしかないかな。避けたかったのだけど。

なにが入ってるか分からない配列の中身を文字列化してログ出力したかったの。(最初は)
object[] の要素の中身が generic だったりしたときに ToString() だとクラス名?にしかならないから。
0717デフォルトの名無しさん (アウアウエー Sadf-upLT)
垢版 |
2018/09/29(土) 18:05:26.03ID:w5r/wslsa
もういいでしょw
たぶん何か勘違いしてるだけだと思うよ

俺もプログラミング初めて2,3年は静的/動的とかコンパイル時/実行時の違いとか
分かってるようでよく分かってなかった
0723デフォルトの名無しさん (ブーイモ MM6b-wEhW)
垢版 |
2018/10/16(火) 16:00:38.35ID:y5q0bWlwM
Javaもクライアントアプリ分野から撤退したから今はクロスプラットフォーム度でいえばC#のほうが上なくらい(あくまでカタログスペック上は)
C#はWebかコンソールアプリなら.NET Core使えばLinuxやMacで動く
スマホやMac向けのGUIアプリならXamarinだな
0725デフォルトの名無しさん (ワッチョイ be9a-ypm2)
垢版 |
2018/10/21(日) 20:25:55.35ID:5Xb93YKt0
普及度とかマルチプラットフォームとかどうでもいいけど
Windows使っていて個人的に何かちょっと作ろうと思ったときに、もうC#以外考えられない体になってしまった
0726デフォルトの名無しさん (アウアウウー Sa9f-HRlU)
垢版 |
2018/10/21(日) 20:37:33.56ID:MDetJiiMa
おれはpythonかなー
スクリプト言語はほんま楽やで
客先でインスト制限きつい時はC#とPowerShell
Microsoftさんは早くVSCodeとdotnet cliをWindows標準にしてPowerShellを強制アプデすべき
0730デフォルトの名無しさん (ワッチョイ 7bd2-0gnm)
垢版 |
2018/10/21(日) 22:39:29.79ID:eTSVpSn40
>>726
確かに楽だな。 < python
Web API を叩くプログラムをこれで書いたけど、学習まで含めてすぐ出来た。w
VS 上でも書けるのが楽さに拍車を掛けてる。

>>727
うん。でも最近はやってないな。そーいえば。
0740デフォルトの名無しさん (ワッチョイ bee8-nBLa)
垢版 |
2018/10/23(火) 12:52:00.65ID:Hcq+1RfE0
なお、どこも新規開発はFormの模様
0752デフォルトの名無しさん (アウアウカー Safb-WxZP)
垢版 |
2018/10/23(火) 17:39:47.89ID:PWuDtLsGa
Core3.0まで出てるんだ
なんか使いやすくなった?
0760デフォルトの名無しさん (アウアウウー Sa9f-tSmu)
垢版 |
2018/10/23(火) 21:26:47.62ID:+h1AjSvua
>>759
デプロイどうすんの?アップデートの度に君が出向いて客のPCでZip解凍して回るの?
それが面倒だからWebなのに、それが.NET Coreになったところで何も解決しないよ
というかClick Onceが無くなる分だけ状況は悪くなるな
0764デフォルトの名無しさん (ワッチョイ 1f9f-WxZP)
垢版 |
2018/10/23(火) 21:57:45.44ID:NgQNKVM70
.NET Coreって仕事で使う?
0777774 (ワントンキン MMff-1okT)
垢版 |
2018/10/25(木) 12:22:26.50ID:nll2w7iZM
特に怪しいものなんか動いてないと思うんだけどなぁ
アンチウイルスの保護停止しても変わらない

こんなときに効果的なログの張り方ってある?
一部がネックなのではなく、もう全部が緩慢な感じ
0779デフォルトの名無しさん (オイコラミネオ MM09-phox)
垢版 |
2018/10/25(木) 12:28:31.91ID:LYsln+4LM
例えばウィンドウズサーチとか重たいよね
リソース逼迫してないなら
ディスクI/OやネットワークI/Oや
ネットワーク構成が違うとかかね
全体的に緩慢となるとなあ

ヒント欲しいならもっと情報ださないとダメよ
0782デフォルトの名無しさん (ブーイモ MMf3-dYvX)
垢版 |
2018/10/25(木) 15:08:46.52ID:qGEaBy7DM
>>781
全然ちゃうで
0786デフォルトの名無しさん (ワッチョイ 277f-rZJc)
垢版 |
2018/10/26(金) 00:26:15.60ID:/Y6tHm6z0
スレチかもしれんけど、まだサポートしてないバージョンのアセンブリで定義されてるクラスをリフレクションでもいいから使う方法ってないかな。
具体的にはフレームワークのバージョンが2.0しか許可されない職場でxdocumentを使う方法…
dllを隣に持ってきて参照しても、型自体を認識してくれない
0787デフォルトの名無しさん (ワッチョイ 5781-dYvX)
垢版 |
2018/10/26(金) 00:59:31.47ID:HrTWAmck0
>>784
100万データ処理してから物言いなさい
0794デフォルトの名無しさん (アウアウウー Sa1f-DBFP)
垢版 |
2018/10/27(土) 11:23:19.53ID:zH3PfDR1a
普通にRESTか、クラウドプラットフォームが提供するメッセージキュー(SQSとか)などの外部サービスだよ
余計な囲い込みを廃して今時のWebシステムの構成要素として組み入れやすくするというのがCoreなんだから、今更.NET固有のRPCなんか要らん
0795デフォルトの名無しさん (ワッチョイ 1aaf-ZA70)
垢版 |
2018/11/05(月) 18:13:53.94ID:PEqFXj+e0
dllを修正する際にどの程度までの修正であれば問題ないかまとめてある
サイトってありますか?
dllのクラスの派生元に一つクラスを挟んだ修正では問題なく動いている
ようだったので・・・。
0797デフォルトの名無しさん (ワッチョイ 4e9a-Y/6i)
垢版 |
2018/11/05(月) 19:16:09.78ID:W+eHh5+20
>>795
逆に使えなくなる場合は(マネージドdllで)厳密な名前付きアセンブリとして作ってある物が名前などが変わってしまった場合
厳密な名前付きアセンブリ
https://docs.microsoft.com/ja-jp/dotnet/framework/app-domains/strong-named-assemblies
>厳密な名前付きのアセンブリを参照すると、バージョン管理や名前の一意性を保護できるなどの利点を期待できます
それ以外は変更のないクラスやフィールドにアクセスする分には問題にならないはず
0799デフォルトの名無しさん (ワッチョイ 8a16-zV7r)
垢版 |
2018/11/07(水) 16:08:10.06ID:Qrgo3xvC0
Monoの互換性についてなのですが、
Visual studio2017でWindowsクラシックデスクトップのWindowsフォームアプリケーション(.Net Framework)で書いたコードは
そのままMonoでコンパイルできるという認識であってますか?
0800デフォルトの名無しさん (ワッチョイ 41eb-K50l)
垢版 |
2018/11/10(土) 05:02:04.09ID:ZJVvB/9K0
>>799
できるし、VisualStudioでコンパイルしたものをMonoでコンパイル直す必要すらない建前なんだけど・・・・
実際には対応状況にかなりの差があってGUIアプリケーションやら暗号やらが絡むものについてはうまくいかない事が多い
0804デフォルトの名無しさん (アウアウウー Sa05-8u3a)
垢版 |
2018/11/11(日) 10:14:46.52ID:zL+4Qkmba
Javaのリモートデバッグは

1. 起動オプションでデバッグ用のリモートポートを指定
2. デバッガで同じポートを指定してアタッチ

でできますが
C#(DotNet Core 2.1)では同じような事は出来ませんか?
運用環境でしか発生しないバグのデバッグってどうやればいいんでしょうか?
0807デフォルトの名無しさん (ワッチョイ 09e3-BKZ1)
垢版 |
2018/11/15(木) 15:41:42.81ID:hjFVqahJ0
Unity って、Wikipedia によれば、600,000 (60万人) も、登録ユーザーがいて、
従業員が、2,000人以上、年間利上げが、100億円を超えるほどあるとされる。

ゲームエンジン Unity の使用料は、
・1,000万円までの売り上げなら、無料。
・2,000万円までの売り上げなら、年間5万円ほど。
・それ以上の売り上げなら、で年間18万円ほど。
とある。

でも、Wikipediaに載ってる Unity を使ったゲームのリストは、
100本あるかどうか程度しかない。

これだと、Unityには、年間2,000万円程度の収入にしかならないのでは
ないかと思う。

それに、アメリカですらプロのプログラマは、30万人くらいしかいない
とされることとも辻褄が合わないように思える。


なんかおかしくない?
0812デフォルトの名無しさん (ワッチョイ 7ae9-dRC3)
垢版 |
2018/11/15(木) 17:52:04.91ID:tBfV11FV0
最近スマホアプリのtop100くらいまでの使用エンジン調査した記事あった気がしたんだけど見つからんかった
たぶん半分くらいがunity製だった気がする
PCでもUnity製増えてきてるしswitchにもそこそこ出てる
日々山ほどのゲームがリリースされてるのにwikipediaで全てを網羅できるわけないと思うんだけど、なんで自分がおかしいと思わなかったの?
0813デフォルトの名無しさん (ワッチョイ 7ae9-dRC3)
垢版 |
2018/11/15(木) 17:56:18.66ID:tBfV11FV0
>>811
訪れる?利用するんじゃないの?
ディレクタやプランナがUnity上でプレイすることもあるし、CGデザイナやUIデザイナがUnity上で作業することもある
もちろん3Dモデリングなんかは専用のツールのほうが作業はしやすいけどね
0814デフォルトの名無しさん (ワッチョイ 7ae9-dRC3)
垢版 |
2018/11/15(木) 18:00:10.49ID:tBfV11FV0
っていうか普通の企業なら間違いなく年間売上2000万なんて超えるよ?
安く済ませられるのなんて個人事業主か同人サークルだけ
社員が5人でもいたらまず年間売上で引っかかるんだから
大きい企業なら普通に100単位でアカウント持ってるし、小さいところでも10以上持ってるとこなんて山ほどある
0820デフォルトの名無しさん (ワッチョイ 09e3-BKZ1)
垢版 |
2018/11/16(金) 02:23:44.07ID:a546+gcL0
背理法で証明して見せたかっただけだよ。
つまり、矛盾を示す事で、間違い/捏造であることを証明する手法。

だから、ありえないような結論が出たということは、正しく証明できた
事になる。
0821デフォルトの名無しさん (ワッチョイ cad2-RJIg)
垢版 |
2018/11/16(金) 04:24:32.84ID:/x4PzStk0
はいりはいりふれはいりほー
0822デフォルトの名無しさん (ワッチョイ adea-ABD/)
垢版 |
2018/11/16(金) 14:20:33.68ID:+bMNmjEk0
Unityの登録だけなら自分でもやってるからなぁ
仕事でやってる人なんて会社用と個人用を別々に登録してるんじゃね

あとUnityはVRチャットで自キャラ作るのに使うから、
それも多いと思う
0823デフォルトの名無しさん (ワッチョイ 09e3-BKZ1)
垢版 |
2018/11/16(金) 19:05:12.63ID:a546+gcL0
>>822
やっぱり、そういう事もあるんだね。

どっちにしろ、Uniy のゲーム・ライブラリだけのライセンス料では、年間100億円
の売り上げにはならない気がする。

CADなども売っているので、そういう売り上げがかなりあるのかもしれない。
0825デフォルトの名無しさん (ワッチョイ d9e3-1aIk)
垢版 |
2018/12/12(水) 13:45:10.42ID:RRyKxOPE0
>>807
海外の人も 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).
0826デフォルトの名無しさん (ワッチョイ d9e3-1aIk)
垢版 |
2018/12/12(水) 13:54:09.60ID:RRyKxOPE0
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:
0827デフォルトの名無しさん (ワッチョイ d9e3-1aIk)
垢版 |
2018/12/12(水) 14:02:18.23ID:RRyKxOPE0
GooglePlayやAppStoreのAppって、250万個もあれば、その中に本当に同一のものが
含まれてないか、または、250万個も本当にあるかを調べることは不可能に近い
かも知れない。
そもそも本当はそんなに無かったりして。そもそも、Vectorに登録されているアプリ
だってそこまで無い気もするし。
0828デフォルトの名無しさん (スププ Sdb3-OBga)
垢版 |
2018/12/12(水) 14:04:10.36ID:3f3X1OW4d
うちゲーム会社じゃなくて製造業(けっこう大手)だけど、VR絡みはUnity使ってるよ。
同業他社も使ってるのは意見交換会で聞いたし。
映像系でも使われ始めてるから、ゲーム業界から離れたほうがわかりやすいかも。
0830デフォルトの名無しさん (ワッチョイ d9e3-1aIk)
垢版 |
2018/12/12(水) 14:43:30.92ID:RRyKxOPE0
確かに、VRまで含めれば説明が付く気はするんだよ。
使う人の人数は作る人の人数より100倍程度は居るのが普通だから。

ただ、GooglePlayに登録されているアプリ数が本当に250万本もあるかどうか、
そのまま信じていいかについては注意すべき。

そもそも250万種類の一覧表をテキストファイルで見られるかどうか。

旧 nifty serve なんかも、「シェアウェアは儲かる」と言ってパソコン通信
加入者を増やそうとしたらしい。その際、「秀丸エディタ」が1億円の売り上げ
がある、とされたが、その作者が富士通社員だったことは公然の秘密。
0832デフォルトの名無しさん (ワッチョイ d9e3-1aIk)
垢版 |
2018/12/12(水) 14:55:46.58ID:RRyKxOPE0
>>831
そういう意味じゃなくって、GooglePlay から、全てアプリが載った一覧表を一度に
ダウンロードできるのかってこと。

検索するだけだったら、本当に250万種類もあるかは誰にも分からないじゃない
かと。
0836デフォルトの名無しさん (スップ Sdf3-wOqU)
垢版 |
2018/12/12(水) 20:04:55.15ID:fYjPqF3od
ダウンロードできるか?ってできるだろ
1レコードがMB単位でデータあるんか?
1レコード1KBで2.5GB
最近のゲームなんて10GB超えのダウンロード当たり前みたいなとこあるじゃん
250万行のテキストはあんま開きたくはないが
0837デフォルトの名無しさん (スップ Sdf3-wOqU)
垢版 |
2018/12/12(水) 20:09:07.70ID:fYjPqF3od
なんの根拠もない空想だけどゲームとVRの比率、VRが10%とかじゃない?
もちろん両方もそれなりにいるだろうけど
それでVRまで含めれば説明がつく、って意味がわからん
0838デフォルトの名無しさん (スププ Sdb3-OBga)
垢版 |
2018/12/12(水) 20:16:58.44ID:3f3X1OW4d
あんまり詳しくは言えないけど、VR以外にも使ってるものもあるし、エンタープライズだとお値段時価だし、
企業ユースでは数人のチームなんてのはあり得なくて結構な人数分揃えるからね。
CADと連携したりなんやかんやで、ゲーム開発より金はかかるから、プロダクトの割合とは一致しないよ。
0841デフォルトの名無しさん (ワッチョイ 06b5-t2lu)
垢版 |
2018/12/14(金) 16:44:56.02ID:nWTWWp6e0
質問いいでしょうか
webapiにて
var task = Task.Factory.StartNew
これで重い処理をバックグラウンドで処理させています。
このtask開始時にDBにProcessThread.IdとProcessThread.StartTimeを落として
別のwebapiでDBに落としたIdとStartTimeを使って
GetCurrentProcess().Threadsを検索して定期的に生きてるかのチェックを行っています。
これがけっこう不安定みたいで、バックグラウンドの処理が終わる前に
ProcessThreadが検索できなくなる場合があります。
最初にStartNewさせた際のProcessThreadが生きてる正しい確認方法はないでしょうか?
ブラウザを閉じた場合を考慮してProcessThreadで確認を行いたいです。
0842デフォルトの名無しさん (ワッチョイ 06b5-t2lu)
垢版 |
2018/12/14(金) 17:44:35.68ID:nWTWWp6e0
すいません。
変な質問ですね。
var taskを見るのではなく、その他の方法で
バックグラウンド処理が動いてるかの確認が行いたいです。
0843デフォルトの名無しさん (ワッチョイ 06b5-t2lu)
垢版 |
2018/12/14(金) 18:14:11.54ID:nWTWWp6e0
すいません。
自己解決です。
static public Task wkTaskを宣言しておいて

wkTask= Task.Factory.StartNewで作成したあと、ブラウザを閉じて
開き直してもwkTaskは生きてますね。

スレ汚しすいませんでした。
0850デフォルトの名無しさん (ワッチョイ ae02-HdPi)
垢版 |
2019/02/10(日) 17:55:21.67ID:Y+0FbWW50
メソッドへのオブジェクト引数で、参照渡し(refをつける)、とオブジェクトの値渡し(refなしの値渡し。つまり、ポインター(アドレス)渡し)の違いがわかりません。
同じと思ってますが・・・・・。事実は違うようです。参照だと渡し元も変更される、っていう違いは分かります。
それ以外の違いはあるんでしょうか?
0854デフォルトの名無しさん (ワッチョイ 4690-Bwin)
垢版 |
2019/02/10(日) 18:57:09.81ID:ynO2ssbq0
参照値でも、refつけない値渡しとref付ける参照渡しできる。
で、参照値以外の値...とりあえず非参照値と呼ぶと
非参照値でも、refつけない値渡しとref付ける参照渡しできる。

全部で4パターンあるってこと 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
0855デフォルトの名無しさん (アウアウエー Sa0a-gVV1)
垢版 |
2019/02/10(日) 19:18:44.11ID:zgWWffC0a
>>850
簡単なので難しく考えてはだめ。すごくシンプルな話。

その型の値(その型の変数に格納される値)を渡すのが値渡し。
その型の変数の「場所」を渡すのが参照渡し。
さらっと書いたけど、「その型の値 = その型の変数に格納される値」なのはよく理解する必要がある。
つまり、参照型の変数に格納される値って何だったか要再考。

変数とはメモリ上に割り当てられた特定の領域のこと。
だからその領域のバイト列のコピーを渡すのが値渡しで、
領域の先頭アドレスを渡すのが参照渡しだと思えばいい。

参照渡しでメソッドが受け取る情報は「変数の」場所なので、参照渡しの引数に
リテラルや式を渡すことは出来ない。
0856デフォルトの名無しさん (ワッチョイ 6ea5-sQyl)
垢版 |
2019/02/10(日) 19:59:44.58ID:xbk//Ba50
多分だけど参照渡しと値渡しの挙動自体は理解しているものの、
デフォ参照型とデフォ値型の区別がついておらずにデフォ参照型で実験をしてrefでも素渡しでも変わらないやんってことじゃないか
0867デフォルトの名無しさん (ワッチョイ 4690-Bwin)
垢版 |
2019/02/11(月) 18:26:18.92ID:2ERt5pT00
そのswapがな、MVVMでお決まりのBindableBaseなりのSetPropertyでプロパティの値交換するときに使いまくりで、
androidでもMVVM使いまくってるけどrefないkotlinやjavaでやると...
0870デフォルトの名無しさん (ワッチョイ cd0c-feI+)
垢版 |
2019/02/12(火) 23:51:08.44ID:HQcd2HqP0
BindableBase SetPropertyとかでぐぐってみれ
有り体に言えば自身のプロパティ(のバックストア)を差し替えるジェネリックメソッドを基底クラスで定義するのに使うだけ
0871デフォルトの名無しさん (ワッチョイ f901-OF6d)
垢版 |
2019/02/13(水) 00:40:04.33ID:6JezjdzR0
WPFとかUWPとか使ってればBindableBaseのありがたさはよくわかる

関係ないけどstaticメソッドって呼び出すときにいちいちインスタンスを生成する必要がないって以外のメリットあるのかな?
0872デフォルトの名無しさん (アウアウエー Sa0a-gVV1)
垢版 |
2019/02/13(水) 01:53:30.80ID:sK/raQIQa
>>871
まあメリットって発想がそもそもおかしい。
例えばDouble.Parseがstaticなのはその方が意味的に自然だから
インスタンスメソッドである必然性がないし、インスタンスメソッドでは不自然だから
0881デフォルトの名無しさん (アウアウカー Sa5b-KHu+)
垢版 |
2019/02/15(金) 22:47:38.37ID:izkrr7dEa
いやチェックしとけよそこは
0887デフォルトの名無しさん (ワッチョイ 5f01-3Kdw)
垢版 |
2019/02/16(土) 13:08:53.78ID:q1DAaOKG0
>>883
> 例外っていろんな種類あるけど具体的に何を使えばいいのかよくわからなくて
投げる方で悩むのはわかるけど
> とりあえずcatch(Exception e)とかしちゃってる
受ける方はどれ受けるべきかはわかってるでしょ
最終手段としてよくわからんけどエラーが発生したから終了するね
って言うならcatch(Exception e)もありだと思うが
0892デフォルトの名無しさん (オイコラミネオ MMdb-XSOg)
垢版 |
2019/02/16(土) 15:03:48.09ID:uy2P96bkM
最近部活の後輩が黒魔術みたいなコードを書くようになって困ってるんだが対策ない?

こんな感じのコードを後輩が書いてくるんだよ↓

public interface IMessenger {
__public MessageReceived();
}
public abstract class Messenger : IMessenger{
__public abstract void MessageReceived();
__public abstract void Retry();
}
0893デフォルトの名無しさん (オイコラミネオ MMdb-XSOg)
垢版 |
2019/02/16(土) 15:04:05.72ID:uy2P96bkM
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();
__}
}
0894デフォルトの名無しさん (オイコラミネオ MMdb-XSOg)
垢版 |
2019/02/16(土) 15:04:31.94ID:uy2P96bkM
こんなんだったから

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文字で分けるって言ってるんだから
何が起こってるかわかるように書くことを意識してもらわないと
0895デフォルトの名無しさん (ワッチョイ c701-cT+3)
垢版 |
2019/02/16(土) 15:06:36.58ID:8cj+4+Hl0
まあ例外でプログラムは終了させるべきだよな
ただ客は例外が起きてもcatchで握りつぶしてスルーした方が文句言わないんだよな……
0901デフォルトの名無しさん (ワッチョイ 7fa7-cT+3)
垢版 |
2019/02/17(日) 14:42:24.50ID:QIeMqQFm0
byte*からbyte[]にする方法ってない?
new byte[64];みたいに新規確保してコピーしか方法ないんだろうか
Unsafe.As等で新規確保無しで出来るかと思って色々試してみたけど上手くいかない
0902デフォルトの名無しさん (アウアウエー Sa1f-x6Gg)
垢版 |
2019/02/17(日) 15:01:42.36ID:99sHKv96a
「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
全然別の型なんだしあるわけないでしょう。
そういう危なっかしい機能を排除してるのがC#の売りの一つだったはずなわけで

コピーする機能ならMarshalあたりにあるんじゃない?
0903デフォルトの名無しさん (ワッチョイ 7fa7-cT+3)
垢版 |
2019/02/17(日) 15:16:25.11ID:QIeMqQFm0
>>902
>「byte[]にする」が「byte[]とみなして扱えるようにする」って意味なら
そういうことです

あるわけないと言いますが、その逆はあるので出来るかなと思い
(byte*やref byteで先頭を指定し自作のstructとして読ませる。少しずらせばbyte[]を自作クラスとして読ませることも可能)
0906デフォルトの名無しさん (ワッチョイ 7fa7-cT+3)
垢版 |
2019/02/17(日) 15:27:09.29ID:QIeMqQFm0
>>904
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バイト後ろにづらないと出来ないから実用は難しいけど一応可能
0910デフォルトの名無しさん (ワッチョイ df32-A2tD)
垢版 |
2019/02/17(日) 16:27:59.23ID:tKx1WgvG0
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とか
0911デフォルトの名無しさん (アウアウウー Sa21-eq4B)
垢版 |
2019/02/21(木) 12:35:31.38ID:78/oBfjca
self containedって完全に依存なしになるわけじゃないのね
alpine用にself containedでビルドしても動かなかった
libstdc++とか色々インストールしたら動いたけどさ
dotnetコマンド同梱と比較してコンテナサイズも殆ど変わらないし意味あるのかなこれ
0913デフォルトの名無しさん (ササクッテロレ Spbd-zZPo)
垢版 |
2019/02/21(木) 14:33:57.39ID:XSMrGlqdp
SCDは.NETのランタイムを別途インストールじゃなくて同梱するってだけの話だしね
公式ドキュメントにも注釈あるけどLinuxは仕様上完全に断ち切るのは難しいんじゃない?
Windowsだと同梱のファイルだけでそのまま動くけど
0918デフォルトの名無しさん (ワッチョイ 5d2d-4qoz)
垢版 |
2019/02/26(火) 16:27:59.06ID:jgGxVc0K0
ちょくちょくポインタ代替機能についての質問があるけどさ
どんな用途でポインタを使いたいのかわかんないけど、大抵の場合はストリームで代用できるんじゃないのかな
0922デフォルトの名無しさん (ワッチョイ 6d7b-SpKW)
垢版 |
2019/02/27(水) 22:56:28.74ID:0yfFFlZD0
ポインタなんかアンマネージとのやり取りとBitmapdataでしか使ったことないな
アンマネージとのやり取りだとrefとかoutにしとけばあとは何も考えなくていいから助かる
0932デフォルトの名無しさん (ワッチョイ ffa7-3oSp)
垢版 |
2019/03/02(土) 20:18:35.52ID:zHCAEP8E0
>>928
HashSetやDictionaryは要素の数に左右されない方法でアクセスを行うから
含まれてるか否かといったような検索用途に限定すれば1個だろうが1万個だろうが常に高速にアクセス出来る
Listや配列は要素数に比例してアクセス時間かかるようになるが
0935デフォルトの名無しさん (ワッチョイ 9f2f-nxCI)
垢版 |
2019/03/03(日) 01:24:26.71ID:5kU0Dorz0
>>932
もとの要素がどこにあるかよくわからんけどな
HashSet作成して要素セットするオーバーヘッドがあるだろう
格納時にハッシュ値計算するから比較のコストが低いわけで、その分格納にコストがかかるんだぜ
0938デフォルトの名無しさん (ワッチョイ 179f-bDR4)
垢版 |
2019/03/03(日) 09:05:10.09ID:wNoJ2Bbs0
質問者ってそんなに偉いの?
そいつの質問に常に合致した話題じゃなきゃダメなの?
ひとつの質問があって、それを機会に派生してもいいし、あとは自由に意見しあえってもいい

どんだけ構ってほしいんだ
0940デフォルトの名無しさん (アウアウカー Sa6b-u4yZ)
垢版 |
2019/03/03(日) 09:27:17.06ID:qK6tlWl9a
ROM専からすると多少横道にそれてもいろんな手法を見れるほうが面白い
正直これくらいの質問なら好きにしろって感じだろ
0942デフォルトの名無しさん (アウアウエー Sadf-oIIs)
垢版 |
2019/03/03(日) 12:55:52.71ID:3ZaOSZpTa
述語の部分が、

(1) 全要素を常に == で評価
(2) 全要素を同じ演算子で評価するが、==以外の演算子も使われる場合がある
(3) 要素ごとに個別の評価方法

で最適な答えが変わりそうなんでその辺ははっきりした方がよかったかもね。
質問者は
(a==1) || (a==4) || (a==5) || (a==7)
の代替案を聞いてるんだから普通に考えれば要素数はそんなに多くないはずで
パフォーマンス云々は風呂敷広げすぎだろうw
0943デフォルトの名無しさん (ワッチョイ d763-vAvN)
垢版 |
2019/03/03(日) 13:55:56.58ID:Nfj27eon0
議論の途中で申し訳ないのですが
例えば独自クラスで、こんなのがある。

独自クラス{
string name {get; set;}
decimal num1 {get; set;}
decimal num2 {get; set;}


というのがあって、グリッドビューにList〈独自クラス〉をデータソースとして渡して表示させたいのですが
numは3,4,と増える可能性があります。(型はすべて同じ)
この場合にソースコードをメンテナンスすることなくnumの増減に対応するにはどのようにすれば良いでしょうか?
0947デフォルトの名無しさん (ワッチョイ ff1b-vAqM)
垢版 |
2019/03/03(日) 16:50:33.82ID:fEIk0m7q0
>>943
列が可変になるのならデータテーブル使うのが楽だと思う。クラスでやるとしたらexpandoで作るもなくはないと思うけど、それなら上にある通りDictionaryの方がシンプルではないかと。
0948デフォルトの名無しさん (ワッチョイ 9f2f-2ce8)
垢版 |
2019/03/03(日) 21:37:48.24ID:5kU0Dorz0
>>942
質問者がオーバーヘッド気になるとか発言してるので、パフォーマンスを考慮することに意味はあるんじゃね

まあ、ずらずらと手書き出来る程度の要素数ならどれ使っても大差ないって言っとくべきではあるかもしれんが
0965デフォルトの名無しさん (ワッチョイ b302-B/CD)
垢版 |
2019/03/14(木) 19:31:23.01ID:uF+nNtm+0
ライブラリレベルのオーバーヘッドを気にするのは止めましょう
ガベージコレクションが前提の言語を使ってる以上無駄な努力に終わります
性能絶対重視なら最初からCやASMで書いた方が良いし
よほどのスパーハカーでもない限りそんな努力が報われるほどの性能差にならないと思われます
0967 ◆QZaw55cn4c (ワッチョイ 6fe9-h1+v)
垢版 |
2019/03/14(木) 21:49:31.03ID:NTAm4EVS0
>>966
asm の教科書を書いていますが、「そのお題、asm で書く理由がない…」という深刻な問題に直面しています
asm で書くのに適したお題は何かありませんか?
0968デフォルトの名無しさん (ワッチョイ ffad-OnF4)
垢版 |
2019/03/14(木) 21:52:50.86ID:SvZaCm1k0
最初のCコンパイラかな
0974デフォルトの名無しさん (アウアウエー Sadf-FtxA)
垢版 |
2019/03/14(木) 23:43:27.63ID:fi3bTXEpa
>>972
必要を無視すればBCD演算とか。
最終的にBCD演算命令に翻訳されるようなコードをC#では(Cでも)書けないはず。

まあx86ならマルチメディア系の命令とかが王道なんだろうけどね知らんけど。
0976デフォルトの名無しさん (ワッチョイ ffc7-kdx8)
垢版 |
2019/03/15(金) 20:54:11.25ID:lWIPCB/k0
20年ぐらい前の1クロックが今より数十倍以上高価だった頃なら、
ASMによる人力高速化も(コスト的に見合うという点で)意味があった

Cコードで表現されてない知識も使ってちっちゃな関数でも結構簡単に数十クロック程度は高速化できた
Cコードで表現されてない部分を使えば、今もやろうとすれば高速化はできると思う(コストに見合わないだけで)
(変数aとbは実はいつも a<b なのでこのニーモニックが使えるとか、
ここの条件判定文は実は別の変数を計算したときのレジスタのフラグと同じ意味なので計算しなおす必要はないとか)

>>975 の話題に近いけど、
今ならASMの意味があるのはJITまわりとかかな?
0977デフォルトの名無しさん (ワッチョイ b302-PKKy)
垢版 |
2019/03/15(金) 21:48:50.55ID:D5NVJqkY0
コンパイラはパイプラインでデータハザードが起きない様に計算して命令の組み替えしたりする。
人間がそこまでできるかな?
オレは20年ぐらい前にmemcpyを高速化するためにアセンブラで組んだ。
今思うとCで組んでコンパイラに最適化させるべきだったかもね。
若気の至りだ。
0979デフォルトの名無しさん (ワッチョイ bf32-h1+v)
垢版 |
2019/03/16(土) 00:15:39.88ID:sQCNGdE30
ERMSBなんかを考えるとコンパイラも小手先なんかね
実行ハードでスケールするか、安定的な最適化か
汎用性を考えれば普通は後者になるだろうけど

というかC#ならCILレベルに留めるべきではねか
0982デフォルトの名無しさん (ワッチョイ ff61-ynPM)
垢版 |
2019/03/16(土) 15:56:32.11ID:zOgp3uDK0
>>980
wasmになる前のLLVMの段階で既に最適化が出来る。
あと、詳しくは分からないが、wasmになった後の最適化も、
Emscriptein の opt.exe で一応はできるらしい。
但し、asm.jsとの「グルー」が複雑に絡んでいるので、
何をやっているかを理解するのはかなり難しく、
wasmで最適化しているのか、asm.jsで最適化しているのかは
忘れてしまった。
0984デフォルトの名無しさん (ワッチョイ cf7b-Qay2)
垢版 |
2019/03/16(土) 20:27:45.17ID:0AnVFDDg0
スレ終わりなんだから内容気にせず埋めてしまえwここ即死判定もないし
GetFilesやGetDirectoriesのようなメソッドでエクスプローラーと同じ順に格納してくれるメソッドが欲しい
ソートし直すのたまに忘れてしまう
0992デフォルトの名無しさん (アウアウカー Sa47-GKay)
垢版 |
2019/03/20(水) 07:42:02.03ID:74ozQqG6a
Visual Studioって2015と2017両方いれて、2015だけ綺麗にアンスコできる?
0995デフォルトの名無しさん (アウアウカー Sa47-GKay)
垢版 |
2019/03/20(水) 12:21:41.32ID:NDw+q9p/a
>>993
ありがとう
そ、それは置いといて(笑)
どちらか片方だけアンスコしたときにもう片方に必要なもんを削除されたりはしない?
0996デフォルトの名無しさん (アウアウエー Sadf-FtxA)
垢版 |
2019/03/20(水) 12:41:43.72ID:JR1ztFlDa
VSに限らず明らかなNGは後から古いバージョンをインストールする行為だけのはず
アンインストールに関しては「意図としては」大丈夫なように作ってあるはず。

やってみたら?
最悪新しい方の修復インストールかOSの復元機能で何とかなるでしょ
1000デフォルトの名無しさん (ワッチョイ cf7b-Qay2)
垢版 |
2019/03/20(水) 18:54:52.24ID:jJ3kq/hZ0
2015の後に2017入れて2015アンインストールしたけど問題なかった
そのあとふと2015入れてみたら俺環だろうけど2015でビルド出来なくなった。2017の方は問題なし
そして問題のあった2015を再びアンインストールしたけど2017でずっと問題なし
>>995
2017だけ使う分には問題ないはず
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 697日 10時間 2分 52秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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