19/10/21 23:10:37 VNGEIVP2a.net
>>197
やったことないけどこれかね
URLリンク(stackoverflow.com)
201:デフォルトの名無しさん (ワッチョイ d201-4js2)
19/10/22 00:05:51 QfoZv31s0.net
>>197
WPF?
202:デフォルトの名無しさん
19/10/22 10:07:09.79 YHA3BCJ70.net
事情が許されるなら、俺ならRTFをHTML変換してブラウザコントロールで表示させるけどね
203:デフォルトの名無しさん
19/10/22 13:25:27.23 K+KsF9ms0.net
試してなくて妄想だけけど、SuspendLayout/ResumeLayoutとか?
204:デフォルトの名無しさん
19/10/22 14:13:07.80 d9ySxcs9a.net
UIスレッド自体が輻輳してるんだからそんなことしても無意味w
別のプロセスか別のUIスレッドで動作させるか、
あるいは小分けにしてちょっとずつ更新するしかないと思うよ。
205:デフォルトの名無しさん
19/10/22 19:15:02.64 ZcCp4/Eg0.net
クラス継承の意義がイマイチ分かりません
継承したいクラスをフィールドに持たせ、共通して呼び出したいものはインターフェースとして定義するではダメなのでしょうか?
単にその両者をいっぺんにやるためにあるという理解で良いんでしょうか?
206:デフォルトの名無しさん
19/10/22 19:40:35.35 i9vhc7D5M.net
>>205
それで正しいよ
現代のオブジェクト指向においては継承は基本的に悪であって、極力使うべきではない
207:デフォルトの名無しさん
19/10/22 20:13:37.49 N0Z1aA+u0.net
継承が悪ってww
208:デフォルトの名無しさん
19/10/22 20:19:18.17 d9ySxcs9a.net
アポロ13って映画に「何のために作られたかではなく、何に使えるかが重要」って台詞が出てくるけど、
意義とか考えるのは(重要だとは思うけど)後回しにして、どういう使い方ができるかに
注視した方がいいよw
あと、オブジェクト指向関係で教条主義的なことを言う奴の話は眉に唾して聞いた方がいいw
これほんと
209:デフォルトの名無しさん
19/10/22 20:23:35.17 r8U+7Z6M0.net
.NET Framework は悪の塊だったのか
210:デフォルトの名無しさん
19/10/22 21:06:42.53 CFL/N7o/d.net
>>206
継承が悪ワロタ
211:デフォルトの名無しさん
19/10/22 21:09:14.91 V41RXtJo0.net
>>209
悪の帝国Microsoft製だししょうがないなw
212:デフォルトの名無しさん
19/10/22 21:18:38.74 mNMm3WnU0.net
あ~熊の力~身に付けた~
正義のヒーロー
213:デフォルトの名無しさん
19/10/22 21:22:00.43 5xlDZDfD0.net
毛深いヒーローだな
214:デフォルトの名無しさん
19/10/22 21:25:50.97 EpnXDCZ50.net
Windows上でVisual Studioを立ち上げて.Netアプリ開発をする以上
お前も悪の帝国の軍門に下って生きるしかないのだ
215:デフォルトの名無しさん
19/10/22 22:38:30.26 QfoZv31s0.net
>>205
例えばフレームワークが用意してるControllerクラスを継承して20個くらい個別のコントローラーを作る場合と
個別のコントローラーにControllerクラスを持たせて呼び出しを委譲できるようにする場合
前者はカスタマイズしたい部分だけ書けばいいけど
後者はControllerの機能を呼び出すためにはすべてのクラスに委譲メソッドを用意する必要がある
Controllerのメソッドを20個呼び出したいなら20x20で400個委譲メソッド定義をしないといけないしテストもしないといけない
自動生成することも可能だけどそれを考慮しても必要になる労力とコンポジションで得られる柔軟性が見合わない
それぞれメリット・デメリットあるからそれを判断して使い分けるのが良いと思う
216:デフォルトの名無しさん
19/10/22 23:18:54.36 HqQPrhiP0.net
正しいと思うけど、継承のメリットを論じている段階でその例はたぶん通じない。ちんぷんかんぷんだと思うよ
217:デフォルトの名無しさん
19/10/22 23:34:28.25 bvw0XH6G0.net
そういえばc#になってから継承なんて使った覚えがないな
218:デフォルトの名無しさん
19/10/22 23:58:38.64 R7p1RKV4a.net
継承を使うとしても、KeyedCollectionみたいな用意されたabstractクラスの具象を書くくらいかな
クラシックなWinForms/WebFormsと格闘するなら継承ありきなんだろうけど
219:デフォルトの名無しさん
19/10/23 00:02:52.61 rbcKcx270.net
>>217
Formクラスの継承しないの?
220:デフォルトの名無しさん
19/10/23 01:24:57.24 m9ZvUGV10.net
List型からカンマ区切りの文字列にしたいのですが、先頭や最後にカンマがくっついて欲しくありません
こう言う場合ってどう書くのですか?
string s = "";
int i = 0;
foreach(var l in data){
if(i == 0) i = 1;
else s += ",";
s += l.ToString();
}
自分なりにも書いてみたのですがなんか素人感が半端ないです
どうか正しいかっこいい書き方を教えてください、お願いします
221:デフォルトの名無しさん
19/10/23 01:45:41.03 r6mLYpNF0.net
var s = string.Join(",", data);
222:デフォルトの名無しさん
19/10/23 08:41:29.15 cIthmx8S0.net
Goは>>205のような考えで継承廃止したんじゃなかったっけ?
コーディングコスト削減メリットよりも階層複雑化によるデメリットの方が大きいから、やるならインターフェースでやれって考え方だったと思う
天下のグーグルがそう言ってるからには継承が悪という考えもあながち全否定は出来ない
223:デフォルトの名無しさん
19/10/23 08:46:57.96 tuL+TD2TM.net
var s = (data.FirstOrDefault() ?? "").ToString()
foreach(var l in data.Skip(1))
s += "," + l
var s = ""
foreach(var l in data)
s += "," + l
s = s.SubString(1)
224:デフォルトの名無しさん
19/10/23 09:10:24.37 9MFdyPJfa.net
>>222
Rustもそうだね
MSやAWSが最近推してる
225:デフォルトの名無しさん
19/10/23 09:26:46.08 s4ZmhUIr0.net
null許容型に属性のrangeが有効か否かを調べたいんだけど、msdnを見ても書かれてない
こういうときってどうやって調べるの??
226:デフォルトの名無しさん
19/10/23 09:57:02.37 N3BHKY3G0.net
Rangeということは「最小値と最大値」の範囲内かどうかなわけで
nullが範囲外なのは自明だからそもそも意味がなくね?
nullは特別に範囲内ってのなら「最小値と最大値」であるRangeじゃなくて他の方法で表現せざるを得ないよね
227:デフォルトの名無しさん
19/10/23 10:43:58.06 s4ZmhUIr0.net
>>226
単純にnull許容型にrangeの属性を付与できるか否かってだけが知りたい
それを調べようとしてもmsdnに記載が見つからないって話
これはtestが0-100になるように有効だろうけど
[range(0,100)]
int test
このrangeは有効なのか?って話
int?にはrangeは無効で101とか入れれますよーとかはないよねって調べたい
[range(0,100)]
int? test
228:デフォルトの名無しさん
19/10/23 11:17:48.75 V6w3FSpA0.net
>>227
range属性自体はstringに対してだろうが付与出来るし、変数への代入を阻止するものじゃない
それが有効かどうかはrange属性を使って検証する側の問題
229:デフォルトの名無しさん
19/10/23 11:52:11.96 mg9LIwfN0.net
ASPについて質問です
MVCにできてWebFormsじゃできないことってどんなのがありますか?
230:デフォルトの名無しさん
19/10/23 12:06:02.89 uTmD95wkr.net
>>229
できる出来ないの基準は?
既存コントロール使わないで全部時前で処理するなら、出来ないことが重い浮かばない
231:デフォルトの名無しさん
19/10/23 12:08:21.81 ixA2IUmYp.net
おまえには出来ないって基準だと思うよ。
232:デフォルトの名無しさん
19/10/23 12:24:26.05 rCWJ/rTC0.net
原理的に出来ないことは無いが大変さが違う
それこそMVCで組みづらいとか
EFとの相性とか
WebAPI作りたいとか
他言語や環境と混ぜづらいとか
つぶしが効かないとか
まあ新規でWebFormsはやめとけと
233:デフォルトの名無しさん
19/10/23 12:39:33.45 9MFdyPJfa.net
>>229
WebFormsは.NET Coreおよび.NET 5以降ではサポートされない
今から新規に使ってはいけない
234:デフォルトの名無しさん
19/10/23 12:51:59.22 s8yqv2t40.net
>>227
Required属性とnon-nullable型の関係を確認すればいいと思う
URLリンク(docs.microsoft.com)
235:デフォルトの名無しさん
19/10/23 13:28:03.53 m9ZvUGV10.net
>>221
>>223
ありがとう
こんなの全然知らなかったよ
236:デフォルトの名無しさん
19/10/23 13:33:09.12 mg9LIwfN0.net
>>233
あざます
237:デフォルトの名無しさん
19/10/23 21:40:38.12 F0j44unH0.net
System.Collections.ConcurrentにConcurrentListはないようですが、スレッドセーフなListはSyncronizedCollectionを使っておけということなんでしょうか?
238:デフォルトの名無しさん
19/10/23 22:41:24.14 MpJkuZYiM.net
>>237
ConcurrentListが無いのは、Listは外部ロックを使わない並行処理との相性が悪いからだろう
追加と参照のみならいいが、削除や途中への挿入があるとインデックスがほとんど意味を持たなくなってしまう
インデックスが指してる要素が他のスレッドによる変更の影響で突然コロコロ変わったら使い物にならないのは容易に想像できるだろ?
SynchronizedCollectionを使うとかそういう話じゃなくて、Listインターフェイスの設計が本質的に並行処理と相容れないんだよ
239:デフォルトの名無しさん
19/10/24 08:41:52.53 vvI6h2Gc0.net
あるソフト使ってて、これ使いたいなって機能があるんだけど、なんて検索かけたらいいのか分からないので知っている人いたら教えてください。
WindowsフォームアプリでVisualStudio2015で開発しています。
[欲しい機能]
例えばWindow内が横3段に分かれいるとすると
------------△---------------
みたいに境界が表示されててそこをクリックすると部分的に隠したり、表示させたりできる機能
今作ってるアプリが監視系で画面上に常駐するので、出来るだけWindow内の邪魔なボタンとかは隠しておきたいのでこの機能が欲しいです。
知ってる方いたらよろしくお願いします。
240:デフォルトの名無しさん
19/10/24 09:07:13.70 1uX6E7L9M.net
>>238
> 追加と参照のみならいいが、削除や途中への挿入があるとインデックスがほとんど意味を持たなくなってしまう
それマルチスレッドじゃなくても起きるだろ
241:デフォルトの名無しさん
19/10/24 09:13:17.80 EafWDMiv0.net
>>239
折りたたみできるpanel とかそんな感じ?
242:デフォルトの名無しさん
19/10/24 09:20:52.19 /Cd29/CTM.net
>>240
程度問題だよ
マルチスレッドなら尚更問題になるのは明らかだろ
結局、インデックスに依存する一連の操作の単位で外部ロックを取る必要があるから、concurrentである意味がない
243:デフォルトの名無しさん
19/10/24 09:51:08.72 1uX6E7L9M.net
>>242
バカなの?
インデックス使って途中挿入削除されたら問題なるのはマルチスレッドには関係ない
そもそも挿入削除してるのにインデックスで処理するのがおかしいと気づけ
244:デフォルトの名無しさん
19/10/24 10:07:31.16 /Cd29/CTM.net
>>243
シングルスレッドでの同期処理ならプログラマが意図しないタイミングで変更が加えられる可能性は少ないだろう
そもそも途中挿入しないならConcurrentBagでいいよね
自分で答え出てるじゃん
245:デフォルトの名無しさん
19/10/24 10:16:49.04 1uX6E7L9M.net
本質を理解できない馬鹿に説明しても無駄なことがよくわかるなw
246:デフォルトの名無しさん
19/10/24 10:31:37.86 /Cd29/CTM.net
同意するわw
247:デフォルトの名無しさん
19/10/24 10:50:43.90 8vd5prrh0.net
>>239
SplitContainer
248:デフォルトの名無しさん
19/10/24 10:58:17.20 xs21harXa.net
>>239
XPの時代のエクスプローラーのタスクパネルみたいなUIだと思うけど
たぶん標準では存在しない
折り畳みできるコンテナを自分で作れば、それを別のPanelの中に入れ子にして
AnchorとDockをうまく設定すれば似たようなことは一応できると思う。
PanelじゃなくてFlowLayoutPanelを使ってもいいかもしれないが、
たぶんかえって使いづらくなりそう
249:デフォルトの名無しさん
19/10/24 10:58:42.47 ey5VOEQr0.net
>>241
そうそう折りたたみって言葉がしっくりきます。
試しに「折りたたみ panel」あたりで検索したらやりたい事が出来そうなサイトが見つけられました。
SplitContainerとクリックイベントを使ってどうにか出来そうです。
また、境界部分にも三角形△などの目印を付けるやり方が載ってるサイトも見つかりました。
いいヒントになりました、ありがとうございます^^
250:デフォルトの名無しさん
19/10/24 10:59:35.93 mB9UhJoj0.net
>>247
>>248
ありがとうございます!
251:デフォルトの名無しさん
19/10/24 11:57:49.13 ABhN6CSmF.net
>>239
Collapse
Accordion
252:デフォルトの名無しさん
19/10/24 21:14:55.46 00cf/jHw0.net
頭に0個の参照って表示されてる関数が無数にあるんですが、これ要するに全く使われてないってことですよね
全部消してしまいたい……と思ったのですが実行する中でその関数が呼び出されるような可能性ってあったりするんでしょうか
253:デフォルトの名無しさん
19/10/24 21:35:06.52 VqWeglU2r.net
リフレクションとかで呼べば参照カウントされないんじゃない
254:デフォルトの名無しさん
19/10/24 21:45:06.56 B+sGouls0.net
なんかのライブラリとかで、publicで公開してるやつとかか?
255:デフォルトの名無しさん
19/10/24 22:06:02.66 Eph2jaDU0.net
複数のパネルをドラッグドロップできるようにしたんだけど
マウスが別のパネルに重なったときにパネルがいれかわってしまうんだけど
これを防ぐにはどうしたらいい?
256:デフォルトの名無しさん
19/10/24 22:14:48.43 yaJ1dO+n0.net
>>255
「パネル」をドラッグドロップしている?
一番上または必要なパネル以外のドラッグドロップを受け付けないようにしたら
257:デフォルトの名無しさん
19/10/24 22:17:00.79 WLXJ5XGy0.net
>>255
マウスダウンで「掴む」じゃん
マウスドラッグで「移動」するじゃん
マウスアップで「置く」じゃん
ドラッグ中の処理は移動なのにどうしてマウスダウンで掴んだやつ
以外が動いちゃうん?
258:デフォルトの名無しさん
19/10/24 23:01:06.74 yaJ1dO+n0.net
マウスがパネルに触れた時点でフォーカス変わったりしているとかだろ
最低限の動きするミニマムコード使って検証する方がここで聞くより解決しやすいと思うがね
そこでわからなかったらそのミニマムコード出してまた質問したらここの人も答えやすい
259:デフォルトの名無しさん
19/10/24 23:02:09.24 00cf/jHw0.net
>>253
あーなるほどでもそんな上等な書き方出来る人が作ったわけじゃないからなさそうですね
>>254
他の似たようなソフト作る時に使ったソースコードそのまま組み込んだっぽいですね見た感じ
260:元99
19/10/25 14:57:42.75 V0o5IG+qM.net
>>252
まあ普通はコメントにするよね
261:デフォルトの名無しさん
19/10/25 22:28:16.88 7rgagi6Z0.net
List<(string, int)> list;があった場合、listの中からlist.item2が最大の要素(string, int)を得るにはどうすればいいのですか?
var l = list.Max(x=>x.Item2);みたいにしたいのですが、int型が帰ってきてしまいます
262:デフォルトの名無しさん
19/10/25 23:07:56.88 GWerdevt0.net
OrderByDescending.FirstOrDefault
263:デフォルトの名無しさん
19/10/25 23:14:44.18 5pdqBhsBa.net
>>262だと計算量のオーダーが増える
先に Max で最大のItem2 (maxItem2)を求めておいて list.First(x => x.Item2 == maxItem2) のほうがマシ
264:デフォルトの名無しさん
19/10/25 23:23:22.26 6061P7ry0.net
何度も呼ぶときウゼーから関数にしろよ
265:デフォルトの名無しさん
19/10/25 23:42:07.16 5pdqBhsBa.net
経験上、こういう汎用的すぎるユーティリティ関数を自作して多用するのはお勧めしない
個人開発ならいいけど、多人数での開発になると新しいメンバーとの間で記述方法に差異を有む原因になり、結果的に負債化していくんだよ
ダサくてもこういうのは毎回ベタに書いたほうがいい
266:デフォルトの名無しさん
19/10/25 23:48:20.10 FLPxIKHC0.net
最大値持ってるタプルが複数あったら?
267:デフォルトの名無しさん
19/10/25 23:50:57.19 j4bjfcPpd.net
>>266
逆にどうして欲しいの?
268:デフォルトの名無しさん
19/10/26 00:25:28.36 ZMkO6rZZ0.net
>>267
知らんがな
269:デフォルトの名無しさん
19/10/26 00:58:09.61 rff7tW+R0.net
>>262-265
どの方法も一見正攻法ではないように見えるため、人に教えてもらわないことには勇気を出して書けませんでした
ありがとうございます
270:デフォルトの名無しさん
19/10/26 12:56:29.17 D4rlG2Pr0.net
>>265
計算量のオーダー気にしてんだろ?
他の奴が違う書き方して増えたら大変じゃん
あ、どうでもよかった?
271:デフォルトの名無しさん
19/10/26 13:18:11.26 sfokePbj0.net
素直に
int max = list.Max(tuple => tuple.Item2);
var maxValueItems = list.Where(tuple => tuple.Item2 == max);
でいいじゃん
int に重複がない前提なら Dictionary 化した方が捗る
272:デフォルトの名無しさん
19/10/26 14:40:36.29 +20I9h0L0.net
なんかいいロガー知らない?
3つのテキストに警告・注意・情報がそれぞれ安全に吐けるロガー