16/11/09 21:32:55.41 xe8Gs44h0.net
LINQのSelectで、メンバ「txt」が"a"の場合、
メンバ「intdata」の符号を反転するということをしたいのですが、
どのように書けば良いのでしょうか?
LINQで条件式が書けるとコードが随分小さくなるので
助かります!!!
class testClass
{
public string txt { get; set; }
public int intdata { get; set; }
}
static void Main(string[] args)
{
List<testClass> ts = new List<testClass>();
ts.Add(new testClass { txt = "a", intdata = 1 });
ts.Add(new testClass { txt = "b", intdata = 2 });
var tsFnc = ts.Select(e => e.txt == "a" ? e.intdata = e.intdata * -1); //←エラー
}
349:デフォルトの名無しさん (ブーイモ MM31-m5qj)
16/11/09 21:46:02.27 GH2RO7KKM.net
e.txt == "a"
? new testClass() { txt = e.txt , intdata = -e.intdata }
: e
350:デフォルトの名無しさん (ワッチョイ e9dc-dKGq)
16/11/09 21:58:25.28 EZkCstT40.net
それインラインのラムダで書いてしまうとコードの意図がわかりにくいから
static testClass Hoge(testClass e) => (>>345);
のようにメソッドとして外出しした上で ts.Select(Hoge) と書くのがいいんじゃないかな
メソッド本体をラムダの形式でスマートに記述できるようになったことだし、
ちょっと複雑なラムダには積極的にメソッド名を付けることを心がけるといい
351:デフォルトの名無しさん (ササクッテロレ Spbd-m5qj)
16/11/09 22:25:47.94 qcMduGDNp.net
>>344
そりゃ値を返さなければエラーになるよな
ts.Select( (e) =>{
if(e.txt=="a") e.intdata*=-1;
return e;
});
352:デフォルトの名無しさん (ワッチョイ 7220-8n5s)
16/11/09 22:41:05.99 xe8Gs44h0.net
>>347
期待した結果が出ました。
ありがとうございます!!!
色んなサイトを回ったのですが、なかなか条件式を書いているサンプルが無かったもので、助かります!!!
353:デフォルトの名無しさん (ワッチョイ 7220-8n5s)
16/11/09 22:44:01.71 xe8Gs44h0.net
>>346
従来のやり方を単純にラムダに変えるのではなく、
ラムダ的なスマートさも追及すべきということですね。
参考になります。
354:デフォルトの名無しさん (ワッチョイ 7220-8n5s)
16/11/09 22:49:39.71 xe8Gs44h0.net
ラムダというかLINQは凄い便利なんですけど、
なんか重いんですよね。
やぼったく書いていた処理をラムダにしたら
可読性が上がった反面、処理に倍の時間がかかるようになってしまい。。。
便利ゆえの宿命なのか、
使いこなせてないだけなのか、
その両方かって気がしています。
355:デフォルトの名無しさん (ワッチョイ 5eed-DGmA)
16/11/09 22:52:28.34 GViSYmlw0.net
適宜ToArrayしろってResharperが言ってた
356:デフォルトの名無しさん (ワッチョイ 8a02-2mfK)
16/11/09 23:09:04.87 xK7OwzcU0.net
LINQにしたら倍ほど遅くなるコードって例えばどんなん?
357:デフォルトの名無しさん (ワッチョイ e9dc-dKGq)
16/11/09 23:23:27.68 EZkCstT40.net
>>347はないわ
インプレースで更新するんなら普通に
foreach (var e in ts) if (e.txt == “a”) e.intdata *= 1;
でいいだろ
副作用がないように見えてこっそり更新してるってのは罠に近い極めてタチの悪いコード
358:デフォルトの名無しさん (ブーイモ MM31-m5qj)
16/11/09 23:31:35.24 GH2RO7KKM.net
>>352
実処理がメソッド呼び出しオーバーヘッドより少ない時かな
ボトルネックにはならないけど倍以上にはなる
359:デフォルトの名無しさん (ワッチョイ f023-8n5s)
16/11/09 23:31:54.26 0UIYYtz/0.net
もしLinqでやりたいのならForEachの拡張メソッドを書くか、IxをNuGetで入れるほうが健全だな
360:デフォルトの名無しさん (ワッチョイ 9f02-u2pL)
16/11/10 01:11:52.00 gZ1S6RPu0.net
>>354
サンプルコードある?
その論理でいくと、実処理がゼロの時が最も顕著で
通常のループよりLINQでのループ(列挙)が倍以上遅いってことになるんだが
繰り返し判定が遅いのかループの準備が遅いのか知らんが
LINQのほうが多少遅いとしても、どれだけ回したら有意な差がでるほどオーバーヘッドあるんだ
361:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)
16/11/10 01:38:07.59 zCCtWAZL0.net
何万回も回すとか、コンパイラを作るとかじゃなければメソッド呼び出しのコストはほぼ無視できるはず
たぶん、無駄のある書き方してるか、最適化を邪魔するような記述になってるんじゃないかな
362:デフォルトの名無しさん (ブーイモ MM6f-9MLS)
16/11/10 01:48:41.09 4pFcdHJlM.net
>>356
だからボトルネックにはならないって書いたじゃん
倍になろうが大したことない
遅い派の人は処理オーダー違うアルゴリズムと比較してるんだろ
363:0-WVKM)
16/11/10 02:05:10.17 wdbpo9Rt0.net
倍遅いって記述がアレで単にループ倍増しているだけじゃね
364:347 (ワッチョイ 033c-9MLS)
16/11/10 02:45:22.58 BAuxaWeL0.net
>>353
いや俺に言われても>>344が求めてるのは "LinqのSelectで~メンバ「intdata」の符号を反転する" 方法だからな
要求仕様がLinqのSelectで行うことを明示していて、intdataの反転した別インスタンスを返すではなくメンバ変数を反転すると定義しているならそう書くだけだ
こんな書き方するべきじゃないってのはその通りだがそれは>>344に言ってくれ
365:デフォルトの名無しさん (オッペケ Sr2f-WFrU)
16/11/10 03:27:07.24 +tyQ2nEUr.net
副作用は書かないのがコツ。
>>345が考え方としてはよろしい。
366:デフォルトの名無しさん (オイコラミネオ MMdf-h9op)
16/11/10 09:30:47.14 SIcifk3eM.net
IxとRxってどう違うの
367:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/10 10:49:41.41 otGHoxmha.net
普通に考えてそもそもSelectを使うのがおかしいw
>>353は途中まで普通のこと言ってるのに>>345は否定しないのはおかしいw
368:デフォルトの名無しさん (ワッチョイ b3dc-PwKp)
16/11/10 12:52:58.94 +0vOVL7/0.net
>>347は副作用ないしインスタンスの同一性に拘らないなら目的は果たせてるだろ
分かりにくい糞コードかもしれないが、コードの形をした糞である>>347のように完全否定されるほどのものではないよ
369:デフォルトの名無しさん (ワッチョイ 033c-9MLS)
16/11/10 13:14:42.66 BAuxaWeL0.net
こういう議論が面倒だから>>344の要求に忠実に書いた訳だが…
そもそもSelectを使うのが間違いというのは議論の余地がないからいいとして、副作用を避けるなら>>345はないわw
元のインスタンスと別インスタンスとを混在させて返すってのは罠じゃないのかと
new testClass() { txt = e.txt , intdata = e.intdata*(e.txt=="a"?-1:1) };
別インスタンスを返すなら符号の反転の有無に関わらず必ず別インスタンスで返すべき
370:デフォルトの名無しさん (ワッチョイ a723-teht)
16/11/10 13:43:53.32 o8sMendu0.net
つか、select使わずに拡張メソッド作ったほうがよくね
例えばこんなやつ
URLリンク(ideone.com)
371:デフォルトの名無しさん (ワッチョイ a70d-Cgco)
16/11/10 20:14:55.52 jVtZ8e8U0.net
WPFでVisual StudioのようなタブやドッキングウィンドウがあるUIを作りたく思い
そのようなテンプレートを探しています
「AvalonDock」というものは見つけましたが他にご存知なら教えてください
372:デフォルトの名無しさん (ブーイモ MMef-9MLS)
16/11/10 20:37:33.96 uFjDSD4sM.net
>>365
もう少し視野を広くした方がいい
データ転送オブジェクトや値オブジェクトといったワードで検索してごらん
そのあとはクエリ・コマンド分離の原則を調べよう
373:デフォルトの名無しさん (オッペケ Sr2f-WFrU)
16/11/10 21:24:48.41 +tyQ2nEUr.net
>>366
それの有り難みが理解出来る人は人類では、ほとんどいないw
374:デフォルトの名無しさん (ワッチョイ 7f20-teht)
16/11/10 22:02:45.75 INda+yqE0.net
下のようなコードで動的な数のtaskを作ることは
できるでしょうか?
static async Task ts()
{
List<Task> tsLists = new List<Task>();
var task1 = Task.Run(() =>{/*処理*/});
var task2 = Task.Run(() => {/*処理*/});
tsLists.Add(task1);
tsLists.Add(task2);
await Task.WhenAll(tsLists);
}
Task.WhenAllに配列を含めることができるのなら
taskもできるのではと思いまして
よろしくお願いします
375:デフォルトの名無しさん (ワッチョイ b77b-eMoa)
16/11/10 22:55:20.24 pEVMYV3p0.net
var task1 は、オブジェクトだろ?
当然、コンテナにも入れられる
376:デフォルトの名無しさん (ワッチョイ 4379-teht)
16/11/10 22:56:21.90 ApowNrKS0.net
C#の基本を理解していない奴がスレッドに手出したら死ぬからやめておけ
377:デフォルトの名無しさん (ワッチョイ 7f20-teht)
16/11/10 23
378::58:51.41 ID:INda+yqE0.net
379:デフォルトの名無しさん (ワッチョイ 8394-5NgJ)
16/11/11 02:00:56.00 /+d8XFyb0.net
>>370のコードの方は、まぁ、普通
(TaskふたつくらいならわざわざListは使わないけど)
しかし、>>373 は……どうしてこうなった
380:デフォルトの名無しさん (ササクッテロリ Sp2f-9MLS)
16/11/11 02:40:34.81 6sQwg64Zp.net
ソフトの設定をシリアル化するために一つのクラスにまとめたのはいいけどどうアクセスするのが普通なのかよく分かりません
全部public staticにして直接さわってもいいのでしょうか
381:デフォルトの名無しさん (ワッチョイ b37b-hNMU)
16/11/11 03:31:49.89 by5SD+CT0.net
switch文で文字列による分岐をする場合
var hoge="hoge";
// パターン1
var firstChar=hoge.SubString(0,1);
switch(firstChar){
case "a":
switch(hoge){
case "akina": ・・・
case "akiko": ・・・
case "asaka":: ・・・
case "amika": ・・・他ずらっと続く
}
break;
case "h":
switch(hoge){
case "honoka": ・・・
case "hosaka": ・・・
case "hoge": ・・・他ずらっと続く
}
break;
}
// パターン2
switch(hoge){
case "akina": ・・・
case "akiko": ・・・
case "asaka":: ・・・
case "amika": ・・・
case "honoka": ・・・
case "hosaka": ・・・
case "hoge": ・・・
}
パターン1、2でどちらが目的の文字列にたどり着く速度が早いのでしょうか
382:デフォルトの名無しさん (ワッチョイ a70d-Cgco)
16/11/11 04:06:38.01 qvZdoaA90.net
... DropShadowEffect.Color="{Binding RelativeSource={RelativeSource AncestorType={x:Type ContextMenu}},Path=(params:General.ShadowBrush).(SolidColorBrush.Color)}" />
この記述に間違いはありますでしょうか?
383:デフォルトの名無しさん (ワッチョイ 937b-teht)
16/11/11 04:43:55.58 MLb8BpI60.net
>>376
後者
384:デフォルトの名無しさん (ワッチョイ 3319-7KSV)
16/11/11 08:50:36.60 OnmZcNT90.net
>>377
Path中の括弧は基本的に添付プロパティの指定に使うもんだけど
型明示とかの意味で使おうとしてない?
385:デフォルトの名無しさん (ワッチョイ b77b-eMoa)
16/11/11 10:27:04.66 M2uBl8fv0.net
>>373
>List<Task> tsLists = new List<Task>();
>List<object> taskArry = new List<object>();
クラスの継承チェーンでは、Objectクラスがすべてのクラスの基本で、
Object以外のクラスは、すべてそこから派生している。
もちろん、Taskクラスも、Objectクラスの派生クラス
Objectクラスは親クラスで、より抽象的なもの。
Taskクラスは派生クラスで、Objectクラスより具体的で、限定されているため安全だから、
Taskをそのまま使えばいい
Taskクラスは、Objectクラスが持っている、属性・メソッドをすべて持っているから、
そのままObjectクラスとして使える。
(Task)task で、キャストする必要などない
オブジェクト指向を、基本から勉強すべし
386:デフォルトの名無しさん (ワッチョイ b77b-eMoa)
16/11/11 10:43:07.91 M2uBl8fv0.net
>>376-378
漏れも、辞書データベースを作る際、
aで始まる単語の表・bで始まる単語の表・cで始まる単語の表、などのように表を分けるか、
すべてを1つの表にするかで迷う
パターン1の方が、先に限定(枝刈り)されるから、速いような気がするけど、
caseが8つ以上あると、コンパイラが最適化して、
文字列をハッシュ化(整数化)するかも知れないので、パターン2の方が速いかも
387:デフォルトの名無しさん (スッップ Sd1f-PwKp)
16/11/11 12:20:00.46 B0EI7WuJd.net
トライ木って奴だな
実際Stringのハッシュにこれが使われてるかは知らんが
388:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/11 12:26:36.61 TqB+9XQ4a.net
>>376
実験して報告してw
あと、Dictionary<String, Action>を使うケースも追加で
でもまあ、人が手動でコーティングできる程度の分岐では直感的には
後者の方が速そうな気がする。
389:デフォルトの名無しさん (ワッチョイ 4bda-teht)
16/11/11 12:31:45.60 UQPlBidt0.net
DictionaryにFunc突っ込んだほうがスッキリしていいだろう
390:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/11 17:11:54.51 TqB+9XQ4a.net
>>376
あと細かいことだけど、「分類」に使うのが常に最初の1文字だけなら
素直にcharにした方が(つまりhoge[0])の方が速い気が
391:デフォルトの名無しさん (ブーイモ MM1f-9MLS)
16/11/11 20:20:29.68 Bi+hCNL7M.net
>>375
設定クラスとファイルは適度に分割する
staticは使わない
設定読み取りインターフェースとクラスを作る
設定に依存するクラスにインジェクションする
392:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)
16/11/11 22:27:34.93 +gNs9Nbk0.net
>>376
多分後者は最適化でジャンプテーブルに変わるのでそっちのほうが早いかなぁ
393:デフォルトの名無しさん (ワッチョイ b3dc-PwKp)
16/11/12 00:58:23.88 e739leKk0.net
>>376
本気で最適化するならプロファイル取って出現頻度順にソート
一般的にそういうのは分布がかなり偏るので統計的に速くなる
394:デフォルトの名無しさん (ワッチョイ 57ce-Cgco)
16/11/12 08:39:07.19 rgkWnGP70.net
内部で二分探索やジャンプテーブルに変わろうが、毎回文字列を比較してる時点で遅い
分量が不明ならDictionaryに変えるべき
自分でアルゴリズム実装する場合はC#ではunsafeにしない限り遅い
395:デフォルトの名無しさん (ブーイモ MM6f-9MLS)
16/11/12 08:56:42.02 NIqnWzQ8M.net
仮に倍早くなっても辞書をハードコードされたswitchで実装はしたくないな
396:デフォルトの名無しさん (ワッチョイ 57ce-Cgco)
16/11/12 09:36:17.93 rgkWnGP70.net
比較前に一意な文字列に変換して、文字列値としてではなくアドレスやハッシュ値を探索するのが一番速いんだけど
そういうのって標準にないんだっけ
397:デフォルトの名無しさん (ワッチョイ a723-teht)
16/11/12 09:47:10.83 IKX2nQlp0.net
昔見たLinuxのシェルのソースじゃ最初の方のスイッチ使ったロジックだったな
C言語の文字列の扱いなら速度差もあるかもしれんね
398:デフォルトの名無しさん (ブーイモ MM6f-9MLS)
16/11/12 10:14:16.67 gzcT9VGJM.net
>>391
Internというのがある
同じ値の文字列を同じインスタンスの文字列にして返す
399:デフォルトの名無しさん (ワッチョイ 9f02-u2pL)
16/11/12 15:14:10.12 Ayj+NND50.net
caseずらずらと並べると、順次検索するのか?
それだとAxxxは早いけどYxxxは遅いとかいうことになると思うんだが
単純にどっちが早いかなんて比較できんわな
400:デフォルトの名無しさん (ワッチョイ 7f17-C1EH)
16/11/12 15:33:15.88 duqbQJlR0.net
質問です
アプリにメインのフォームとモードレスなフォームの二つがあります
モードレスなフォームを操作したあとに
メインのフォームのボタンを押そうとすると
メインのフォームへフォーカスをあてるためにワンクリック、
ボタンを押すためにもう一回ワンクリックという具合に
2回クリックしないといけないのですが、
これをワンクリックに縮める方法はなにかありますか?
(一つのウィンドウにまとめる方法以外で)
401:デフォルトの名無しさん (ワッチョイ 033c-9MLS)
16/11/12 15:42:42.07 IIxQEFvy0.net
世界一IQの低いソースコードはこれ。ってネタを思い出したわ
>>394
switch はジャンプテーブルでの実装なので末尾のラベルであっても先頭のラベルと処理時間に差は出ない
また同じ理由から選択肢の数が増えても処理時間は殆ど増えない
402:デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
16/11/12 15:47:36.63 kNoTIrA70.net
>>396
おいおい,一度に全部を比較できないだろう?
Axxx は最初の方に比較するし
Yxxx は最後の方に比較するのだったら
Yxxx が確定するまでの時間は Axxx よりも大きくなるのでは?
ジャンプテーブルにしようが,個々の分岐によって時間差が出るのではないかね
403:デフォルトの名無しさん (ワッチョイ b75e-FQoa)
16/11/12 15:58:38.99 GAbwEXNG0.net
>>395
メインのフォームのボタンにMouseEnterでthis.Activate()とFocus()するようにしたら
フォーカスをあてるための分は省略できる
404:デフォルトの名無しさん (ワッチョイ 6bed-eZXk)
16/11/12 16:17:42.31 VXYUWtaP0.net
>>395
WM_MOUSEACTIVATEでググるといい
405:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp)
16/11/12 16:30:32.34 HzMgTMM90.net
>>397
ジャンプテーブル自体を知らないなら初心者スレだからまああるとは思うがジャンプテーブル知ってて
> Axxx は最初の方に比較するし
> Yxxx は最後の方に比較するのだったら
> Yxxx が確定するまでの時間は Axxx よりも大きくなるのでは?
はないわ
言葉だけ中途半端に覚えてる知ったかなんだろうな...
406:デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
16/11/12 16:34:08.09 kNoTIrA70.net
>>400
お前,物事を本当に突き詰めて考えたことが無いんだろう?
今回の文字列比較では差が出て当然
ジャンプテーブルといっておれば,とか間抜けにもほどがある
407:デフォルトの名無しさん (ワッチョイ c3a1-PwKp)
16/11/12 17:10:42.68 x4E8HTQB0.net
文字列比較でテーブル上の位置を特定するには結局ハッシュテーブルと同様の実装がされてるんじゃないの
低レベルな分僅かに高速に動くかも知らんが
408:デフォルトの名無しさん (ワッチョイ 7f17-C1EH)
16/11/12 17:11:17.70 duqbQJlR0.net
>>398-399
toolStripに対して、>>398のMouseEnterでthis.Activate()とFocus()する方法でできました
WM_MOUSEACTIVATEをハンドルする方法もあるのですね。勉強になります
ありがとうございます
409:デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
16/11/12 17:21:06.75 kNoTIrA70.net
>>402
お前すべての文字列についてハッシュ値が異なるように設計できるとでもいうのか?
ハッシュ値をジャンプテーブルに使うとはそういうことだ,そんな無茶な主張をするのか?
410:デフォルトの名無しさん (ワッチョイ a7da-teht)
16/11/12 17:24:24.15 5Ttb/Uep0.net
ハッシュテーブルと言ってる人につっかかるなよ
411:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp)
16/11/12 19:31:45.56 HzMgTMM90.net
>>404
知ったか君は完全ハッシュも知らないのになんでそんな偉そうなのか理解に苦しむ w
412:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)
16/11/12 19:37:48.04 SdQQy6fO0.net
現在はもっと最適化が入るかもしれんが、やっぱりハッシュテーブルだね
URLリンク(qiita.com)
ハッシュが衝突するときだけ文字列比較に行くんじゃないかな
まぁ、hashdosでもされない限りボトルネックにはなりにくいんじゃない?
413:デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
16/11/12 19:52:58.86 kNoTIrA70.net
>>406
で,不特定な文字列に対して比較する場合に完全ハッシュを実現することはできるの?
>>407
ハッシュが衝突するかどうかは,文字列比較までやってしまわないと判明しないのでは?
414:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)
16/11/12 20:01:20.50 SdQQy6fO0.net
>>408
聞く前に実装を確認したほうが早い
URLリンク(referencesource.microsoft.com)
415:デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
16/11/12 20:11:38.18 kNoTIrA70.net
>>409
なるほどね,不特定な文字列のみ対象とする連想配列ならば,まずはハッシュで付き合わせるのは「あり」なんだね
でも,特定文字列と不特定な文字列比較の case の実装について話しているのに,不特定な文字のみ対象の連想配列の例を出すのはどうかと思うよ
416:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp)
16/11/12 20:31:54.23 HzMgTMM90.net
>>408
> で,不特定な文字列に対して比較する場合に完全ハッシュを実現することはできるの?
コンパイル時に確定してるなら可能
完全ハッシュ アルゴリズム
とかでググれ
> ハッシュが衝突するかどうかは,文字列比較までやってしまわないと判明しないのでは?
ハッシュの衝突の意味がわかってないのか?
異なる入力に対して同一のハッシュ値が生成されることで当然コンパイル時にわかるから衝突するハッシュ値が生成された時だけ文字比較すればいいだけ
417:デフォルトの名無しさん (スフッ Sd1f-PwKp)
16/11/12 20:35:13.60 nrwwVciNd.net
>>410
なんか違和感。
不特定の文字列の中に、特定の文字列は内包されるような気がする。概念的な話になるけど。
418:デフォルトの名無しさん (ワッチョイ 7f13-ChQh)
16/11/12 20:41:39.03 kNoTIrA70.net
>>411
>コンパイル時に確定してるなら
というのは不特定の文字列とはいわないよ
何がくるか分からない文字列に対して完全ハッシュは無理
>>412
もう少しお話をおききしたいが
419:デフォルトの名無しさん (ワッチョイ 6f3c-PwKp)
16/11/12 20:54:31.74 HzMgTMM90.net
>>413
ああ、入力側の話か
分岐した後に一度だけ確認すればいいだけ
確認すべき文字列は確定してるから
420:デフォルトの名無しさん (スフッ Sd1f-PwKp)
16/11/12 21:31:32.38 nrwwVciNd.net
>>413
うーん、不特定な文字列に対して安全なら、それは特定の文字列に対しても安全では無いの?
パフォーマンスは置いといて。
この包丁は誰にとっても安全です、なら、この俺にとっても安全だろうし、>>413にとっても安全だと。
竹光でもさ。
ハッシュが衝突するならオープンアドレス法かなんかでシノニムうまく扱うしか無いけど。
現実問題、Knuthのあの関数でそうそう衝突はしないけど。
421:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/12 21:48:02.84 SCKfSUb2a.net
>>395
これ、せっかくVista以降改善された仕様を無にする行為だと思うんだけど
422:デフォルトの名無しさん (ワッチョイ 57ce-Cgco)
16/11/12 21:53:54.19 rgkWnGP70.net
ウィンドウのフォーカス周りって10で相当わけわかめな仕様になってない?
ところでわけわかめって通じる?
423:デフォルトの名無しさん (ワッチョイ 033c-Cgco)
16/11/12 21:56:33.32 tSXTeFta0.net
通じる(30代)
424:デフォルトの名無しさん (ワッチョイ 57ce-Cgco)
16/11/12 21:58:32.19 rgkWnGP70.net
何時頃だったか裏にいたウィンドウがアクティブになろうとしてブリンクするいらん仕様を盛り込んでから俺の中で既におかしくなってるけど
10でさらにわけわかめになってる
425:デフォルトの名無しさん (ワッチョイ 7f13-PwKp)
16/11/12 22:56:05.49 TM8SsXVk0.net
>>417
「意味とろろ」まで付けないとだめ
426:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 03:09:33.62 sNDrzqcx0.net
ファイルをサーチしてそのFileInfo.FilenameをListBoxに表示したい。
あとでItemをクリックしたとき、FileInfoの別のプロパティも参照したいのでFileInfo
自体もListBoxに保存しておきたい。
1.ListBoxを継承したコントロールを作るのは手間がかかる。
2.ListBoxを継承したクラスを作って、Formにaddすることもできるが、これだと
位置とサイズを設定するのが面倒だ。
なにか良い方法はないか?
427:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 03:28:05.31 sNDrzqcx0.net
自己解決した。
428:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 03:33:14.17 sNDrzqcx0.net
やっぱりだめやった。Objectは保存できるが、Stringも同時に保存したい。
二つ同時はむつかしいやろな。
429:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 03:33:57.68 sNDrzqcx0.net
やっぱり解決した。W thanks
430:デフォルトの名無しさん (ブーイモ MM6f-9MLS)
16/11/13 11:41:32.61 l4pNS+tdM.net
おめでとう
431:デフォルトの名無しさん (ワッチョイ d317-eZXk)
16/11/13 11:48:17.12 DlcyGqZP0.net
ワロタ
432:デフォルトの名無しさん (ワッチョイ 9f02-EqbM)
16/11/13 15:32:47.36 PMfnb6vA0.net
WPFのリストボックスとか任意の型のリストで持てるんじゃなかったっけ
433:デフォルトの名無しさん (オッペケ Sr2f-PwKp)
16/11/13 15:35:53.81 LTz5BAc9r.net
まじかよ糞フォームは独自リストをバインドすることもできないのか
434:デフォルトの名無しさん (ワキゲー MMff-UXqH)
16/11/13 16:33:34.20 bY6b9EITM.net
ListBoxはバインドできるよ
ListViewは無理だけど
435:デフォルトの名無しさん (オッペケ Sr2f-PwKp)
16/11/13 16:37:40.46 uxmSSaQNr.net
WPFのメリットってなに?
436:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 17:48:03.25 sNDrzqcx0.net
public static int CountList<T>(List<T> list, Func<T, bool> predicate)
{
int count = 0;
foreach (T element in list){
// predicateが参照するメソッドを、elementを引数に渡し呼び出している
if(predicate(element)){
// 真ならカウンタをインクリメント
count++;
}
}
return count;
}
CountList<T> これはT型の変数を返すという意味なのにリターンはstatic int
なのはなぜ?
437:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 17:53:19.93 sNDrzqcx0.net
public static T CountList<T>(List<T> list, Func<T, bool> predicate)
これの間違いか?
438:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 17:56:52.79 sNDrzqcx0.net
>WPFのメリットってなに?
UIをプログラムはできなくても絵の得意な人がやってモデルをプログラマーが専念
できるということかな。
439:デフォルトの名無しさん (ワッチョイ 033c-Cgco)
16/11/13 18:01:22.99 r+Z8oKZ70.net
WinFomsではやりにくいGUIも、WPFでなら作りやすいってケースはある
440:デフォルトの名無しさん (ワッチョイ b3dc-PwKp)
16/11/13 18:05:48.45 T5+9PjbV0.net
>>433
現実的にはデザイナーがBlendでXAML作るなんて不可能だけどね
デザイナーに期待できるITスキルは唯一HTML/CSSだけだよ
441:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/13 18:07:10.18 sNDrzqcx0.net
これはどういう意味? 複雑すぎてわからん。
static String ToResult<TSource>(this IEnumerable<TSource> source)
{
return "{" + string.Join(", ", source) + "}";
}
static String ToResult<TKey, TSource>(this IEnumerable<IGrouping<TKey, TSource>> source)
{
return source.Select(group => string.Format("Key={0}, Source={1}", group.Key, group.ToResult())).ToResult();
}
442:デフォルトの名無しさん (ワッチョイ b7ba-teht)
16/11/13 18:12:30.43 pC0Itdjh0.net
我慢してコードビハインド使わない縛りでやったらUIテストが楽そうだと思った。
443:デフォルトの名無しさん (オッペケ Sr2f-PwKp)
16/11/13 18:30:15.49 uxmSSaQNr.net
>>433
そーなのか
ずっとWinFormしか触ってないんだけど、WinFormのコントロールと同じような動作をWPFに求めてもそういうのは用意されてないの?
たとえばWinFormのDataGridViewには自動的に絡む幅とか調整してくれるメソッドとかあるけどWPFには用意されてないとか?
>>434
逆もある?
444:デフォルトの名無しさん (アウアウイー Sa0f-PwKp)
16/11/13 18:45:13.54 lfE9hohca.net
>>435
割と良いXAML来るけどな。うち。
445:デフォルトの名無しさん (スププ Sd1f-PwKp)
16/11/13 19:32:10.60 BXznGnDQd.net
>>434
その逆もあるよね
446:デフォルトの名無しさん (ワッチョイ a723-teht)
16/11/13 20:47:49.40 lO2MkZMm0.net
>>440
xamlは覚えるまでに苦労するけど、覚えちまったらFormsより遥かに素早く簡単に出来るんだけどな
447:デフォルトの名無しさん (ワッチョイ b33a-teht)
16/11/13 21:29:38.43 fclqIQTb0.net
>>431
> CountList<T> これはT型の変数を返すという意味なのに
その T は型引数に T を取るという意味
448:デフォルトの名無しさん (ワッチョイ a70d-Cgco)
16/11/13 22:11:24.34 e/ThXpat0.net
メニューのボタンを押したら異なるViewの特定の要素にアクセスしたいのですが、どうすればいいですか?
ElementNameでは同じViewに記述していないと駄目?みたいで困っています
RelativeSourceを使えば良いのでしょうか?でも記述方法がわかりません・・・。よろしくお願いします
Menu.xaml
<MenuItem Header="Test1表示" IsCheckable="True" IsChecked="{Binding IsVisible, ElementName=Test1}" /> ←ボタンを押したら
Test.xaml
<Grid x:Name="Test1"> ←これにあるIsVisibleが切り替わるようにしたい
449:デフォルトの名無しさん (ワッチョイ 4b49-VsRF)
16/11/14 00:31:18.15 HFnn5wUH0.net
>>440
Formの方がやりやすいGUIってどんなの?
450:デフォルトの名無しさん (ワッチョイ 57ce-Cgco)
16/11/14 01:58:30.32 ktK+BwK20.net
xaml←これなんて読むんですか!
451:デフォルトの名無しさん (ワッチョイ 9fa6-teht)
16/11/14 02:01:05.98 dUUXzUko0.net
ザームル
452:デフォルトの名無しさん (ワッチョイ 377b-U3jc)
16/11/14 03:26:59.64 OCTkBwGI0.net
static void Swap<T>(ref T lhs, ref T rhs){
T temp;
temp = lhs; lhs = rhs; rhs = temp;
}
呼び出しは
Swap<int>(ref a, ref b);
省略して
Swap(ref a, ref b);
これはダメか? これでもいいよな。
Swap( a, b);
453:376 (ワッチョイ b37b-hNMU)
16/11/14 04:35:40.38 v43jjczV0.net
テストプログラムを作ってみました。
URLリンク(ideone.com)
間違った評価していないか確認して頂きたく。
各テストを1000万回ずつ回した結果は
TestPattern1
test1 elapsed:198msec hitCounter:10000000
test2 elapsed:197msec hitCounter:10000000
test3 elapsed:196msec hitCounter:10000000
TestPattern2
test1 elapsed:192msec hitCounter:10000000
test2 elapsed:183msec hitCounter:10000000
test3 elapsed:183msec hitCounter:10000000
TestPattern3
test1 elapsed:192msec hitCounter:10000000
test2 elapsed:191msec hitCounter:10000000
test3 elapsed:186msec hitCounter:10000000
TestPattern4
test1 elapsed:261msec hitCounter:10000000
test2 elapsed:261msec hitCounter:10000000
test3 elapsed:261msec hitCounter:10000000
firstCharで絞っても大した差は無し。
Dictionary<string,Action>は遅い。
でした。
core i7 6700k Releaseビルド
Debugビルドにするとめちゃ遅い
454:デフォルトの名無しさん (ワッチョイ ef9f-WrRy)
16/11/14 05:52:45.45 /TJLzgQW0.net
それ最適化でswitchが丸ごと無くなるんじゃないの?
455:デフォルトの名無しさん (ワッチョイ 4bc0-WVKM)
16/11/14 12:20:13.87 SBSYakm50.net
どうせいつもの100万回で数百msの差だろと思ったら、試行回数も差も一桁違ってた・・・
考えるだけ無駄だわな
456:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/14 12:27:16.06 QoZcYnGka.net
>>448
繰り返し回数よりcaseの数の方が肝だと思うけど
457:デフォルトの名無しさん (ワッチョイ 6f7d-teht)
16/11/14 13:04:48.53 BB8aMjT80.net
DebugだとDictionaryだけ速いんだな
458:デフォルトの名無しさん (ワッチョイ b39f-cYps)
16/11/14 15:03:27.08 +U0ySF0b0.net
VS2013 .Net4.5.1
文字列のswitchがDictionary<string, int>→switch(int)みたいなILになってるので
test4がわずかに速いな
TestPattern2もstringCaseTestPattern1呼んでるぞ
459:デフォルトの名無しさん (ワッチョイ 5387-MJQ8)
16/11/14 17:41:26.21 Qgf5Rn5/0.net
話に割り込んでしまってすみません。
次のようなことをやりたいのですが、そもそも可能でしょうか。
メインフォームで時間のかかるループ処理をやっていて、
その進行状況を別フォームを表示して、
別フォーム上に配置したプログレスバーで表示したいと思っています。
以前、ループ処理自体を別フォームで行っいプログレスバー表示はさせたことはありますが、
今回は、ループ処理はメインフォームで行いたいと考えていますが、
そもそも可能なのでしょうか。
460:デフォルトの名無しさん (オッペケ Sr2f-WFrU)
16/11/14 19:12:23.97 xSfNgSMsr.net
>>454
今なら、async, await 一択。
461:デフォルトの名無しさん (ワッチョイ 6f7d-teht)
16/11/14 19:32:29.47 42tRiMkK0.net
>>448
public static readonly Action ~ で Actionのenumっぽいクラス作ると速い
462:デフォルトの名無しさん (ドコグロ MM5f-wOPQ)
16/11/14 19:51:26.73 kXxSR+DwM.net
>>454
できるけどはたから見たらなんでそんな構成なの?
って感じ
463:デフォルトの名無しさん (ワッチョイ 5387-MJQ8)
16/11/14 20:15:42.84 Qgf5Rn5/0.net
>>455
ありがとうございます。
async使った作り方を検討してみます。
>>457
本当はプログレスバーを表示しているフォームでループ処理を実行できればいいのですが、
引数が大量になったりしてしまうので、メインフォームで処理を行いたいのです。
プログレスバーを別フォームにするのは、まあ、見栄えの問題ですね。
464:デフォルトの名無しさん (スップ Sd1f-wOPQ)
16/11/14 21:22:47.48 xjbQt/rmd.net
>>453
なぜ今どき4.5.1?
465:デフォルトの名無しさん (スププ Sd1f-PwKp)
16/11/14 21:33:34.62 gWk7pXe+d.net
>>459
しょうもないことにつっかかるね
466:デフォルトの名無しさん (ワッチョイ b3dc-dJcJ)
16/11/14 21:35:10.48 aL/Lu1lD0.net
.NET4.6はAPIレベルではほとんど変わってないしどうせインプレース更新で互換性あるから
わざわざターゲットバージョンを上げて動作環境を狭める意味はほぼ無いだろ
467:デフォルトの名無しさん (ワッチョイ 6f3c-wOPQ)
16/11/14 21:46:05.31 NhhLZ04e0.net
>>458
別にやりたいようにやればいいんだが
> 引数が大量になったりしてしまうので
って言う理由はちょっとどうかと思う...
468:デフォルトの名無しさん (ワッチョイ 57cb-wOPQ)
16/11/14 22:34:09.85 3a+GOjdi0.net
>>459
いやあああああああああああ!
2.0ででちゃううううううう!
2.0
のままリリースしちゃうのぉおおおおおお!
恥ずかしいいいいいいい!
469:デフォルトの名無しさん (ワッチョイ 033c-wOPQ)
16/11/14 23:53:59.37 OlP0vwcQ0.net
>>461
サポート切れのバージョンをなんでわざわざ使ってんのかって突っ込みだろカス
470:デフォルトの名無しさん (ワッチョイ 57cb-wOPQ)
16/11/15 00:09:10.73 vnzlS/G+0.net
なんでって
だってバージョン上げたら
テストし直しじゃんよ
そんな金ないだろっていうか
客が金出さねぇって言ってる以上動けないだろ
って人多いと思うぜ
共存できない.netのバージョンの製品が同梱されてるときとか最新で組んでドヤ顔しててもうまく行くんだろか?
それとも全部最新の.netでコンパイルし直すんだろか?
471:デフォルトの名無しさん (ワッチョイ 57cb-wOPQ)
16/11/15 00:11:49.01 vnzlS/G+0.net
すまん知識0だけど
職場の人間も似たような感じだったので
結局よくわからず下位バージョンに合わせて出しちゃったぜ
472:デフォルトの名無しさん (ブーイモ MM1f-9MLS)
16/11/15 01:15:16.80 R9/5GWGeM.net
バージョン非互換なんて滅多に起こらんよ
仮に起こっても数個のコンポーネントを少し弄る程度で解決できる
無論アプリの作りがマトモならって前提だけどな
473:デフォルトの名無しさん (ワッチョイ 033c-wOPQ)
16/11/15 01:16:44.44 MJdWHDsF0.net
>>465
再コンパ�
474:Cルする必要はないって、アホの>>461ですら言ってるじゃねーか
475:デフォルトの名無しさん (スップ Sd1f-wOPQ)
16/11/15 01:18:25.54 5Vfxrfmvd.net
>>467
C#6の中点くらいかな、まああれはUnicodeのせいだけど
476:デフォルトの名無しさん (スフッ Sd1f-wOPQ)
16/11/15 02:29:36.45 7Oesxf9ud.net
>>467
それを「起こってない」と検証する金の出処の話じゃないの?
よく分かるけど。
起こってないのと、めったに起こらないし多分大丈夫、は違う。
鍵は全部締まってるの確認したよ、と、鍵締めたかどうか定かじゃないけどこの辺は治安いいから大丈夫、は全然違う。
477:デフォルトの名無しさん (ワッチョイ a70d-Cgco)
16/11/15 02:53:21.41 NoTRkZnD0.net
WPFアプリケーションで言語を動的に切り替え可能な多言語化をしたいのですが、
調べてみるとResource.resxを使ったりxamlのResourceDictionaryを使ったりと色々あって困惑しています。
どのようなやり方が最適解なのでしょうか?
478:デフォルトの名無しさん (ワッチョイ 033c-wOPQ)
16/11/15 05:52:35.99 MJdWHDsF0.net
>>470
サポート切れのバージョンを使い続けることによるリスクより、4.5.1から4.5.2へのインプレース更新の方がはるかに安全だろ
479:デフォルトの名無しさん (ワッチョイ 033c-wOPQ)
16/11/15 05:53:50.91 MJdWHDsF0.net
>>471
デフォルトのロケールは?
480:デフォルトの名無しさん (ワッチョイ 377b-EKpQ)
16/11/15 08:10:51.58 7W+Eb75M0.net
public class FI
{
FileInfo _ff;
string _dispdata;
public FI(FileInfo fi)
{
FI(fi, false); //★error になる。なんとかならないのか?
}
public FI(FileInfo fi, bool mode)
{
_ff = fi;
if(mode)
_dispdata = string .Format ("{0,20}:{1,-35} {2,-100}", _ff.CreationTime, _ff.Name, _ff.DirectoryName );
else
_dispdata = string .Format ("{0,20}:{1,-35}", _ff.CreationTime, _ff.Name);
}
public FileInfo finfo{ //★FileInfoという名前にしたいのにできない。何とかならないか?
get { return _ff; }
}
}
}
★をみて感想をください。
481:デフォルトの名無しさん (スフッ Sd1f-wOPQ)
16/11/15 08:37:11.25 7Oesxf9ud.net
>>472
サポート切れも何も。。
リスクとコストを天秤にかけるのは必要なことだろ。
はるかに、とか美味しい言葉で修飾せんと。
その程度の意識でみんなバージョン上げてんだなって思うな。
482:デフォルトの名無しさん (ワッチョイ 377b-EKpQ)
16/11/15 08:51:04.93 7W+Eb75M0.net
474解決しました。たんくす
483:デフォルトの名無しさん (スッップ Sd1f-wOPQ)
16/11/15 12:05:01.57 Sy8HLWAKd.net
>>475
お前サポート切れの.NET保証できんの?すげえな尊敬するわ
484:デフォルトの名無しさん (スフッ Sd1f-wOPQ)
16/11/15 12:14:17.64 7Oesxf9ud.net
>>477
保証をどう定義するかでしょ。
このシステムは動きます、の保証はするよ。
485:デフォルトの名無しさん (ワッチョイ 4bc0-WVKM)
16/11/15 12:24:10.02 pMl4CMoG0.net
MSは保証してないけど動くから保証しますで通用するからまた困るんだよな
486:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/15 12:32:14.65 CGrdF/ira.net
サポートっていうのは単に何か不具合が見つかった時にMS様がそれを修正する努力はします、
って程度の意味だからさあ...
ビジネストーク的には意味があると思うけど実質的な意味はあんまりないと思うけどね個人的には
487:デフォルトの名無しさん (スッップ Sd1f-wOPQ)
16/11/15 12:38:22.77 Sy8HLWAKd.net
>>478
脆弱性が見つかった時は?
488:デフォルトの名無しさん (スププ Sd1f-wOPQ)
16/11/15 12:55:55.09 Z3/Q/mWPd.net
客の社内環境が最新の.NET Framework許可してない場合も珍しくないしな
489:デフォルトの名無しさん (ササクッテロレ Sp2f-9MLS)
16/11/15 13:15:07.06 mY0gDrgyp.net
>>481
保守で定期的に金取ってるなら契約次第
そうでないなら「フレームワーク更新作業するなら発注してね」でいいだろ
490:デフォルトの名無しさん (スフッ Sd1f-wOPQ)
16/11/15 14:20:03.90 7Oesxf9ud.net
>>481
その脆弱性がシステムにとって致命的かどうか、
システム全体の検証工数と回避修正+波及箇所検証工数でどちらが勝つか(大体はラッパー作って使ってるから、その修正と波及箇所の動作検証で済む)
客が金どれだけ持ってるか、
の折り合いついた所だと思うよ。
491:デフォルトの名無しさん (ワッチョイ 6f7d-teht)
16/11/15 14:37:14.63 0U4qoaFD0.net
XP対応の4を使い続ける
492:デフォルトの名無しさん (スプッッ Sd1f-wOPQ)
16/11/15 15:43:51.26 ODQ0lCKgd.net
>>482
誰も最新の話なんてしてないよ
493:デフォルトの名無しさん (スプッッ Sd1f-wOPQ)
16/11/15 15:44:52.48 ODQ0lCKgd.net
>>484
つまり、脆弱性が見つかってから検証を始めるってことね
494:デフォルトの名無しさん (スフッ Sd1f-wOPQ)
16/11/15 17:05:58.01 7Oesxf9ud.net
>>487
いや、改修したり、OSやミドルやライブラリやフレームワークを更新したら、その検証をするけど、
脆弱性が発見された箇所自体はKBやらで出た内容からソース中の出現箇所出して、依存ツリー出して把握するくらいだよ、その時点では。
495:デフォルトの名無しさん (ワッチョイ 339a-zoBz)
16/11/15 17:08:40.62 /cCbWJxV0.net
既存のCで書かれたエミュレータをアンマネージドDLL化して、C#のGUIアプリから
呼び出して使えないかと思っています。
DLLの関数(1フレーム分進めるなど)を呼び出すことはできると思いますが、
その際にDLL内の特定の関数(ポートへの出力、画面更新など)�
496:ェ実行されたとき、 C#アプリ側でイベントとして捕捉する(C#側の関数が実行される)ようなことは できるんでしょうか。
497:デフォルトの名無しさん (ワッチョイ 8fe1-PwKp)
16/11/15 17:22:31.09 PhOBmSZe0.net
>>489
コールバックとかを使えば多分行ける
うまく行かないことがあればC++/CLIの出番かな
498:デフォルトの名無しさん (ワッチョイ 3319-7KSV)
16/11/15 17:24:00.58 weebeOlr0.net
そのDLLのソースを書き換えても良いのなら、
DLL側はコールバック登録関数を公開して必要なときに登録されてるコールバックを呼び出す
って形は取れるけど。
499:デフォルトの名無しさん (JP 0H6f-2n2A)
16/11/15 17:46:08.44 4QSE1fRAH.net
オンメモリで改ざん
500:デフォルトの名無しさん (ワッチョイ a70d-Cgco)
16/11/15 17:50:32.92 NoTRkZnD0.net
>>473
日本語です
501:デフォルトの名無しさん (ワッチョイ 4b49-VsRF)
16/11/15 22:28:52.68 YqUWOmsB0.net
>>471
Resource.resxを使うかResourceDictionaryを使うかは好み。
Resource.resxはGUIで設定できる。ロードする部分はシステムのロケール依存で良ければ自動。サテライトアセンブリが生成される
ResourceDictionaryはxamlを自分で記述する。ロードする部分も自分で作成。サテライトアセンブリが生成されない
個人的にはResource.resxの方が好きかな。
で、動的に切り替えって、起動時に切り替えるだけじゃ足りない?
任意のタイミングで既存のGUIもぱっと切り替えるのが必要だとすると、上記だけじゃ駄目で、
ラッパー的なクラスを作成して、それに対してバインディングするようにする必要がある。
502:デフォルトの名無しさん (ワッチョイ a70d-Cgco)
16/11/15 23:15:19.81 NoTRkZnD0.net
>>494
どちらとも動的に切り替えるところまでは作りました
どっちにするかまだ迷っています
どちらが世界的に主流でしょうか?
503:デフォルトの名無しさん (ワッチョイ b3dc-PwKp)
16/11/15 23:23:38.02 r0bdrrlQ0.net
>>495
WPF自体が主流には程遠いから好きにしろとしか
504:デフォルトの名無しさん (ワッチョイ 3703-M1Ou)
16/11/16 14:46:22.40 oJqix3AL0.net
ArrayListを使用した2次元配列を構築したいと考えております。
データは「実験項目」、「測定値」でファイルから読み出します。
一つの「実験項目」に対して任意数の「測定値」があり、任意数の「実験項目」があります。
ファイルを読み出さないとそれぞれの要素数がわからないため動的配列を使いたいと思っています。
「実験項目」、「測定値」共に1,000以内程度の予想です。
ArrayListは扱えていると思っているのですが2次元にする方法がよくわかりません。
ご教示いただけないでしょうか。よろしくお願いします。
505:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/16 15:20:15.99 Nmwy7smwa.net
>>497
ArrayListは10年以上前に役割を終えた旧式だからもう使っちゃだめ
代わりにList<T>でも使って
List<T>も2次元にはできないが、そもそも2次元にする必要がない
- TestItem(実験項目)にMeasured(測定値)のリストList<Measured>を持たせて、
- TestItemのリストList<TestItem>を作る
これでOKでしょ
知らんけど
506:デフォルトの名無しさん (ササクッテロレ Sp2f-9MLS)
16/11/16 15:31:15.35 E4kD/LBwp.net
>>497
TestItem(実験項目)にMeasured(測定値)のリストを持たせたくない場合はDictionary<TestItem,List<Measured>>とか
507:デフォルトの名無しさん (ワッチョイ 3703-M1Ou)
16/11/16 16:11:42.19 oJqix3AL0.net
>>498-499
ご教示ありがとうございます。
やはりArrayListは非推奨なのですね。
List、Dictionaryを勉強してみます。
508:デフォルトの名無しさん (オッペケ Sr2f-WFrU)
16/11/16 20:05:48.43 qGX/+c5Jr.net
何故に、そんなレガシーな亡霊がこの世に??
509:デフォルトの名無しさん (ブーイモ MMef-9MLS)
16/11/16 20:19:51.08 gtmrvLDzM.net
リファクタリングは悪
回帰テスト嫌だからコピペして新規追加しろ
日本はそういう文化だから理解しがたいレガシーコードで溢れかえる
510:デフォルトの名無しさん (ワッチョイ 4bc0-WVKM)
16/11/16 20:38:27.57 MMds4sI/0.net
>>501
キーワードでググったら上位にくるんじゃね
あの手の骨董品コードが残り続けるのは本当害悪でしか無いわ
511:デフォルトの名無しさん (ワッチョイ d3d6-teht)
16/11/16 20:49:59.04 Ws6HNRv60.net
文句はいつまでも互換性を持たせているマイクロソフトに言え
512:デフォルトの名無しさん (ワッチョイ 273c-WVKM)
16/11/16 20:57:40.76 MeLHc+gy0.net
初心者です。
先日測定機のプログラムを作りました。
データ取得の処理中に進捗状況を表示させたくなりました。
フリーズしてるのと勘違いされないようにしたいわけです。
少し調べてみたら、どうやらマルチスレッドなるもの
使うようなんですが、これについて優しく書かれている
サイトなどあればお教えいただければうれしいです。
よろしくおねがいします。
513:デフォルトの名無しさん (ワッチョイ b3dc-PwKp)
16/11/16 21:08:39.93 1s2sSz8X0.net
>>505
自分でThreadやTaskを明示的に作って使う必要があるケースは少ない
再現困難なバグを引き起こしやすいから、マルチスレッドを明示的に使うのは非同期プログラミングに慣れないうちはなるべく避けた方がいい
シリアルか独自のSDKがあるのか知らないけど、何かの外部装置からデータ取ってるなら非同期で取るAPIは用意されてるだろ?
もし同期APIしか用意されてない糞SDKなら仕方ないが、そうでない限りは用意された非同期APIを使うことを優先したらいい
データをどうやって取ってるのかをお前が晒せばもっと具体的なアドバイスもできる
514:デフォルトの名無しさん (ワッチョイ 37dc-WVKM)
16/11/16 21:10:52.22 QT5715if0.net
>>505
時間のかかる処理をバックグラウンドで実行するには?[2.0のみ、C#、VB] - @IT
URLリンク(www.atmarkit.co.jp)
.NET開発における非同期処理の基礎と歴史 - @IT
URLリンク(www.atmarkit.co.jp)
515:デフォルトの名無しさん (ワッチョイ cb94-5NgJ)
16/11/16 22:04:51.69 PcfUB0DB0.net
上のページはBackgroundWorkerの話で古すぎるし、
下のは歴史から説きおこしてるから最初から読むと長すぎる
async awaitについて書いてあるここ↓くらいから読むのがいいかと
URLリンク(www.atmarkit.co.jp)
非同期API使うにしても、async await がわかってないと辛いだろうし
516:デフォルトの名無しさん (アウアウオー Saff-IeI3)
16/11/16 22:20:31.36 5Ihw572qa.net
そもそも非同期とは何かを理解せずにいきなりそんなの読んで理解できると思えませんがw
517:デフォルトの名無しさん (ワッチョイ b3dc-PwKp)
16/11/16 23:41:29.23 1s2sSz8X0.net
初心者ならまずはEAPから入るのがいいんじゃないか
awaitみたいな黒魔獣と違って仕組みが単純明快だし、使う側からすれば完全にシングルスレッドで非同期ができる
排他処理だのデッドロックだのいきなりマルチスレッド特有の問題を抱え込むより、
まずは純粋に非同期プログラミングのところだけを抽出して順番に理解していけばいいと思うよ
518:デフォルトの名無しさん (ワッチョイ 2376-NcFo)
16/11/16 23:57:52.40 cEthX6dM0.net
もっと単純に↓のworkメソッドの中で10%ごとぐらいにラベル表示とかするだけの話じゃないかな
URLリンク(www.atmarkit.co.jp)
まずは目的達成を
519:デフォルトの名無しさん (ワッチョイ 9c7b-XpIe)
16/11/17 00:43:08.63 KQ/jS2NF0.net
ベジエ曲線の質問なんですが
P1(10,10) P2(10,40) P3(40,10) P4(40,40)
このような4点のベジエがあったとして、この放物線のP4の延長線を書きたい場合、
どのようにすればいいのでしょうか?
520:デフォルトの名無しさん (ワッチョイ 3f49-YqEk)
16/11/17 00:56:22.10 ViKAooID0.net
Invoke()も今は推奨されないんじゃないかなぁ
521:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/17 01:43:36.99 ypT0aoV/a.net
>>512
よく知らんけど、終了点の延長戦の方向は制御点から終了点向かう
ベクトルに等しいはずだから、後は簡単な高校数学じゃないの?
522:デフォルトの名無しさん (ワッチョイ 3faf-N7ik)
16/11/17 02:39:29.89 Dxu6gLWd0.net
スレッド周りは古い情報が残りまくりでどうしたらいいのか難しすぎ
非同期処理とかで検索すると普通にasync awaitが見つかるけどプログレスバーとかで検索すると未だにBackgroundWorkerを使うとか書いてるから困る
523:デフォルトの名無しさん (ワッチョイ 9c7b-XpIe)
16/11/17 03:14:03.30 KQ/jS2NF0.net
>>514
自分の説明が下手でも仕分けないのですが、
要するに2次曲線をベジエ曲線を使って描画し、
曲線の終点の延長を追記で描画したいということなのですが
524:デフォルトの名無しさん (ワッチョイ b5dc-2XGH)
16/11/17 07:07:26.21 iGNJFpBr0.net
>>516
端点とそこでの一次の傾きさえ一致してれば滑らかに繋がってるように見える。で、それは514で答えが出てる。
二次の傾きには任意性があって、どう決めたら最も美しいかはあくまでお前の感性の問題だ。
その感性を数学的に定義するのはお前の仕事。それができたら答えは出たようなもんだろ。
525:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 07:33:08.85 B+vLCAoF0.net
>516
俺もそれ興味あるな。でもペジェー曲線を描く関数は簡単にわかるだろ。
それをプログラム的にどう実現するかが知りたいってことだよね。
バーンスタイン基底関数のブレンディング関数ではN点の式になってるが、実際には
n点でかいたベジェにn+1点を書く場合全部書き直すのは不経済だよな。
bz = new Bezier(p1,p2);
bz = bz.add(p3);
bz = bz.add(p4);
bz = bz.add(p5);
bz = bz.add(p6);
foreach pp in bz{
bz.pset(whiteColor, pp.xl,pp.yl);//前のポイントを消す
bz.pset(RedColor, pp.x,pp.y);//今回を書く
}
こんな感じじゃないか?
グラフィックはやったことないから知らんけど。わからんな前のラインを消すのが
難しいな。
526:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 07:37:55.62 B+vLCAoF0.net
まあpsetよりもplineだろうな。普通のCADはベクトルで管理していて、書き直しは
やはり、前のラインを記憶していて、背景色で上書きして消すのだと思うよ。
527:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 07:46:11.48 B+vLCAoF0.net
bz = new Bezier(p1,p2);
bz = bz.add(p3);
bz = bz.add(p4);
bz = bz.add(p5);
bz = bz.add(p6);
bz.write(red, Style1);
これでいいや、制御点はaddするときにわかってるからね。
書くときにベクトルは全部記憶してるからwriteするときに消して書けばいい。
しかし、背景色が違うところをまたがるときはどうすんの? って問題があるな。
528:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 08:20:53.64 B+vLCAoF0.net
>516
ツールはなに? DirectXとか? どういう環境でかこうとしているんかで
かなり違うと思う。
DirectXだったら関数についてるんじゃない? 環境が正確にわかればサンプルを
書いてあげるよ。もしわからなければ、、、
529:デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)
16/11/17 08:43:40.73 UCWuOxD40.net
c#でluaを使うためのパッケージは誰がよろしいでしょうか?
530:デフォルトの名無しさん (スププ Sdb8-RUi6)
16/11/17 09:34:37.15 Nr9kHWsUd.net
背景の�
531:`画はXor Notの色じゃだめなぬ?
532:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 11:04:15.91 B+vLCAoF0.net
>背景の描画はXor Notの色じゃだめなぬ?
だめ。
psetなら隣の色を拾って背景代わりにするとできるが、、、lineだと背景の色を
覚えておかないとできないね。特に切り替わりのあるところ毎に背景を記憶して
覚えておかないとできないね。
BackColorXorline()なんて関数があって背景は別レイヤで記憶していてくれれば
できるけど。そんなのがあるんだろうな。きっと。
グラフィックコントローラの機能として何枚かのレイヤがあるんだろうね。でないと
移動するごとに大量のベクトルの書き直しとか間抜けすぎるものね。
だからレイヤーを指定して書き込みできるんじゃなかろうか?
533:デフォルトの名無しさん (オッペケ Sra9-2XGH)
16/11/17 13:02:06.96 lS45HIXqr.net
LINQって使うとハマりそうなところって非同期だから返ってくる結果がよくからん順番になるところと可読性が悪いところ?
メリットは少なめなメモリで動くってだけかな?
Rxとかは便利そうって思えるけど
534:デフォルトの名無しさん (アウアウカー Sa41-2XGH)
16/11/17 13:11:56.85 3nQkkv32a.net
LINQって非同期実行じゃなくて遅延評価じゃないの?
当然順番は変わらないし
更に言うとLINQの最大の利点て可読性の向上だと思ってたんだが…
535:デフォルトの名無しさん (ワッチョイ 9f94-Ctj4)
16/11/17 13:34:27.15 JueYqnTL0.net
返ってくる順番が不確定なのはPLINQだね
(AsOrderd()を使えば順番を維持させることもできるけど)
LINQで可読性が下がるというのは、もしかして、ラムダ式に慣れてないだけでは…
536:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 13:45:17.61 B+vLCAoF0.net
>526
遅延って意味がおかしいんじゃない。クエリを書いただけでは実行しないってこと
を遅延っていってるんだろうか? そんなの当たり前のように思えるが、、、
537:デフォルトの名無しさん (ワッチョイ 40d9-k96Z)
16/11/17 14:11:29.10 DsCEIrdz0.net
「C#プログラム効率的な書き方」でも読めば?
この本は嫌というほど詳細にLINQが解説してあるから
538:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 14:40:02.46 B+vLCAoF0.net
>529
そうだね。それ読んでみる。
539:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 14:40:19.41 B+vLCAoF0.net
var dtm = new DateTime();
var user = new MembershipUser("?????", "1", "obj", "3","4", "5",
true, true, dtm, dtm, dtm, dtm, dtm);
MembershipUserをテストしようとしてるんだが"?????"は何をいれたらいいの?
無効なプロバイダーでエラーになる。
540:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 14:41:28.03 B+vLCAoF0.net
正確には
追加情報:指定されたメンバーシップ プロバイダー名が無効です。
こんなメッセージ
541:デフォルトの名無しさん (ワッチョイ 774f-oPeX)
16/11/17 14:41:41.50 sJEahq+u0.net
また川俣本か・・・
542:デフォルトの名無しさん (JP 0H0d-2BAc)
16/11/17 14:41:59.02 9sPAmX71H.net
実行順序は直感と違うと思うな
副作用がなければ気にならんけど
543:デフォルトの名無しさん (ワッチョイ 40d9-k96Z)
16/11/17 14:49:43.65 DsCEIrdz0.net
>>533
まあね
この人はちょっとパラノイアじみるほどマニアックなところがあるけど、
全部読破すれば間違いなくLINQ to Objectsの力が付くと思う
「こんな使い方普通しないだろw」みたいなのも書いてある
544:デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)
16/11/17 15:17:23.72 UCWuOxD40.net
>>522です
開発環境はvisualstdioです
nugetで公開されているneolua moonsharp等のluaの拡張パッケージになにか違いがあるのでしょうか?
545:497 (ワッチョイ 7c03-EDxK)
16/11/17 17:31:32.94 K3Fbeu8d0.net
>>497 です。
せっかくレスいただいたのですが↓が理解できませんでした。申し訳ありません。
> - TestItem(実験項目)にMeasured(測定値)のリストList<Measured>を持たせて、
> - TestItemのリストList<TestItem>を作る
List<double> lsMeasTest = new List<double>();
でListを生成して
lsMeasTest.Add(dblData);
で測定値を格納していくのはわかります。
実験項目が増えたときにListを生成するのですが
List<double> 変数名 = new List<double>();
を必要数分実行する方法がわからないのです。
546:デフォルトの名無しさん (ワッチョイ 9f94-Ctj4)
16/11/17 17:59:43.84 JueYqnTL0.net
項目リストとしてList<List<double>>(List<double>を入れるList)を作っておく
測定値を入れたList<double>を作ったら、項目リストにAddしていく
ではだめなの
547:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 18:09:46.70 B+vLCAoF0.net
>573
これでどう?
var dict = new Dictionary<string, double>();
dict.Add("test1", 32.5);
dict.Add("test2", 3002.5);
dict.Add("test3", 199932.5);
548:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/17 18:15:42.30 B+vLCAoF0.net
var dict0 = new Dictionary<string, double>();
dict0.Add("test1", 32.5);
dict0.Add("test2", 3002.5);
dict0.Add("test3", 199932.5);
var dict1 = new Dictionary<string, double>();
dict1.Add("btest1", 32.5);
dict1.Add("btest2", 3002.5);
dict1.Add("btest3", 199932.5);
var Jkken = new Dictionary<string, Dictionary<string,double >>();
Jkken.Add("実験項目1", dict0);
Jkken.Add("実験項目2", dict1);
こうかな?
549:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/17 18:25:00.31 hkg3+6Yaa.net
>>537
大サービスでサンプル書いてみた
URLリンク(ideone.com)
550:デフォルトの名無しさん (ワッチョイ 21bd-2Ppy)
16/11/17 18:51:38.13 mx0eMjxm0.net
public private protected やstatic やプロパティって
どうしても必要なの?
実際に不正アクセスが起たりするもんなの?
何のために、何を防御しているのか理解できない。
551:デフォルトの名無しさん (ワッチョイ b179-XpIe)
16/11/17 18:53:40.36 VcCKxuk30.net
不正アクセスの為にアクセス制限している訳じゃないし、不正アクセスの防止は出来ない
staticは別
552:デフォルトの名無しさん (ワッチョイ 9cba-XpIe)
16/11/17 19:06:49.94 uPELr+Dd0.net
遂にGoogleさんも参加するって
URLリンク(mspoweruser.com)
553:デフォルトの名無しさん (JP 0H0d-2BAc)
16/11/17 19:49:50.72 9sPAmX71H.net
クラウド方面か
554:デフォルトの名無しさん (ワッチョイ b5dc-2XGH)
16/11/17 20:22:33.07 iGNJFpBr0.net
>>542
余計な情報を外に漏らすと、それを今後もそうだと期待して依存する奴が出てくる
で、お前が後で変えたら何で勝手に変えたんやワシのコードが動かへんようになったわシバクぞボケと言われることになる
日常生活でも「言ってしまったから今更変えづらい」ってあるだろ?
確かに約束できること以外には外に余計な情報を漏らさないようにすることで、
中身を弄っても何勝手に変えとんねんと言われない変更に強いプログラ厶になるんだよ
555:デフォルトの名無しさん (オッペケ Sra9-2XGH)
16/11/17 21:12:47.62 lS45HIXqr.net
>>529
>C#が提供するLINQ to Objectsは、多大な効能と価値を併せ持つ重要な考え方ですが、Cのポインタ同様に抽象的でわかりりにくいものです。
ってその本の解説に書いてるよ
やっぱわかりにくいんだね
556:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/17 23:20:42.92 iGNJFpBr0.net
それはSQLを知らないだけかと
SQLは伝統的なドカタ道具の中ではズバ抜けてセンスのいい技術だから
食わず嫌いしないで一度ちゃんと学んだ方がいい
557:デフォルトの名無しさん (ワッチョイ 9c42-XpIe)
16/11/18 00:06:56.41 BJrPV4Dl0.net
なぜLambdaがあるのにLinqなんて異物をぶち込んだのか
いまだにわからん
全部Lambdaでいいやん!
558:デフォルトの名無しさん (ワッチョイ b97b-AAsj)
16/11/18 00:09:34.50 ifsRvlL10.net
int i = 0;
int j = 0;
System.Console.WriteLine(i++); //0
System.Console.WriteLine(j+1); //1
この2つはなぜ結果が異なってしまうんでしょうか?
559:デフォルトの名無しさん (オッペケ Sra9-2XGH)
16/11/18 00:16:31.04 0j66y/nmr.net
>>548
SQLはMySQLを5年ほどやっとります
560:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/18 00:30:20.75 gT3Hev+M0.net
>>550
i++はインクリメントする前の値を返すから
561:デフォルトの名無しさん (ワッチョイ 40d9-k96Z)
16/11/18 00:46:38.58 iR5uoSVg0.net
>>547
最初にCのポインタをやった時を思い出すといい
初めは全然分からなかったろ?でも今は楽に分かるだろ?
要は慣れ
562:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/18 00:55:03.81 gT3Hev+M0.net
>>549
JoinとかGroupByとかSelectManyとかクエリ式無しだともはや暗号だろ
563:デフォルトの名無しさん (ワッチョイ 9fd4-XpIe)
16/11/18 01:08:31.02 Bd8bsuVC0.net
クエリ式なんか使ったことない
564:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 02:34:45.49 ayjJho0i0.net
>554
それ以外ならラムダ式でできるんか? 例えば? Where、selectを
ラムダ式で書いてみて。
ラムダ式の意味がわからんけど、まあ適当に「こんなんか」くらいで使ってる。
565:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 02:47:08.73 ayjJho0i0.net
LINQは便利やけど、OrderByとか気持ち悪くて使う気しないな。
単純にSortするよな。
多用するとパーフォマンスが無茶苦茶落ちると思う。
566:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 02:54:33.31 ayjJho0i0.net
public IEnumerable<string> Records
{
get
{
return doc.Element("root").Element("collections").Elements("own").Select(c => c.Descendants("ID").First().Value);
}
}
LINQだめじゃん。 こっちのほうが簡単。
public IEnumerable<string> Records
{
get
{
return doc.XPathSelectElements("//root/collections/own/ID");
}
} 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
567:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 02:57:24.22 ayjJho0i0.net
XpathとLINQを組み合わせてつかえんのか?
568:デフォルトの名無しさん (ワッチョイ 3a13-RUi6)
16/11/18 03:07:45.45 qODTBmiq0.net
ごちゃごちゃうるせーよ
569:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 03:13:27.93 ayjJho0i0.net
var elem = XElement.Parse(something);
var maz = elem.Element("vehicle").Elements("car").Where(c => ((string)c.Attribute("maker")) == "mazda"));
LINQはXMLみたいな階層構造を持ってるとダメじゃない?
これじゃ最初のItemしかサーチできないよ。
570:デフォルトの名無しさん (ブーイモ MM0d-N7ik)
16/11/18 08:03:56.85 /xmrja5bM.net
Linqがボトルネックになったことって意外とないよな
大量データってわかってれば最初から速度最適化考えるし
CLRはメモリ節約の効果がでかいんだね
571:デフォルトの名無しさん (ワッチョイ b5dc-2XGH)
16/11/18 08:16:20.86 gT3Hev+M0.net
それはLINQ使おうとする奴はだいたい一定のスキルがあるから無茶しないだけ
LINQを使おうと思えば使えるシーンで大量データに対して O(N^2)とかの馬鹿みたいなループをやらかす奴はやっぱりいるわけだけど、
そういう奴は当然LINQなんか使わない(使えない)
572:デフォルトの名無しさん (ワッチョイ ad5b-N7ik)
16/11/18 08:21:39.98 O/884XX90.net
トグルスイッチのようなインターフェースってWindowsformのコントロールにあるっけ?
ない場合どうやって作れる?
573:デフォルトの名無しさん (ドコグロ MMff-RUi6)
16/11/18 08:26:54.53 MmcaWbSXM.net
>>564
チェックボックスかラジオボタンで代用
574:デフォルトの名無しさん (ワッチョイ 7c03-EDxK)
16/11/18 08:35:21.61 nNUszv7+0.net
>>538-541
ありがとうございます!!
B+vLCAoF0さんのDictionaryを使う方法、
サンプルコードを準備していただいたhkg3+6Yaaさんの方法
どちらも勉強させていただきます。
本当に感謝です、ありがとうございました!
575:デフォルトの名無しさん (オッペケ Sra9-hkLf)
16/11/18 09:35:07.23 +KSaSaaRr.net
LINQ-To-XMLの立場は。
576:デフォルトの名無しさん (ワッチョイ b974-qiik)
16/11/18 09:39:13.30 MjC3oXMe0.net
知らない子ですねえ
577:デフォルトの名無しさん (ワッチョイ 1519-/ySS)
16/11/18 10:51:06.70 AfWqy2AK0.net
>>564
2値のTrackBarとか
578:デフォルトの名無しさん (ワッチョイ 88d4-XpIe)
16/11/18 12:42:20.87 qAuADTbv0.net
C++弄っていた人から見たら、C#もVBも大差ないよなぁ
ちょっと方言が違うだけ、みたいな
値渡しなのか参照渡しなのか、パッと見で分からないし
使った変数の後始末はFramework任せとか
579:デフォルトの名無しさん (ワッチョイ 1519-/ySS)
16/11/18 14:11:40.18 AfWqy2AK0.net
値渡しなのか参照渡しなのか分からないのはむしろC++とVBだと思うのだけど
呼び出される側だけ特別な記述&/ByRefして呼び出す側は変わらないって言う
C#は両者共に特別な記述ref/outが必要で
580:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 14:27:23.42 ayjJho0i0.net
C++とか触る気しないな。いらんことを書く量が多すぎて気が狂いそう。
その点F#をすこし触ってみたが、これは楽だな。C#からすると違和感があるが型推論が
しっかりしているので慣れると楽だと思う。
そもそもループを書くためのforとかがない。もしLINQを知らなかったら、ループなしで
どうやってプログラムを書くのか理解に苦しんだと思う。
581:537 (ワッチョイ 7c03-EDxK)
16/11/18 15:03:02.85 nNUszv7+0.net
>>537 です。
>>541 でサービスしていただきましたが現状とても難しいです。
=>ってなんでしょうか。ビルドできないです。。。
でも、もう少しがんばります。
582:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/18 18:15:45.39 fuS99ZTSa.net
>>573
使ってるC#のバージョンは?
それはC#6で導入された読み出し専用プロパティの省略記法
public List<Measured> MeasuredList => _MeasuredList;
は
public List<Measured> MeasuredList
{
get {return _MeasuredList;}
}
と同じ。
URLリンク(www.atmarkit.co.jp)
583:デフォルトの名無しさん (ワッチョイ ad5b-N7ik)
16/11/18 20:21:01.12 O/884XX90.net
>>565
そっかー残念
ありがとう
584:デフォルトの名無しさん (ワッチョイ 9fd4-XpIe)
16/11/18 20:30:49.38 P4KNWvky0.net
カスタムコントロールで適当なコントロールから継承して作ればいいだけ
簡単に作れるよ
585:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/18 20:45:44.35 ayjJho0i0.net
適当では作れんだろ。w
どのコントロールを継承してどのように作るのか。
586:デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)
16/11/18 20:53:06.96 cT5mFVkF0.net
keydownイベントをプログラムから発生させる方法はありますか?
587:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/18 20:54:03.59 fuS99ZTSa.net
まあ、Checkboxを継承するのが普通だろうねえ。
トグルスイッチっていうのはビジュアルをAndroidのUIにあるような奴にしたいってことかな。
ボタンの凹凸を切り替えるのでよければ何もしなくても標準でできるけど
588:デフォルトの名無しさん (ワッチョイ 3f49-YqEk)
16/11/18 21:37:55.69 8JkTMqoR0.net
見た目を重視しないなら、ユーザーコントロールでトグルボタン2個乗っけるのが手っ取り早い。
589:デフォルトの名無しさん (ワッチョイ 9fd4-XpIe)
16/11/18 21:51:48.89 P4KNWvky0.net
Checkbox継承してOnPaintで描けばいいだけだから、やってみるば簡単
Checkedで描画する画像切替えるとかで簡単に実現できる
サイズは画像のサイズに合わせてMaximumSizeとMinimumSizeを固定しちゃうとかかな
590:デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)
16/11/18 22:02:56.90 cT5mFVkF0.net
>>578です
実装できました
591:デフォルトの名無しさん (ワッチョイ 3f49-+6wY)
16/11/18 22:24:07.69 8JkTMqoR0.net
画像貼り付けて作ると高DPI対応は出来なくなるな
592:デフォルトの名無しさん (ワッチョイ 34ce-ke/V)
16/11/18 22:47:36.55 YsofO7c60.net
画像を高画質で持っておいて伸縮サセルノデス
593:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/18 22:49:04.17 fuS99ZTSa.net
EMFを使えば出来るんじゃない?
十分でかいビットマップを使ってもいいと思うけど
594:デフォルトの名無しさん (ワッチョイ 34ce-ke/V)
16/11/18 22:51:45.64 YsofO7c60.net
ところでWindows10によくある横にスライドするスイッチ(● )←みたいなやつ
あれの状態をプログラムから参照したいのですが、
ウィンドウハンドル的なものは取れますか?
595:デフォルトの名無しさん (ワッチョイ 5e23-tQqt)
16/11/18 23:09:11.73 RGR0MUcx0.net
>>585
つか、単純な図形だからGDI+で書いたほうが早いし、アニメーションさせたくなったら
画像はお払い箱です
596:デフォルトの名無しさん (ワッチョイ 3f49-YqEk)
16/11/18 23:12:28.84 8JkTMqoR0.net
EMFは存在をすっかり忘れていたな
C#でも扱えるんだね
デカいビットマップの縮小は、小さいパーツだとあまり綺麗に表示されないよ
マルチアイコンみたいに複数の解像度の画像を用意すればましだけど
597:デフォルトの名無しさん (ワッチョイ 3a13-8L7G)
16/11/18 23:29:21.49 +XmNVsSt0.net
自作のフォームアプリケーションを起動させて引数も渡したいのですがどうすればいいですか?
598:デフォルトの名無しさん (ワッチョイ 3a13-8L7G)
16/11/18 23:40:26.29 +XmNVsSt0.net
できました
599:デフォルトの名無しさん (ワッチョイ 5e7d-XpIe)
16/11/18 23:55:36.52 X3QgbGYl0.net
画像の拡大縮小はモード選べるよ。十分綺麗にできるでしょ
600:デフォルトの名無しさん (ワッチョイ 56e1-RUi6)
16/11/19 00:45:16.52 1yryIr4y0.net
>>559
普通に出来るだろ
601:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/19 02:06:11.41 E+HZm7+A0.net
>Checkbox継承してOnPaintで描けばいいだけだから、やってみるば簡単
>Checkedで描画する画像切替えるとかで簡単に実現できる
>サイズは画像のサイズに合わせてMaximumSizeとMinimumSizeを固定しちゃうとかかな
こんなことやったことないわ。どういう意味だ?
なんでChecboxを継承する必要があるんだ?
つかトグルSWだよな。
ちょっとやってみるんで指導よろしく。
OnPaintで描くってどういう意味だ?
情報が欠落しすぎ。
まずプロジェクトに追加するのは何?
ユーザーコントロール? クラス? コンポーネント?
どれだ?
602:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/19 02:08:07.35 E+HZm7+A0.net
checkboxを継承するってのだから、どう考えてもクラスだよな。じゃあまあ
追加クラス。
603:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/19 02:31:43.92 E+HZm7+A0.net
public class clsToggleButton : CheckBox
{
Form _pform;
public clsToggleButton(Form frm)
{
_pform = frm;
}
public void OnPaint (PaintEventArgs pevent)
{
//ここにトグルボタンを描く
if( this.Checked == false ){
//どこに描くんだろ?
}else{
}
}
}
604:デフォルトの名無しさん (ワッチョイ 5e7d-XpIe)
16/11/19 02:41:43.15 wlTmYqF50.net
追加→新しい項目→カスタムコントロール
で、追加されたコードのControlの部分をCheckBoxに。
OnPaintの所は、例えば↓みたいすれば、クリックするたびに赤と青が入れ替わる
protected override void OnPaint(PaintEventArgs pe)
{
using (var brush = new SolidBrush(Checked? Color.Red : Color.Blue))
{
pe.Graphics.FillRectangle(brush, ClientRectangle);
}
}
一度ビルドすると、ツールボックスに載るのでドラッグ&ドロップでフォームに配置できる
605:デフォルトの名無しさん (スププ Sdb8-RUi6)
16/11/19 02:54:11.98 aIswJeomd.net
>>593
一切欠落してなくない?
Checkboxを継承したコントロールだから、クラスで、コンポーネントで、ユーザコントロールだけど、そんな瑣末な話は置いといて、
とりあえず、OnPaintをオーバーライドして、graphicsにthis.checked描画してみたら?
606:デフォルトの名無しさん (ワッチョイ 5e41-mj3c)
16/11/19 04:05:39.65 N2eyluxh0.net
どうしてもタメになる書籍はC++をサンプルに使われてることが
多いから調べてはいるけど
C#に慣れちゃってるとまーキモチワルい
確かにこれが出来ればほとんど何でも出来るんだろうけど・・・
とりあえずC++最高ということで
607:デフォルトの名無しさん (ワッチョイ 5e41-mj3c)
16/11/19 04:38:58.99 N2eyluxh0.net
ちげぇ!
C#最高!です
なんとか基本的なことは出来るようになった希ガス
疲れたよ、もう
608:デフォルトの名無しさん (ワッチョイ 9fcf-RAPI)
16/11/19 06:23:34.01 S6bRHJ270.net
600げと
609:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/19 06:31:51.33 E+HZm7+A0.net
>Checkboxを継承したコントロールだから、クラスで、コンポーネントで、ユーザ
>コントロールだけど、そんな瑣末な話は置いといて、
うろ覚えの初心者には全然些末じゃないy。 無茶苦茶大事!!!
「Checkboxを継承したコントロール」ここにたどり着くのに一晩かかる。
ユーザコントロール is a コンポーネント
コンポーネント is a クラス
こういう関係なの? おお、初めて知った。
トグルボタン は ユーザーコントロールとして作るってことだね。納得。
でも空クラスを配置してCheckboxを継承してもおんなじことだよね。
何が違うの?
610:デフォルトの名無しさん (ワッチョイ 7c7b-8L7G)
16/11/19 06:56:43.78 E+HZm7+A0.net
>596
この説明は完璧って感じがする。
これからでかけるのでチェックできない残念。
611:デフォルトの名無しさん (ワッチョイ 9c7b-wMId)
16/11/19 08:53:15.23 gGKRRZRa0.net
>>601
各種コントロールの説明や、継承チェーンを見れば?
自分が作りたいコントロールに近いものを探して使うか、
そこから継承して派生したコントロールを作ればいい
クラスを使う時は、継承チェーンをさかのぼりながら、
ベースクラスにどういう機能があるか調べる
なぜなら派生クラスは、ベースクラスのすべての機能を持っているから
612:デフォルトの名無しさん (ワッチョイ 3f49-YqEk)
16/11/19 12:30:26.20 xW+PNGAl0.net
>>598
STLなんかは後付けで今風な機能を実装しようとしてて、無理やり感が半端ない。
613:デフォルトの名無しさん (スププ Sdb8-RUi6)
16/11/19 13:12:50.96 aIswJeomd.net
>>601
同じ事だよ。
ユーザコントロール一度画面から選ぶと、似たようなコード出て来るから、
そいつの継承元見てみ。
>>596は親切だな。
614:デフォルトの名無しさん (ワッチョイ 9c7b-wMId)
16/11/19 18:51:47.20 gGKRRZRa0.net
よく知らんけど普通、IDEにはクラスウィザードが付いている
新しいクラスを作るときは、クラスウィザードの画面で作れば、自動的にクラスが作られる
615:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/19 19:01:01.87 VKIYWaqIa.net
そんな使ってる人ほとんどいないと思うよw
ところで前から思うんだけどウィザードってのはポリコレ的にどうなのかね
616:デフォルトの名無しさん (ワッチョイ 3a20-XpIe)
16/11/20 19:20:37.60 DP6jtmXB0.net
ハードディスクのベンチマークを測る
簡易ツールを作りたくて
ランダムリード・ライトのサンプルを見つけたのですが
これでハードディスクへのランダムリード・ライトになるでしょうか?
//ランダム書き込み
using (System.IO.BinaryWriter rw = new System.IO.BinaryWriter(
File.OpenWrite(@"C:\temp\test.txt"), System.Text.Encoding.UTF8))
rw.Write("0");
//ランダム読み込み
using (System.IO.FileStream file = new FileStream(@"C:\temp\test.txt",
System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
byte[] bs = new byte[file.Length];
file.Read(bs, 0, bs.Length);
}
617:デフォルトの名無しさん (ブーイモ MMb8-RUi6)
16/11/20 19:28:04.56 aSeFXcOvM.net
ファイル名が違うな ¥¥.¥PhysicalDriveN だよ
618:デフォルトの名無しさん (ワッチョイ 777b-w7k2)
16/11/20 20:25:05.70 JNgwCyth0.net
ディスク書き込みは複数層でバッファリングがあるから
.NETのライブラリだけじゃ割と無理じゃないかな
619:デフォルトの名無しさん (ワッチョイ 3a20-XpIe)
16/11/20 20:32:04.76 DP6jtmXB0.net
\\.\PhysicalDriveN
なんてドライブの指定方法があるのですね
ただ、MBRを迂闊に書き換えると
クラッシュするとか
単純な読み書きは危険なようで
だから、公開されてるベンチツールには
シーケンシャルの読み書きしかないのかと思いました
情報ありがとうございます
620:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/20 22:44:41.11 ujJmR5b00.net
BindingSource のデータをLINQで扱いたいのですが
↓コードのbs に登録されているデータをLINQを使って
ID=100とID=200 のKamokuの平均値をだしたいのですがどんな風にやればいいでしょうか?
private List<Employee> emplist;
BindingSource bs = new BindingSource(emplist, string.Empty);
dataGridView1.DataSource = bs;
621:デフォルトの名無しさん (ワッチョイ 777b-w7k2)
16/11/20 23:11:49.40 JNgwCyth0.net
DataSourceがList<T>ならBindingSourceでフィルタできるわけでも無し
emplistにWhereとAverageするだけじゃね
Whereで要素数0になる可能性があるとちょっと面倒だけど
622:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/20 23:36:14.07 ujJmR5b00.net
>>613
DataTable でLINQ使うときは、↓のように var items = dt.AsEnumerable() でやれるのですが
>>612のようにやるときは、bs.AsEnumerable() みたいにはできないのですか?
DataTable dt;
var items = dt.AsEnumerable()
.Where(x => x["id"] == "100")
.Select(x => x["Koumoku"].ToString());
623:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/20 23:45:11.80 mNZMIvsS0.net
BindingSourceは一応IEnumerableを実装してるから
bs.Cast<Employee>().Where(…とできるんじゃないの
試したことないしそんなことしようとも思わないけど
624:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/20 23:51:53.85 ujJmR5b00.net
>>615
ありがとう試してみます。
625:デフォルトの名無しさん (ワッチョイ 3f49-YqEk)
16/11/21 02:19:09.69 iKiRpZRf0.net
>>611
>>610の言う通り、c#のStreamキャッシュとOSのファイルキャッシュがあるから、C#標準のライブラリだけじゃ実現できないよ。
P/InvokeでCreateFile()やWriteFile()/ReadFile()等のWIN32APIを呼び出す必要がある。
OSのファイルキャッシュは、CreateFile()でオープンする時にFILE_FLAG_NO_BUFFERINGを指定すれば無効にできる。
HDDに直接書き込みたいなら、ロックとアンマウントも必要になるんじゃないかな。
(DeviceIoControl()でFSCTL_LOCK_VOLUMEとFSCTL_DISMOUNT_VOLUME)
626:デフォルトの名無しさん (ワッチョイ 159a-2Ppy)
16/11/21 05:14:56.16 6eO9t+4E0.net
>>490-491
C#側でデリゲート型を定義して、起動時にコールバック関数のデリゲートをDLLに渡し、
DLL側では関数ポインタとして受け取ることで、C#側の関数をC側から適宜呼び出すことが
できました。C#側はunsafeを使ってないマネージコードなのに、Cから関数ポインタの形で
呼び出すことができるんですね、ちょっと驚きました。有り難うございました。
そこでもう一つ疑問が出てきたんですが、DllImportしたDLLがprintfした内容(標準出力)を、
WPFアプリやFormアプリで受け取って特定のコントロールに出力したり、GUIとは別に
コンソールウィンドウを出してそちらに表示するようなことはできるんでしょうか。
627:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/21 07:15:54.06 EumYM2T30.net
SetStdHandleとかでできるんじゃないの
素直に子プロセス作ってリダイレクトした方が簡単確実だけど
628:デフォルトの名無しさん (ワッチョイ fa23-tQqt)
16/11/21 08:51:20.53 hLpmxTjl0.net
int25とかint26思い出したわ
629:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/21 20:26:47.04 7M/YTSBB0.net
LINQで質問ですが
class Person
{
public string id { get; set; }
public DateTime Dateday{ get; set; }
public int kamoku { get; set; }
}
var items = (from tesA in bs.Cast<Person>()
where tesA.id == 100
select tesA.kamoku).avrage;
↑でID = 100 のkamoku の平均を求めていますが、
Datedayの最新10件で平均を求めるのはどんな書き方があるでしょうか?
後、IDの割合を求めるときに↑のwhere tesA.id == 100 を外したのをもう一回やって割り算しているのですが一括で書くときはどうすればいいでしょうか?
630:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/21 22:40:08.70 EumYM2T30.net
>>621
var av = (
from tesA in bs.Cast<Person>()
where tesA.id == 100
order by tesA.Dateday descending
select tesA.kamoku
).Take(10).Average();
IDの割合の方は質問の意味が分からない
631:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/21 23:04:49.74 7M/YTSBB0.net
>>622
ありがとうございます。参考になります。
IDの割合はAverageでなくてcountにしたほうがよかった。すみません
今は↓の結果 items100 / itemsALLで割合をだしています。これを1回で書きたいです。
var items100 = (from tesA in bs.Cast<Person>()
where tesA.id == 100
select tesA.kamoku).count;
var itemsALL = (from tesA in bs.Cast<Person>()
select tesA.kamoku).count;
632:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/21 23:08:48.37 EumYM2T30.net
items100 / bs.Count でいいだろそれ
633:デフォルトの名無しさん (ワッチョイ 5e41-mj3c)
16/11/21 23:14:12.37 lc1W0DQ40.net
一連のスイッチのオンオフを配列にいれて
シーケンスな処理を
634:するんですが そのままだと当然boolの配列です。 この場合、配列にする際にConvert.ToInt32を使い 0,1の配列にした方が処理速度が速くなる ということはあるでしょうか? 配列数は多くても64個です。 自分で確認はまだしてないですが 知見多き方お願いします。
635:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/21 23:22:00.28 7M/YTSBB0.net
>>624
>>623
すみません
items100 / bs.Count だと実際にやりたいので使えないので
↓ので items100 / itemsALL で書くときはどうしたらいいでしょうか?
var items100 = (from tesA in bs.Cast<Person>()
where tesA.id == 100
select tesA.kamoku).count;
var itemsALL = (from tesA in bs.Cast<Person>()
where tesA.id > 100
select tesA.kamoku).count;
636:デフォルトの名無しさん (ワッチョイ 0448-dXbs)
16/11/21 23:30:37.04 cS6E2DFI0.net
>>625
BitArrayを調べてみたらいい、非ジェネリックでは唯一つかえる存在かもな
637:デフォルトの名無しさん (アウアウオー Sa36-MfQN)
16/11/21 23:34:45.98 4A1pLeCTa.net
>>625
bool使って遅くなる理由があると思えんなあw
どっちにしろ要素数64じゃ差はでないでしょ。
「シーケンシャルな処理」とやらが単純な論理演算ならboolやboolの代用にintを使った配列ではなく、
intをビットワイズで使えば圧倒的に高速になるとは思う
638:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/21 23:55:19.26 EumYM2T30.net
>>626
短くしたいだけならこれでいいだろ
var persons = bs.Cast<Person>();
var items100 = persons.Where(p => p.id == 100).Count();
var itemsALL = persons.Where(p => p.id > 100).Count();
全件スキャンが2度走るのが気持ち悪いということなら、素直にループにするか、
もしくはこんなやり方もできないこともない
var items = bs.Cast<Person>().ToLookup(p => p.CompareTo(100));
return items[0].Count() / items[1].Count();
639:デフォルトの名無しさん (ワッチョイ fa73-XpIe)
16/11/22 00:12:53.34 FPsVs5Xk0.net
>>629
最後のがまだよくわからないけど調べてみます。
ありがとうございました。
640:デフォルトの名無しさん (ワッチョイ 7d7b-XpIe)
16/11/22 00:22:30.53 a+0IO69G0.net
>>630
もしかしてArrayListつかってる?List使った方がいいよ
bs = new List<Person>();
・
・
float result = (float) bs.Count(x => x.id == 100) / bs.Count(x => x.id > 100);
641:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/22 07:30:50.02 agBMDwRZ0.net
関係ないけどfloatは誤差が簡単に表面化するから
初心者スレ的には「最終出力以外には使うな」でいいと思う
642:デフォルトの名無しさん (ドコグロ MM74-EDxK)
16/11/22 09:09:41.67 iOkC5GDaM.net
>>574
遅くなりすみません。
教えていただいたコードでうまくいきました。
ありがとうございました。
使っているのはVisual C# 2013です。
643:デフォルトの名無しさん (ワッチョイ 40d9-k96Z)
16/11/22 13:19:07.30 xeeHVDvp0.net
VS2013のC#って>>574の書き方は出来なかったはずだが
644:デフォルトの名無しさん (ワッチョイ 5e41-mj3c)
16/11/22 20:13:44.80 ZJs8cfZ60.net
>>627
>>628
ありがとうございます!!
そうですよね、このくらいの要素数なら
どっちにしろ誤差レベルとは思いましたが
かなり有益な情報得られたんでよかったです
調べてみます!
645:デフォルトの名無しさん (ワッチョイ 800d-ke/V)
16/11/22 21:09:02.72 0tp2RUgI0.net
MVVMで、AのViewにあるボタンを押したらBのViewにBindingされているViewModelの値を変更するにはどうすればいいですか?
646:デフォルトの名無しさん (オッペケ Sra9-hkLf)
16/11/22 21:23:07.00 vhsrXRxUr.net
>>636
AとBにモデルとして関連があるなら、それ同士で連係。
画面としてのみの関連なら、ViewModel同士で連係。
647:デフォルトの名無しさん (ワッチョイ 800d-ke/V)
16/11/22 21:39:14.03 0tp2RUgI0.net
>>637
返信ありがとうございます
ViewModel同士の連係の方ですが、具体的にどのようにすればいいでしょうか?
例えばBのViewModelにあるIsEnabledというメンバー変数の値がある場合、StaticにしてAのViewModelでBのViewModelのインスタンスを作るのでしょうか?
648:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/22 21:48:58.09 agBMDwRZ0.net
>>638
AがBのインスタンスを作るんならStaticにする必要は全く無いだろ
しかし、そもそもVMを設ける目的は単体テストであるということを考えると、
VMが別のVMに明示的に依存するのは好ましくない
理想を言えば、AからBを直接newしたりBのメンバに直接アクセスするのではなく、
インターフェース (例えばIB) を定義してAからはIBを通してアクセスすることにして
AにBのインスタンスを外から渡してやるのがいい
インスタンスを渡すのはViewでやるかDIコンテナ使う
649:デフォルトの名無しさん (ワッチョイ 800d-ke/V)
16/11/22 21:58:02.53 0tp2RUgI0.net
>>639
ご教授ありがとうございます!
ただ、
>インターフェース (例えばIB) を定義してAからはIBを通してアクセスすることにして
>AにBのインスタンスを外から渡してやるのがいい
この部分がわからないので、コードで実例を教えてください
650:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/22 22:11:27.86 agBMDwRZ0.net
>>640
こんな感じ
interface IEnableable { public bool IsEnabled { get; set; } }
class AView {
private AViewModel vm;
public AView() {
this.vm = new AViewModel(BViewModelのインスタンスを取得());
}
}
class AViewModel {
private IEnableable b;
public AViewModel(IEnableable b) {
this.b = b;
}
void 連携する() {
this.b.IsEnabled = true;
}
}
class BViewModel : IEnableable {
public bool IsEnabled { get { 略 } set { 略 } }
}
BViewModelのインスタンスを取得() のところはnew BViewModel()でもいいしシングルトンでも何でもいい
MVVMでは依存関係はなるべくViewに押し付けるのが基本
651:デフォルトの名無しさん (ワッチョイ 800d-ke/V)
16/11/22 22:21:59.10 0tp2RUgI0.net
>>641
なるほど、このようにやるんですね
Viewに押し付けるというのも勉強になりました
本当にありがとうございます!
652:デフォルトの名無しさん (ワッチョイ 9cba-XpIe)
16/11/22 22:34:41.26 BBlq8Dj70.net
アプリケーションの設定を保持するクラスを作ってこれをシリアライズできるようにしたのですが、
このシリアライズしたものをapp.configに含むことはできるでしょうか?
ファイル名や場所をコードで指定するのが嫌だなぁという程度の理由ですが。
653:デフォルトの名無しさん (ワッチョイ b5dc-Th+s)
16/11/22 22:42:45.68 agBMDwRZ0.net
>>643
System.Configuration.ConfigurationSection
でも普通にSettings使った方が簡単だと思うけど
654:デフォルトの名無しさん (ワッチョイ 9cba-XpIe)
16/11/22 23:20:36.22 BBlq8Dj70.net
そうですか、無いですか。ありがとうございました。
655:デフォルトの名無しさん (ワッチョイ a030-qiik)
16/11/23 01:45:13.48 MGsJz9yg0.net
噛み合ってなさが絶妙
656:573 (ドコグロ MM87-f5kA)
16/11/24 09:42:16.88 EZR6VYZqM.net
>>573 です。
if(1 == args.Count()){
var t1 = new TestItem("デバイス1");
}
if (2 == args.Count()){
t1.AddMeasured(new Measured("電圧", "V", 1));
t1.AddMeasured(new Measured("電流", "mA", 100));
testItems.Add(t1);
}
上記のようにすると下IF文内のt1が”現在のコンテキスト内に存在しません”となってしまします。
IF分の条件式は例ですがt1の生成と値の格納が同条件でない場合は
どのように処置するべきでしょうか。
やりたいことはテキストファイルから各語を読み出して格納して数値演算(平均値、最大、最小、標準偏差)したいのです。
テキストに格納してある情報は次の順になります。
”項目名1”
”項目名1の測定値1”
”項目名2”
”項目名2の測定値1”
・・・
”項目名10”
”項目名10の測定値1”
”項目名1”
”項目名1の測定値2”
・・・
1回目の”項目名n”を取得したときに配列(List)を生成し
その後は”項目名n”により選択した生成済みの配列に”測定値n”を格納したいです。
本業はHWよりのためC#基礎がわかって無く申し訳ありません。
でも何とかできることは自分で処理したいと思っています。
よろしくお願いします。
657:デフォルトの名無しさん (ワッチョイ ab3a-/sNf)
16/11/24 10:18:45.81 +mUg/yMV0.net
>>647
if文の外で変数定義する。
『スコープ』の概念を学ぶべし。
今のレベルの基本が分かってない内はvar使わない方が良いかも。
varは便利だし正しく使えば特に害のない機能だけど、意味が分からないうちはやめとこう。
658:デフォルトの名無しさん (ドコグロ MM27-f5kA)
16/11/24 11:09:09.16 IyDqbIdrM.net
>>648
ありがとうございます!
チャレンジしてみます。
659:デフォルトの名無しさん (ワッチョイ a77b-rApL)
16/11/24 12:28:53.06 P/Ibr7r50.net
varは積極的に使うべきだよ。
660:デフォルトの名無しさん (ワッチョイ c748-AQyI)
16/11/24 14:01:47.31 4ySrR9x20.net
>>647
標準偏差は自前で計算してもいいけどMath.NET Numericsというのが既にある(nugetで入れる)
URLリンク(ideone.com)
こういうのってRの方が手っ取り早い気がする
CSVの読み込みからグラフ描画まで揃ってるしな
661:デフォルトの名無しさん (ワッチョイ 5b3c-/sNf)
16/11/24 14:14:09.14 G2Ig6Dqz0.net
>>648
var関係ないやろ
662:648 (ブーイモ MMc7-/sNf)
16/11/24 15:37:41.35 cupH4QVAM.net
>>650
それは同意する。積極的に使うべき。
ただ、スコープの理解がまだの方には少し毒と思っただけ。
>>649
異論も多いようなので、varに関しては先ほどの発言を気にせず自由にやって下さいな。頑張って!
663:デフォルトの名無しさん (JP 0Hdf-sTmH)
16/11/24 17:51:15.84 2Y5JG7GhH.net
質問します。
ファイルの存在を確認する方法についての質問です。
if (System.IO.File.Exists(@"C:\tmp\sample.txt"))
{
MessageBox.Show("ファイルは存在します");
}
else
{
MessageBox.Show("ファイルは存在しません");
}
上記例の場合、
「tempフォルダ内のsample.txtというファイル」
の存在を確認するようになっていますが、
同時に異なる2つのフォルダ内の2種類のファイルの存在を
確認するにはどうすればいいのでしょうか?
C:\tmp1\sample1.txt
C:\tmp2\sample2.txt
が同時に(又は片方だけ)存在する場合の処理を行いたいと思っています。
File.Exists((@"C:\tmp1\sample1.txt")&&(@"C:\tmp2\sample2.txt"))
みたいな書き方はできないんでしょうか?
やってみたらNGになったんで質問した次第です。
よろしくお願いします。
664:デフォルトの名無しさん (ワッチョイ c748-AQyI)
16/11/24 18:09:09.66 4ySrR9x20.net
この場合は
if (File.Exists(@"C:\tmp\sample.txt") && File.Exists(@"C:\tmp\sample2.txt")) {}
if (File.Exists(@"C:\tmp\sample.txt") || File.Exists(@"C:\tmp\sample2.txt")) {}
という風にFile.Existsが2回必要なわけだろ
可変で1個かもしれないし2個以上かもしれないというときは
string[] list = { @"C:\tmp\sample.txt", @"C:\tmp\sample2.txt", };
に対してLINQが使える
if (list.All(x => File.Exists(x))) {}
if (list.Any(x => File.Exists(x))) {}
665:デフォルトの名無しさん (スッップ Sdaf-/sNf)
16/11/24 18:11:35.21 HdRBGkCMd.net
>>654
Exists(..)を&&で繋げば良いよ。
666:デフォルトの名無しさん (ワッチョイ abdc-MM3T)
16/11/25 07:04:44.10 9jtEtGtN0.net
>>655
その場合、
list.All(File.Exists)
list.Any(File.Exists)
の方がスマート
667:デフォルトの名無しさん (JP 0Hdf-sTmH)
16/11/25 09:44:10.37 55zEIhIxH.net
654です。
ありがとうございました。
なるほど、パス名を&&でつなげてもだめですね。
File.Exists(・・・)&&File Exists(・・・)を
にしなきゃダメですね。
やってみたらうまくいきました。
LINQはあまりわかってないんですが、
やっぱり使えれればかなりコードを書くのが楽になるんでしょうか?
時間ができればやってみてもいいかなぁと思っていますが・・・
668:573 (ドコグロ MMcf-f5kA)
16/11/25 10:18:27.69 cWogpahDM.net
>>651 >>653
レスありがとうございます。
勉強になります。
徐々に方向性が見えて来たような気がしています。
ありがとうございます。
669:デフォルトの名無しさん (ワッチョイ 37d9-1MTn)
16/11/25 16:46:17.82 3a2jMeJO0.net
>>655を見て、RMAX未満のint乱数をN回発生させてori[]が含まれている回数を
LINQで数えたいのですが、こんなのになってしまいました
もっと簡単に書ける方法はないでしょうか
const int N = 10000;
const int RMAX = 10;
Random r = new Random();
int c = 0;
int[] ori = {1, 5};
Enumerable.Range(1, N).Select(i => new { j = r.Next(RMAX) }).Select(i => ori.Any(j => j == i.j)).Where(i => i).Select(i => { c++; return 0; }).ToArray(); // 0~9の中にori[]が含まれているかどうか調べる
Console.WriteLine($"{N}回の繰り返しで 0~{RMAX - 1} の中にori[]が含まれていたのは {c} 回でした。");
670:デフォルトの名無しさん (オッペケ Sre7-4iO2)
16/11/25 17:23:50.79 vVyJsUPAr.net
Selectに副作用書くな