[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/09 11:23 / Filesize : 313 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

ふらっと C#,C♯,C#(初心者用) Part125



1 名前:デフォルトの名無しさん(ワッチョイ f97b-lsIp) mailto:sage [2016/10/08(土) 21:33:26.22 ID:KfBpvv2w0.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part124
echo.2ch.net/test/read.cgi/tech/1471004887/

■関連スレ
C#, C♯, C#相談室 Part91
echo.2ch.net/test/read.cgi/tech/1467142749/

■コードを貼る場合は↓を使いましょう。
ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

629 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/21(月) 20:26:47.04 ID: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) mailto:sage [2016/11/21(月) 22:40:08.70 ID: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) mailto:sage [2016/11/21(月) 23:04:49.74 ID: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) mailto:sage [2016/11/21(月) 23:08:48.37 ID:EumYM2T30.net]
items100 / bs.Count でいいだろそれ

633 名前:デフォルトの名無しさん (ワッチョイ 5e41-mj3c) [2016/11/21(月) 23:14:12.37 ID:lc1W0DQ40.net]
一連のスイッチのオンオフを配列にいれて
シーケンスな処理を

634 名前:するんですが
そのままだと当然boolの配列です。

この場合、配列にする際にConvert.ToInt32を使い
0,1の配列にした方が処理速度が速くなる
ということはあるでしょうか?
配列数は多くても64個です。

自分で確認はまだしてないですが
知見多き方お願いします。
[]
[ここ壊れてます]

635 名前:デフォルトの名無しさん (ワッチョイ fa73-XpIe) mailto:sage [2016/11/21(月) 23:22:00.28 ID: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) mailto:sage [2016/11/21(月) 23:30:37.04 ID:cS6E2DFI0.net]
>>625
BitArrayを調べてみたらいい、非ジェネリックでは唯一つかえる存在かもな

637 名前:デフォルトの名無しさん (アウアウオー Sa36-MfQN) mailto:sage [2016/11/21(月) 23:34:45.98 ID:4A1pLeCTa.net]
>>625
bool使って遅くなる理由があると思えんなあw
どっちにしろ要素数64じゃ差はでないでしょ。

「シーケンシャルな処理」とやらが単純な論理演算ならboolやboolの代用にintを使った配列ではなく、
intをビットワイズで使えば圧倒的に高速になるとは思う



638 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/21(月) 23:55:19.26 ID: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) mailto:sage [2016/11/22(火) 00:12:53.34 ID:FPsVs5Xk0.net]
>>629
最後のがまだよくわからないけど調べてみます。
ありがとうございました。

640 名前:デフォルトの名無しさん (ワッチョイ 7d7b-XpIe) mailto:sage [2016/11/22(火) 00:22:30.53 ID: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) mailto:sage [2016/11/22(火) 07:30:50.02 ID:agBMDwRZ0.net]
関係ないけどfloatは誤差が簡単に表面化するから
初心者スレ的には「最終出力以外には使うな」でいいと思う

642 名前:デフォルトの名無しさん (ドコグロ MM74-EDxK) mailto:sage [2016/11/22(火) 09:09:41.67 ID:iOkC5GDaM.net]
>>574
遅くなりすみません。
教えていただいたコードでうまくいきました。
ありがとうございました。

使っているのはVisual C# 2013です。

643 名前:デフォルトの名無しさん (ワッチョイ 40d9-k96Z) mailto:sage [2016/11/22(火) 13:19:07.30 ID:xeeHVDvp0.net]
VS2013のC#って>>574の書き方は出来なかったはずだが

644 名前:デフォルトの名無しさん (ワッチョイ 5e41-mj3c) [2016/11/22(火) 20:13:44.80 ID:ZJs8cfZ60.net]
>>627
>>628

ありがとうございます!!
そうですよね、このくらいの要素数なら
どっちにしろ誤差レベルとは思いましたが
かなり有益な情報得られたんでよかったです
調べてみます!

645 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 21:09:02.72 ID:0tp2RUgI0.net]
MVVMで、AのViewにあるボタンを押したらBのViewにBindingされているViewModelの値を変更するにはどうすればいいですか?

646 名前:デフォルトの名無しさん (オッペケ Sra9-hkLf) mailto:sage [2016/11/22(火) 21:23:07.00 ID:vhsrXRxUr.net]
>>636
AとBにモデルとして関連があるなら、それ同士で連係。
画面としてのみの関連なら、ViewModel同士で連係。

647 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 21:39:14.03 ID:0tp2RUgI0.net]
>>637
返信ありがとうございます
ViewModel同士の連係の方ですが、具体的にどのようにすればいいでしょうか?
例えばBのViewModelにあるIsEnabledというメンバー変数の値がある場合、StaticにしてAのViewModelでBのViewModelのインスタンスを作るのでしょうか?



648 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 21:48:58.09 ID:agBMDwRZ0.net]
>>638
AがBのインスタンスを作るんならStaticにする必要は全く無いだろ
しかし、そもそもVMを設ける目的は単体テストであるということを考えると、
VMが別のVMに明示的に依存するのは好ましくない
理想を言えば、AからBを直接newしたりBのメンバに直接アクセスするのではなく、
インターフェース (例えばIB) を定義してAからはIBを通してアクセスすることにして
AにBのインスタンスを外から渡してやるのがいい
インスタンスを渡すのはViewでやるかDIコンテナ使う

649 名前:デフォルトの名無しさん (ワッチョイ 800d-ke/V) [2016/11/22(火) 21:58:02.53 ID:0tp2RUgI0.net]
>>639
ご教授ありがとうございます!
ただ、
>インターフェース (例えばIB) を定義してAからはIBを通してアクセスすることにして
>AにBのインスタンスを外から渡してやるのがいい
この部分がわからないので、コードで実例を教えてください

650 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 22:11:27.86 ID: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) [2016/11/22(火) 22:21:59.10 ID:0tp2RUgI0.net]
>>641
なるほど、このようにやるんですね
Viewに押し付けるというのも勉強になりました
本当にありがとうございます!

652 名前:デフォルトの名無しさん (ワッチョイ 9cba-XpIe) mailto:sage [2016/11/22(火) 22:34:41.26 ID:BBlq8Dj70.net]
アプリケーションの設定を保持するクラスを作ってこれをシリアライズできるようにしたのですが、
このシリアライズしたものをapp.configに含むことはできるでしょうか?
ファイル名や場所をコードで指定するのが嫌だなぁという程度の理由ですが。

653 名前:デフォルトの名無しさん (ワッチョイ b5dc-Th+s) mailto:sage [2016/11/22(火) 22:42:45.68 ID:agBMDwRZ0.net]
>>643
System.Configuration.ConfigurationSection
でも普通にSettings使った方が簡単だと思うけど

654 名前:デフォルトの名無しさん (ワッチョイ 9cba-XpIe) mailto:sage [2016/11/22(火) 23:20:36.22 ID:BBlq8Dj70.net]
そうですか、無いですか。ありがとうございました。

655 名前:デフォルトの名無しさん (ワッチョイ a030-qiik) mailto:sage [2016/11/23(水) 01:45:13.48 ID:MGsJz9yg0.net]
噛み合ってなさが絶妙

656 名前:573 (ドコグロ MM87-f5kA) mailto:sage [2016/11/24(木) 09:42:16.88 ID: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) mailto:sage [2016/11/24(木) 10:18:45.81 ID:+mUg/yMV0.net]
>>647
if文の外で変数定義する。
『スコープ』の概念を学ぶべし。

今のレベルの基本が分かってない内はvar使わない方が良いかも。
varは便利だし正しく使えば特に害のない機能だけど、意味が分からないうちはやめとこう。



658 名前:デフォルトの名無しさん (ドコグロ MM27-f5kA) mailto:sage [2016/11/24(木) 11:09:09.16 ID:IyDqbIdrM.net]
>>648
ありがとうございます!
チャレンジしてみます。

659 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/24(木) 12:28:53.06 ID:P/Ibr7r50.net]
varは積極的に使うべきだよ。

660 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/24(木) 14:01:47.31 ID:4ySrR9x20.net]
>>647
標準偏差は自前で計算してもいいけどMath.NET Numericsというのが既にある(nugetで入れる)
ideone.com/kv7bLQ

こういうのってRの方が手っ取り早い気がする
CSVの読み込みからグラフ描画まで揃ってるしな

661 名前:デフォルトの名無しさん (ワッチョイ 5b3c-/sNf) mailto:sage [2016/11/24(木) 14:14:09.14 ID:G2Ig6Dqz0.net]
>>648
var関係ないやろ

662 名前:648 (ブーイモ MMc7-/sNf) mailto:sage [2016/11/24(木) 15:37:41.35 ID:cupH4QVAM.net]
>>650
それは同意する。積極的に使うべき。
ただ、スコープの理解がまだの方には少し毒と思っただけ。

>>649
異論も多いようなので、varに関しては先ほどの発言を気にせず自由にやって下さいな。頑張って!

663 名前:デフォルトの名無しさん (JP 0Hdf-sTmH) mailto:sage [2016/11/24(木) 17:51:15.84 ID: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) mailto:sage [2016/11/24(木) 18:09:09.66 ID: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) mailto:sage [2016/11/24(木) 18:11:35.21 ID:HdRBGkCMd.net]
>>654
Exists(..)を&&で繋げば良いよ。

666 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/25(金) 07:04:44.10 ID:9jtEtGtN0.net]
>>655
その場合、
list.All(File.Exists)
list.Any(File.Exists)
の方がスマート

667 名前:デフォルトの名無しさん (JP 0Hdf-sTmH) mailto:sage [2016/11/25(金) 09:44:10.37 ID:55zEIhIxH.net]
654です。

ありがとうございました。

なるほど、パス名を&&でつなげてもだめですね。
File.Exists(・・・)&&File Exists(・・・)を
にしなきゃダメですね。

やってみたらうまくいきました。

LINQはあまりわかってないんですが、
やっぱり使えれればかなりコードを書くのが楽になるんでしょうか?

時間ができればやってみてもいいかなぁと思っていますが・・・



668 名前:573 (ドコグロ MMcf-f5kA) mailto:sage [2016/11/25(金) 10:18:27.69 ID:cWogpahDM.net]
>>651 >>653
レスありがとうございます。
勉強になります。

徐々に方向性が見えて来たような気がしています。
ありがとうございます。

669 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/25(金) 16:46:17.82 ID: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) mailto:sage [2016/11/25(金) 17:23:50.79 ID:vVyJsUPAr.net]
Selectに副作用書くな

671 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/25(金) 17:46:39.77 ID:k5F1VYSo0.net]
つか毎回乱数作ると検証しようがないよな
int[] randoms = new int[N];
for (int i = 0; i < N; i++)
randoms[i] = r.Next(RMAX);

というのがあったと仮定して以下を実行する
c = randoms.Where(ori.Contains).Count();

672 名前:デフォルトの名無しさん (ブーイモ MMc7-/sNf) mailto:sage [2016/11/25(金) 17:51:48.96 ID:yM8tzyplM.net]
int count = Enumerable.Range(1, N)
.Select(_ => r.Next(RMAX) )
.Count(ori.Contains);

673 名前:デフォルトの名無しさん (ワッチョイ 27ba-lM3r) mailto:sage [2016/11/25(金) 23:44:37.58 ID:8749fss/0.net]
検証は普通、同じシードの疑似乱数使うだろ。

674 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/26(土) 05:41:07.62 ID:BlR4fLnAr.net]
そこで、Stateモナド登場。

675 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/26(土) 15:45:30.50 ID:q0gSFGbR0.net]
>>661-663
ありがとうございます

Select()に副作用書くのはListだとForEach()があるのですが、配列だと使えないので
無理矢理感がありますが許してください(汗

676 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/26(土) 15:59:56.88 ID:BlR4fLnAr.net]
>>666
許せぬ。
普通に>>663で良いんでないの?

677 名前:デフォルトの名無しさん (ワッチョイ 1349-lVzu) mailto:sage [2016/11/26(土) 16:01:54.05 ID:pkHe6RQg0.net]
>>666
ゆるさん。
根本的にLINQの使い方が間違ってる。



678 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/26(土) 16:46:10.56 ID:q0gSFGbR0.net]
>>667-668
駄目ですか
精進します

>>664
こうやってみました
DateTime dt = DateTime.Now; // 乱数のシード値に使う

Random r = new Random((int)dt.Ticks);

// 乱数測定1

Random r = new Random((int)dt.Ticks);

// 乱数測定2

以下続く

679 名前:デフォルトの名無しさん (ワッチョイ 37d9-1MTn) mailto:sage [2016/11/26(土) 16:58:09.08 ID:q0gSFGbR0.net]
あ、違った

DateTime dt = DateTime.Now; // 乱数のシード値に使う

Random r = new Random((int)dt.Ticks);

// 乱数測定1

r = new Random((int)dt.Ticks);

// 乱数測定2

以下続く

680 名前:デフォルトの名無しさん (ブーイモ MMaf-VGur) mailto:sage [2016/11/26(土) 17:05:31.40 ID:/HuSQ2djM.net]
public static class EnumerableEx {
public static IEnumerable<int> Randoms(int seed, int max, int count) {
var r = new Random(seed);
for(int i = 0; i < count; ++i)
yield return r.Next(max); }}

c = EnumerableEx.Randoms(seed, RMAX, N).Count(ori.Containts);

681 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/26(土) 17:27:30.27 ID:UC4M2NKY0.net]
>>671
引数のcountは無しで無限ストリームにした方が美しいと思う
有限にしたければTakeで切ればいい

682 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/26(土) 20:57:24.75 ID:BlR4fLnAr.net]
>>670
続きは?

683 名前:デフォルトの名無しさん (オッペケ Sre7-4iO2) mailto:sage [2016/11/27(日) 02:43:47.55 ID:vLOqtuLor.net]
public static IEnumrable<T> Randoms<T>(Func<T> next)
{
while(true) {
yield return next();
}
}

任意の乱数アルゴリズムを渡せるようにと考えたけど、もはやランダムとは無関係だよねww

684 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/27(日) 07:11:41.91 ID:dEf188sX0.net]
>>674
名前が既に機能を表してないのはともかく、これは副作用が前提になるからよくない設計
どこかで副作用を使ってない限りnext()は必ず毎回同じ値になるはず

685 名前:デフォルトの名無しさん (ワッチョイ 370b-PVnu) mailto:sage [2016/11/27(日) 13:07:28.68 ID:ZDMyX7Jh0.net]
普通に何がしたいのか分からない

686 名前:デフォルトの名無しさん (ワッチョイ 87ce-w12Y) mailto:sage [2016/11/28(月) 06:20:00.23 ID:d2SeRThv0.net]


687 名前:乱数列をインデックスで参照したいだけ
なんでしょ?
[]
[ここ壊れてます]



688 名前:デフォルトの名無しさん (ワッチョイ 87d4-TEJY) [2016/11/28(月) 20:53:46.42 ID:jgfNB/jg0.net]
実際のプログラムでデリゲート/イベントをどう使うのが便利なのか、理解できる教材・WEBサイト等があれば教えてください

689 名前:デフォルトの名無しさん (ワッチョイ c748-AQyI) mailto:sage [2016/11/28(月) 21:37:11.66 ID:TQQs9y8p0.net]
https://msdn.microsoft.com/ja-jp/library/ms173171.aspx

690 名前:デフォルトの名無しさん (ワッチョイ 4f4c-/sNf) mailto:sage [2016/11/29(火) 10:18:57.84 ID:PfRgidpN0.net]
関数ポインタなイメージだわ

691 名前:デフォルトの名無しさん (ワッチョイ 87ce-w12Y) mailto:sage [2016/11/30(水) 00:56:16.15 ID:H3buRLlE0.net]
Win32APIのコールバックに渡せる時点で外部からの見え方は関数ポインタそのもの
そこにどうやってインスタンもねじ込んでるのか正確には知らないけど
関数ポインタをユニークなヒープ領域に書いてそれを渡して呼び出させる
みたいな気持ち悪いことを裏でやってるんだろう

692 名前:デフォルトの名無しさん (ワッチョイ 87ce-w12Y) mailto:sage [2016/11/30(水) 01:03:41.03 ID:H3buRLlE0.net]
少なくとも1度はヒープ上でコード実行してるはずなんだけど
スパイウェア認定されたりしないのはなぜだろう

693 名前:デフォルトの名無しさん (ワッチョイ 279d-lM3r) mailto:sage [2016/11/30(水) 01:04:12.90 ID:w8bfAEOD0.net]
動けばいい

694 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/30(水) 02:53:33.77 ID:5s/CT6+70.net]
>679
Msdnの説明なんて99%糞だよな。頭和杉、マクロバカって書いてある本を
見たことがある。
 でもたまに凄くわかりやすいのがある。今日まさにそれに出会って
感想欄に

MSDNにしては本質をついていてわかりやすい。こんなにわかりやすい
せつめいは初めてだ。
これはMSDNの文章とは違う素晴らしい文章だ。たぶん外注のライターが
書いたものだと思うが、こういう外注さんは大事にしなさい。
ありえないとは思うが、もし万が一社員が書いたものならぜひともボーナス
を弾んであげてほしい。

と書いておいた。

695 名前:デフォルトの名無しさん (ワッチョイ 5b3c-0AhV) mailto:sage [2016/11/30(水) 02:59:23.96 ID:PzfaC3Zi0.net]
精神を病んでいる様だからカウンセラーにでも相談したまえ

696 名前:デフォルトの名無しさん (ワッチョイ abdc-MM3T) mailto:sage [2016/11/30(水) 07:35:52.74 ID:TOIBVM0F0.net]
>>681
マネージコードからの通常のInvokeや一般のクラスやインターフェースの仮想メソッド呼び出しでも
JITのために

697 名前:ッ様の仕組みがあるらしい
デリゲートが関数ポインタを持ってるんじゃなくて、呼び出し元(call siteという)ごとのキャッシュとして
ネイティブ関数を生成するみたいだ
[]
[ここ壊れてます]



698 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/30(水) 10:16:51.02 ID:5s/CT6+70.net]
Delegateはクラスを着ていない素っ裸の抽象メソッドだと思う。だから
デレッってしてる。
クラスと同様にインスタンスを作成して使うけれども抽象メソッドだから
実態のメソッドを代入して使用する。
その時に実態のメッソッドから名前を剝ぎ取った素っ裸のメソッドが
ラムダ式だ。

スッポンポンというところがデレゲートとラムダは似ている。

699 名前:デフォルトの名無しさん (ワッチョイ a77b-rApL) [2016/11/30(水) 10:35:50.72 ID:5s/CT6+70.net]
delegate int delSm(int i); //型紙delSmを作成する。 
void test() {  
 delSm Sm;         //型紙delSmから洋服Smを作成 
 Sm = (x => x * x);  //素っ裸のメソッドにSmを着せる  
 int j = Sm(16);     //j = 256  
}  

700 名前:デフォルトの名無しさん (ワッチョイ 5c03-Z4eY) mailto:sage [2016/12/01(木) 16:54:34.62 ID:0Um+ha3M0.net]
C#の質問で無く恐縮ですが
VS2013でC#コード入力していますが
補完機能の振る舞いがよくわからないことがあります。

例えば"int"と入力する場合
i→n→tとキーインすると
補完候補は"int"の表示が選択されています。
ここでスペースをキーインすると
エディタには"iint"と入力されてしまいます。

どういうことでしょうか?

returnもrreturnとなってしまいます。

701 名前:689 (ワッチョイ 5c03-Z4eY) mailto:sage [2016/12/01(木) 16:55:46.18 ID:0Um+ha3M0.net]
もしかしてATOKのせいでしょうか。

702 名前:デフォルトの名無しさん (ワッチョイ 6bc0-/mAi) mailto:sage [2016/12/01(木) 19:32:35.80 ID:Zf0m27Yo0.net]
TABキーで補完すればいいんじゃね

703 名前:デフォルトの名無しさん (ワッチョイ d1d6-NTgB) mailto:sage [2016/12/01(木) 23:26:48.62 ID:iYDC/6Ae0.net]
>>689
ATOK使ってるけど普通に使えてるな
VSのサービスパックでも当てたら直るんじゃね?

704 名前:689 (ワッチョイ 5c03-Z4eY) mailto:sage [2016/12/02(金) 08:57:18.65 ID:31Pwg6Qz0.net]
>>691 >>692
ありがとうございます。

TABにしても同じなんです。
SPためしてみます。

と、書いていましたが
たった今VS2013起動して試してみたところ
問題有りませんでした。

原因はわかりませんが再起動すれば良いようですね。
お騒がせしました。ありがとうございました。

705 名前:初心者 (ワッチョイ 50cf-yaSi) [2016/12/02(金) 14:04:42.72 ID:mPN6uvNG0.net]
C#の勉強したいんですけど
visualstudioのどれをダウンロードすればいいですか?一番左ですか?

706 名前:デフォルトの名無しさん (アウアウオー Sabe-k+pW) mailto:sage [2016/12/02(金) 14:22:34.32 ID:KR/8JQ+qa.net]
オッスオラ極右

707 名前:デフォルトの名無しさん (フォォーッ MM9b-NTgB) mailto:sage [2016/12/02(金) 14:24:44.13 ID:hCuw5ExfM.net]
>>694
download.microsoft.com/download/8/0/3/8036DBC2-135E-431D-86FE-C2C53562C9F1/vs_community_JPN.exe



708 名前:デフォルトの名無しさん (ワッチョイ 98d4-NTgB) mailto:sage [2016/12/02(金) 14:44:59.65 ID:ulrrSATP0.net]
いままでPro買ってたけどCommunityでいい気がしてきた

709 名前:デフォルトの名無しさん (オッペケ Sr8d-F2U0) mailto:sage [2016/12/02(金) 15:12:50.24 ID:B5+8wL6Vr.net]
コミュニティ使っててアプリ作って条件以上の売上出たらどうすればいいの?

710 名前:デフォルトの名無しさん (ワッチョイ 2a02-0Nhh) mailto:sage [2016/12/02(金) 15:32:17.74 ID:mFAqdh2w0.net]
買えばいいんじゃね、そんなんに売れたんなら

711 名前:デフォルトの名無しさん (ワッチョイ 9220-NTgB) mailto:sage [2016/12/02(金) 22:45:54.98 ID:5RQuVDtH0.net]
C#というわけではなく、初歩的なことかと思いますが
テスト要領書って、本来コーディング前に作っておくものでしょうか?

うちの会社じゃ
いつもコーディングの後半に作ってるんですが
一般的には

712 名前:どうなんだろうと思いまして []
[ここ壊れてます]

713 名前:デフォルトの名無しさん (ワッチョイ 4dcb-g21N) mailto:sage [2016/12/02(金) 22:56:52.05 ID:2vcaPjiT0.net]
マルチポストしてんじゃねえぞチンカス野郎

714 名前:デフォルトの名無しさん (ワッチョイ 115b-25R2) [2016/12/02(金) 23:15:26.91 ID:9K0+rqji0.net]
データベース使ったサンプルアプリ作ってみたいのですが、データベースは何を使ったらいいですか?

715 名前:デフォルトの名無しさん (ワッチョイ f4cb-yaSi) mailto:sage [2016/12/02(金) 23:44:10.13 ID:UcIXa3VL0.net]
>>702
モノによって癖があるよ
インストール方法からして上手くいかないポイントが違う

業務でWindowsアプリ作るならSQLServerExpressがオススメ
絶対使うしね
趣味でレンタルサーバー使うならmysqlが多いかも

716 名前:デフォルトの名無しさん (ワッチョイ d1d6-NTgB) mailto:sage [2016/12/02(金) 23:48:17.42 ID:kbaBWwKx0.net]
ファイルコピーだけで簡単に動かしたいのならSQLiteもいいぞ

717 名前:デフォルトの名無しさん (ワッチョイ f4ce-BRVC) mailto:sage [2016/12/02(金) 23:58:41.69 ID:P1j76Eyi0.net]
Windows標準で入ってるJet DBが何も入れる必要ない点でオススメ



718 名前:デフォルトの名無しさん (ワッチョイ 2aaf-MLbx) mailto:sage [2016/12/03(土) 00:46:33.44 ID:6QJpBGmN0.net]
SQLiteは便利で面白い
Firefoxのクッキーの管理なんかにも使われてる

719 名前:デフォルトの名無しさん (ワッチョイ 115b-25R2) [2016/12/03(土) 09:19:05.56 ID:/EDU3A450.net]
>>703-706
ありがとうございます!
さっそく調べてみます!

720 名前:デフォルトの名無しさん (ワッチョイ 92e5-/mAi) mailto:sage [2016/12/03(土) 10:35:13.28 ID:OhSejOMk0.net]
普段threadを生成してやっていた非同期処理を
バージョンアップに合わせてasync await使って実装してみようと思います。

非同期を意識しない場合の元ソースは以下のコード

private void btn_click(省略)
{
    var list = getList("なんたら");
}

private List<string> getList(string target)
{
   var list =  hogehoge関数
   return list ;
}

この中で呼び出し元の btn_click から getList関数を非同期で呼び出すことは可能でしょうか?
可能であればいずれ同期的に使う可能性も含めて getList関数には手を入れたくはないのですが、入れられないのであれば手を加えても問題ありません。

有識者の皆様、何かしらヒントでもご教示いただけれb幸いです。

721 名前:デフォルトの名無しさん (ワッチョイ 92e5-/mAi) mailto:sage [2016/12/03(土) 10:42:36.75 ID:OhSejOMk0.net]
連投失礼
記述ミス修正

getList関数には手を入れたくはないのですが、入れられないのであれば手を加えても問題ありません。

この中で呼び出し元の btn_click から getList関数を非同期で呼び出すことは可能でしょうか?
可能であればいずれ同期的に使う可能性も含めて getList関数には手を入れたくはないのですが、入れなければいけないのであれば手を加えても問題ありません。

Task<List<string>>にしないといけないんだろうなぁ…とは思いますが…。

722 名前:デフォルトの名無しさん (ワッチョイ 2a02-0Nhh) mailto:sage [2016/12/03(土) 10:56:58.35 ID:rfPwjFy00.net]
普通は同期版と非同期版と二つ定義するんじゃないのか
getListは同期関数にしたいの?非同期関数にしたいの?

723 名前:デフォルトの名無しさん (ワッチョイ 39dc-Cf2b) mailto:sage [2016/12/03(土) 11:00:28.76 ID:x7z2pgeG0.net]
なんか勘違いしてそう
async使うなら最終的にIOやユーザー操作でブロックされるところまで全部非同期で繋がないと意味ないよ?

724 名前:デフォルトの名無しさん (ワッチョイ 839d-5gNI) mailto:sage [2016/12/03(土) 11:03:34.95 ID:n86jitUO0.net]
var list = await Task.Run(() => getList("..."));
こういうことじゃないの?

725 名前:デフォルトの名無しさん (ワッチョイ 39dc-yaSi) mailto:sage [2016/12/03(土) 13:23:04.99 ID:x7z2pgeG0.net]
ところで、asyncを全面的に使ってるとストリームにたかが数バイトを書き込むだけみたいな
時間的粒度の小さいメソッドでもいちいちawaitせざるを得ないことがよくあると思うんだけど、非効率だからまとめて処理できないもんかな
個人的には、全ての書き込みがバッファリングされることが保証されてるAsyncStreamみたいなクラスがあって
後でにまとめてawait FlushAsyncするという考え方の方がWriteAsyncより使いやすいと思うんだけど

726 名前:デフォルトの名無しさん (ワッチョイ 92e5-/mAi) mailto:sage [2016/12/03(土) 13:33:41.53 ID:OhSejOMk0.net]
>>710-712
イメージ的には

getList←同期
getListAsync←非同期(内部でgetListを呼ぶ)
のようになるのかなと。

もとのgetList自体は同期処理で動くようにしておきたかっただけという簡単なものでした。
>>712さんの言うところで出来てしまいました…。

あっさり過ぎて…ありがとうございました。
これでUIが固まらない為だけの面倒な非同期を書かなくて済みそうです。

727 名前:デフォルトの名無しさん (スッップ Sda8-wK09) mailto:sage [2016/12/03(土) 17:28:43.65 ID:6dOdOU6od.net]
商用で使えるフリーの開発環境ってありますか?



728 名前:デフォルトの名無しさん (ワッチョイ 39dc-yaSi) mailto:sage [2016/12/03(土) 17:42:27.55 ID:x7z2pgeG0.net]
>>715
小規模な企業までならVS Communityが商用利用可
Communityが使えない規模ならVS Express

729 名前:デフォルトの名無しさん (ワッチョイ 8d4a-JWTN) mailto:sage [2016/12/03(土) 21:57:51.27 ID:NEbgZC1U0.net]
>List<T>も2次元にはできないが、そもそも2次元にする必要がない
list<list<T>>で二次元じゃあないの?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef