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


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

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



1 名前:デフォルトの名無しさん mailto:sage [2015/10/02(金) 20:50:08.06 ID:IGV3Viy6.net]
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part116 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1436344868/

■関連スレ
C#, C♯, C#相談室 Part89 [転載禁止](c)2ch.net
peace.2ch.net/test/read.cgi/tech/1443271409/

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

83 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 22:06:02.97 ID:T1RoiOzF.net]
>>79-80
それだとBIDでグループ化されてないよ
メソッド形式でSumまで一行で書くならこう
var sums = hoge.Where(tdata => 略)
.GroupBy(tdata => tdata.BID)
.Select(g => new { BID = g.Key, Sum = g.Sum(tdata => tdata.num) });

84 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 22:45:02.75 ID:NHKi3h4o.net]
すいませんC#というか設計についてなのですが
モデルというのはどのように考えればよろしいでしょうか

クローラーを作ろうとしていて、新着一覧のページを定期的にチェックしていて
新着一覧のページには投稿者のIDの一覧があります。

投稿者のIDから投稿者の詳細は別のページで参照する必要があるので、投稿者のIDをキーにしてローカルに保存しようと思うのですが
この時投稿者のモデルはIDだけで作るべきなのでしょうか、それともIDとその他名前等の情報を混ぜて作るべきでしょうか。

IDだけで作ると、投稿者という同じデータなのにIDだけのモデルと、名前等全ての情報があるフルデータのモデルの二種類が出来てしまいます。
名前等全ての情報でモデルを作ると、IDしか分からない段階では名前等のプロパティが空 (null?)になってしまいます。

後者の方が個人的にはいいかなと思うのですが、モデルという物に対して、このモデルはIDしか入っていない あっちのモデルは名前とか全部入っている。だから処理を分ける必要が・・・
というのは許されるのでしょうか

85 名前:76 mailto:sage [2015/10/07(水) 22:53:54.57 ID:sdI3RqNo.net]
色々とお答え頂きありがとうございます。

やはり、LINQを使えば短いコードで
実現出来るのですね。

LINQの理解が低いので、
参考にさせて頂きます。

86 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:09:28.07 ID:1Tzy0x1l.net]
>>82
わざわざ分ける必要は無いと思う。
とりあえず、IDから名前等々、全部定義したクラスを定義しておけばいい。

データ(オブジェクト)の状態をチェックするプロパティを持たせておいて、取得済みかどうか判定できるようにしておけばいいし、
取得できてない名前とかは、適当に空文字なり返すようにしておけばいい。

87 名前:デフォルトの名無しさん [2015/10/07(水) 23:09:28.12 ID:K9vCPUNu.net]
linqを使うと思考が衰えるから自力で組んだ方がいいぞ。
linq使いはツール使うことばっか覚えて地頭がクソなやつばっかだからな。

88 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:19:26.43 ID:zlFawCtp.net]
などと中卒が申してます

89 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:41:59.93 ID:T1RoiOzF.net]
>>82
そもそも、IDしかわからない中途半端な投稿者オブジェクトを
新着一覧クラスの外に晒す必要があるのかよく考えたほうがいいよ。
新着一覧クラスが投稿者ID文字列のコレクションを公開するのが嫌なら
新着一覧クラス自身に投稿者詳細をダウンロードしてくるメソッドを持たせたっていい。
もちろん賛否両論あるだろうけど、オブジェクト指向に拘るのであれば
オブジェクトから情報を取り出すのはなるべく避けて、オブジェクトに命令していくようにするのが基本。

90 名前:デフォルトの名無しさん mailto:sage [2015/10/07(水) 23:54:33.19 ID:ac/t6J3k.net]
>>82
許されるというか基本中の基本
すべてを1つのモデルに詰め込もうとするともれなく巨大な神クラスが出来上がるぞ
文脈に合った適度な粒度のモデルを必要な数だけ作るんだよ
まずはとりあえず取得と更新を分離しろ

91 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 00:27:57.95 ID:edkXggJo.net]
>>82
var page=await NicoUtil.DownloadPageAsync(url);
page.UserIds.Add(userId);

var user=GetProfile(page.UserIds[0]);
user.Id=3945887;
user.IsNicoNamaNushi=false;
user.Description="";

UserDB.Add(user);



92 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 00:51:12.57 ID:7dJhmaB1.net]
>>82
IDだけだったらそれはIDでしかないじゃんw
煽り抜きで愚問だね。

93 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 02:10:27.33 ID:n5xoJkAg.net]
よくわからないんだけど、Nameが空なのが嫌なら投稿者クラスを作るときに情報を取得すればいいんじゃないの?

94 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 21:32:59.63 ID:9yien46K.net]
C#でinnerHTMLのような各種の<タグ>を含んだHTMLの文字列から
タグを除去してテキスト

95 名前:セけを取り出す簡単な方法ありますか? []
[ここ壊れてます]

96 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 22:05:59.40 ID:O6ws46yp.net]
正規表現でやりなよ

97 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 22:22:34.18 ID:9yien46K.net]
>>93
例えば
<label>文字の中に<タグもどき>が有る場合が難しそう</label>
なので、正規表現以外で良い方法有りませんか?

98 名前:デフォルトの名無しさん [2015/10/08(木) 22:51:05.62 ID:vx3KIWo3.net]
xmlのライブラリ使えるんじゃないの

99 名前:デフォルトの名無しさん mailto:sage [2015/10/08(木) 23:35:33.54 ID:Xn3MaZ8G.net]
HtmlAgilityPack使え

100 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 00:15:53.61 ID:oggkbSfr.net]
>>96
難しいですか?

101 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 05:03:09.47 ID:DnhlxVQi.net]
>>97
ぐぐれよ
www.atmarkit.co.jp/ait/articles/1501/27/news140.html



102 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 10:27:53.18 ID:oggkbSfr.net]
難しそうなので諦めました

103 名前:デフォルトの名無しさん mailto:sage [2015/10/09(金) 11:13:26.38 ID:oOXSiJnl.net]
なんだ釣りかよ
こんなところで釣りをするな
死ね

104 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 13:55:22.44 ID:PcQrHOFV.net]
ドラッグしながら四角形を描画したいのですが
Rectangleだと始点より右下にしかドラッグ出来ません
全方向にドラッグ出来るようにしたいのですがどうすればいいのでしょうか?

ちなみに今のコードは
g.DrawRectangle(Pens.Black, startPt.X, startPt.Y, endPt.X - startPt.X, endPt.Y - startPt.Y);
で startPtはMouseDown時 endPtはMouseMove時のマウスポインタの座標です

105 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 14:02:04.52 ID:xPCYj4vK.net]
(x,y,w,h)=(min(sx,ex),min(sy,ey),max(sx,ex)-min(sx,ex),max(sy,ey)-min(sy,ey))

106 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 14:26:32.90 ID:S6gJKsnz.net]
ifたくさん書けばいい

107 名前:デフォルトの名無しさん mailto:sage [2015/10/10(土) 14:43:16.81 ID:PcQrHOFV.net]
>>102
出来ましたスパルタ先生!
まだ初心者なのでminとmaxが何か分からなかったんですがMathクラスだったんですね
ありがとうございました!

108 名前:デフォルトの名無しさん [2015/10/11(日) 17:20:59.98 ID:ZCWGzTkV.net]
xamlでDataContextを入れ替えた時に、そのDataContextのプロパティとバインドされているコントロールの表示が更新される条件はなんでしょうか
依存関係プロパティにすれば変わるのはわかっているのですが、煩雑なのでできれば避けたいと思っています
通常のCLRオブジェクトでは変わらず
INotifyPropertyChangedだと、オブジェクトそのものを入れ替えてしまうと変更を通知するタイミングがなくてうまくいかないような気がします
うまい方法はないでしょうか

109 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 18:39:25.15 ID:o6WYp8Zd.net]
まず実際に試してみれば?

110 名前:デフォルトの名無しさん [2015/10/11(日) 19:03:36.29 ID:ZCWGzTkV.net]
INotifyPropertyChangedを実装したオブジェクトをただDataContextに入れてみましたが出来ませんでした
プロパティの値が変わってないのでどう通知すればいいのかもわからないのですけれども

111 名前:デフォルトの名無しさん [2015/10/11(日) 19:52:52.41 ID:ZCWGzTkV.net]
すみません勘違いしていました
ただのCLRオブジェクトを入れればきちんと反映されました
自作クラスをDependencyPropertyにしてUserControlとバインドさせて
その自作クラスで普通のCLRオブジェクトのプロパティをUserControlの中にあるコントロールとバインドさせたら
入れ替えても反映しなかったということのようです



112 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 19:55:53.79 ID:KbfkRHMw.net]
List<T> array;
が有った時に、
array.Find(x => ...
array.Where(x => ...
などをやる場合に、探索を開始するindexを指定するようなことは出来ませんか?
100番目以降の要素から探索するなど。

113 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 19:58:48.31 ID:EnuaFgoc.net]
>>109
Skip(99)

114 名前:デフォルトの名無しさん [2015/10/11(日) 20:02:59.11 ID:ZCWGzTkV.net]
ideone.com/wQHi11

説明できた気がしないので一応テストコードの一部を貼っておきます
DependencyPropertyをやめてただのCLRオブジェクト

115 名前:ノすると反映されるようになります []
[ここ壊れてます]

116 名前:デフォルトの名無しさん [2015/10/11(日) 20:08:39.48 ID:ZCWGzTkV.net]
ああわかりました
PropertyMetadataの初期値はstaticなので使いまわされるんですね
お騒がせしました

117 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 20:40:49.95 ID:ijISB/Tc.net]
初心者すぎてぶちころされそうな質問してもいいですか?

118 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 21:24:46.54 ID:lDigt0qz.net]
かもん

119 名前:デフォルトの名無しさん [2015/10/11(日) 21:29:23.08 ID:ijISB/Tc.net]
// xmlファイルを取得
XElement document = XElement.Load("sample.xml");

// ゲーム中のユニット情報をXMLの各要素へ書き込み
var query = (from p in document.Elements("Status")
select ★
query.Attribute("UnitID").Value = gameManager.unitStateList[i].unitID.ToString();

120 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 21:32:27.27 ID:ijISB/Tc.net]
XElement document = XElement.Load("sample.xml");
var query = (from p in document.Elements("Status")
select ★
query★

すみません途中書き込みしてしまいました
しかもsageませんでしたすみません

LinkToXMLでXML操作を書きたいです
「Status要素内」の「ID」の値を「更新」したい、というのがやりたい事ですが
★の部分はどう書けばいいでしょうか?

121 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 21:35:12.30 ID:ijISB/Tc.net]
連投すみません、間違えました

やりたい事はStatus要素内にある「全ての」要素について任意の値で更新を行いたい
というものです

多分、一つしか要素がなく、それを更新するのであればFirst()で取って
Attribute(要素名).Valueで更新できると思うのですが、全ての要素の場合はどう書けばいいのかが分かりません



122 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 21:57:00.89 ID:lDigt0qz.net]
foreach( var status in document.Elements("Status") )
{
 status.ID = ...
 status.Hoge = ...
}

123 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 22:30:24.51 ID:o6WYp8Zd.net]
全く些末なことだがElementsじゃなくてDescendantsじゃないかな

124 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 23:23:06.77 ID:ijISB/Tc.net]
>>118
ありがとうございます。
参考にしてやりたい事自体はできました。

XElement document = XElement.Load("sample.xml");

IEnumerable<XElement> de =
from el in document.Descendants("Status")
select el;
foreach (XElement xmlDocument in de)
{
xmlDocument.Element("id").Value = sStar.id.ToString();
xmlDocument.Element("name").Value = sStar.name.ToString();
xmlDocument.Element("class").Value = sStar.class.ToString();
xmlDocument.Element("setting").Value = sStar.seting.ToString();
}
document.Save("sample.xml");

ただ正直、全然理解できていませんが(何でforeach内のこの処理がdocumentに反映するの?とか)

125 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 23:37:17.15 ID:o6WYp8Zd.net]
突き詰めれば
class Hoge { public string Value { get; set; } }
foreach (Hoge hoge in list) {
hoge.Value = ...;
}
なんだからlistに含まれる各hogeのValue値が更新されるのは当然

XElement型のxmlDocumentとかやめてくれよ…

126 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 23:41:50.91 ID:ijISB/Tc.net]
>>121
あーなるほど、意味が分かりました

>XElement型のxmlDocumentとかやめてくれよ…
ちなみにこれはなぜでしょうか?

127 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 23:52:55.34 ID:o6WYp8Zd.net]
XMLの文脈ではdocumentは要素=elementとは違う意味を持ってる
XDocumentやXmlDocument型が存在する

128 名前:デフォルトの名無しさん mailto:sage [2015/10/11(日) 23:59:38.42 ID:ijISB/Tc.net]
>>123
なるほど、言われてみれば確かに
何度もありがとうございました

129 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 07:16:36.14 ID:oCa7NkmO.net]
>>110
ありがとうございました。
array.Skip(99) .Find(x => ...
とやると、100番目以降の要素の部分配列が作成されるのは分かったのですが、
その分、処理が遅くなるなどの心配は有りませんか?

130 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 07:21:01.92 ID:CF5nq9ai.net]
>>125
>100番目以降の要素の部分配列が作成される
されない
ラッパーのイテレータが作られるだけ

131 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 07:27:25.83 ID:xL7Yt/Nd.net]
>>109
本題とは関係ないけど、List<T>型にarrayとかつける馬鹿が目の前にいたらしばき倒してると思う



132 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 07:53:05.78 ID:oCa7NkmO.net]
>>126
ありがとうございました。
もう一つ教えてください。
int[] array = new int[] { 1, 2, 3 };
foreach (var i in array)
{
 i = 100;
}
iはforeach繰り返し変数なので割り当てられない
というエラーが出るのですが、どうすれば良いでしょうか?

133 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 07:57:11.52 ID:CF5nq9ai.net]
>>128
普通にループ
っていうかパフォーマンスクリティカルなところでない限りは配列をインプレースで更新したりしないで新しく作っちゃうのが今風

134 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 08:13:56.48 ID:oCa7NkmO.net]
>パフォーマンスクリティカルなところでない限りは配列をインプレースで更新したりしないで新しく作っちゃうのが今風
ということはクリティカルな場面ではforeachの中で配列を更新できますか?

135 名前:デフォルトの名無しさん [2015/10/12(月) 09:45:46.22 ID:4edlKvTH.net]
>>127
なんで?
型で正体分かるでしょ。
その為の静的言語だし。
名前が適切じゃなきゃリファクタリングすればいいだけだし、そんなことぐらいにしか突っ込めないお前の方が馬鹿だと思う

136 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 09:47:15.78 ID:L/1UOsEK.net]
LDPC符号をC#で使いたい。
エンコーダ、デコーダ共に。
C++のsourceなら落ちてるけど、ポインタとかシフト演算使いまくりで移植しにくい。
誰かたすけて

137 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 10:05:29.20 ID:bZxqtO6M.net]
>>131
> 名前が適切じゃなきゃ

そこに突っ込んでるだけだろ
いちいちこまけーこと言うなよ
って言うならわかるけど、問題ないだろって開き直るのもどうかと思う

138 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 10:11:31.09 ID:AiKl9MOi.net]
先生「どうして宿題をやってこなかったんだ!」
生徒「やってなきゃやればいいだけ。そんなことぐらいにしか突っ込めないお前は馬鹿」

139 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 10:44:36.42 ID:FazCyQUV.net]
「犬にねこって名前をつけるのはどうかしている」
「見りゃわかるんだから好きにさせろ」

結論:シーア派とスンニ派の戦いに日本は参加すべきじゃない

140 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 10:51:02.89 ID:L/1UOsEK.net]
( ・ε・)

141 名前:デフォルトの名無しさん [2015/10/12(月) 10:55:27.76 ID:4edlKvTH.net]
>>133
構造が違うだけで言葉自体の意味はさほど変わらない。
そして大半はiteratorでアクセスするし、インデックスのアクセスも同じ。
どこに問題があるのか教えて欲しい。



142 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:00:20.66 ID:ntYAJ4A2.net]
話して分からない馬鹿と会話するな
両方に命令してるからな

143 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:12:27.33 ID:UFM1lTS3.net]
> List<T> array
これでなんで怒ってるのかわからん。
C#のList<T>は普通の配列みたいなやつだよな
LinkedListと勘違いしてるの?

144 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:45:17.20 ID:5cnLZ8t5.net]
分からないなら口を挟むな
うぜえんだよボケナス

145 名前:デフォルトの名無しさん [2015/10/12(月) 11:47:29.04 ID:4edlKvTH.net]
だから問題を指摘しろと。
まぁできないと思うよ。問題ないもん。

146 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 11:52:34.15 ID:oVmZU7gX.net]
list(一覧)と言う言葉がコンピューターサイエンスに於いて
linked listの意味で使われarray(array list)とlist(linked list)という対比で用いられることが歴史的に多かったから発狂したんだろう。
連想配列の意味でハッシュが用いられるようなもの。
.NET Frameworkはそれを正しい意味の名前に直したんだから問題はない。

147 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 13:10:29.56 ID:Tj8wl52C.net]
>>130
できません

>>129が言ってるのは
普通は
int[] array = new int[] { 1, 2, 3 };
for( var i = 0; i< array.Length; i++ )
{
 array[i] = 100;
}
みたいにやれ。
パフォーマンスとメモリが気にならないなら
array = new int[]{ 100, 100, 100 };
みたいんでいいやん ということじゃね

148 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 13:37:05.60 ID:cGJWI2K1.net]
C#って、ガベージコレクションしますか?

149 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 13:49:06.51 ID:oCa7NkmO.net]
>>143
ありがとうございました。

150 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:00:36.92 ID:4P8sYT2X.net]
foreach(var i in (new int[]{1,2,3}).Select(x => 100).ToArray()){

Console.WriteLine(i);

}

151 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:03:51.40 ID:4P8sYT2X.net]
しまった
うえのarrayとかlistとか言ってるの読みながら間違えた
ToListで



152 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:39:30.41 ID:FazCyQUV.net]
せっかく作ったリスト捨ててどうするんだw

153 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:49:02.21 ID:E/TV++i+.net]
Taskのキャンセルがうまくいかないのですがどうすればうまくいくでしょうか? 
一回目はキャンセルできても2回目はなぜかデッドロックしてしまいます;;
以下にソースを張ります。
CancellationTokenSource tokenSource = new CancellationTokenSource();
private void button1_Click(object sender, EventArgs e){
var task1 = Task.Factory.StartNew(() =>{
var task2 = Task.Factory.StartNew(() =>{
tokenSource.Token.ThrowIfCancellationRequested();
for (int i = 0; i <=300000000; i++){
if (tokenSource.IsCancellationRequested){
return 0;
}
}
return 0;
});
if (task2.Result == 0){
task2.Dispose();
}
}, tokenSource.Token);
}

154 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:49:04.48 ID:IrWwZ6fO.net]
同じクラス名で<T>付きと無しの2つのクラスを作る理由は何でしょうか?
一つのクラスにメソッド2つを用意すればいいだけなのに

155 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 15:51:43.51 ID:wjSQdsNO.net]
用途によるだろうけど、普通は、ジェネリック対応のクラスだけで間に合う。

156 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 16:10:18.51 ID:DarJ/ebZ.net]
こういうのは書くことがある
class Hoge { public static Hoge<T> Create<T>(T value) { ... } }
class Hoge<T> { ... }
var hoge = Hoge.Create(...);

157 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 16:37:22.39 ID:S0ggbD4h.net]
>>149
そのコードにデッドロックするところなんて無いと思うけど。
CancellationTokenSourceは一回キャンセル操作したら再使用できないの分かってる?

158 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 17:08:42.71 ID:t3lNWbaJ.net]
>>150
void Method<T,U>(T hoge) where T : Hoge<U>{}
みたいなメソッドだと、Uのせいで型推論が機能しなくなるので、
Hoge<T> : Hogeという形を作っておくと

void Method<T>(T hoge) where T : Hoge{}にできて型推論が効くということだと思う

159 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 17:29:26.78 ID:IrWwZ6fO.net]
うおおおお!説明が難しすぎてわからない!!

ILSpyで見るとHogeクラスとHoge<T>クラスのどちらも
HogeBaseを継承していて
HogeBaseのメソッドは引数付きなんです
そしてHogeクラスのメソッドはbaseに対して
nullを渡しています

HogeBaseをわざわざ2つのクラスに分割する意味がわかりません
HogeBaseをそのまま使わせるようにすればいいじゃないですか!
って思うんですけど、説明された型推論の関係なんでしょうか?

160 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 17:35:54.46 ID:IrWwZ6fO.net]
利用する側は
new Hoge(Action);
new Hoge(Action<T>);
という感じにできたほうが楽じゃありませんか?
それを
new Hoge(Action);
new Hoge<T>(Action<T);
という風に強制させるのはなぜなんでしょう

161 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 18:00:28.51 ID:t3lNWbaJ.net]
>>156
それは多分型推論は関係ないと思うけど、聞いた感じだと
Hoge<T>{ T obj; }みたいなメンバ変数があり、それをHogeBaseに渡しているけど
Hogeの場合はそれがないのでnullを渡してるっていうような
まあ筋の通った話に聞こえるなあ

HogeBaseだとTで型を決められないからキャストとかが不便で
Hogeがないといちいちnullを入れてやらなきゃいけなくなって不便みたいなことなんじゃないの



162 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 18:41:03.54 ID:E/TV++i+.net]
>>153

CancellationTokenSourceが一回しか使えないのは
知りませんでした。
再起は出来ないんでしょうか?
デッドロックですが使い方を間違えてまして正しくは
一度キャンセルをするとTaskが動かなくなるような
感じです。resultで実際sourceにはokと出るようにしてますがなにも反応がなくなりました。
ボタン復帰もしません

163 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 19:08:20.89 ID:wjSQdsNO.net]
>>149
なんでTaskの中でTask作ってんの?
継続タスクにしたいなら、ContinueWithでつなげれば良いだろう。
あと、そのケースなら Task.Factory.StartNewじゃなくて Task.Runを使ったほうがすっきりするだろう。
ちなみにTaskのDispose()は、無理に呼ぶ必要はない。むしろ無闇に呼び出したらタイミングによっては、厄介なことになる。

>>158
CancellationTokenSourceは、一度限り、再度使いたいならCancellationTokenSourceを作り直すしかない。
キャンセルされてたら、tokenSource.Token.ThrowIfCancellationRequested()が例外を吐いて強制終了するだけなんで
ボタンが復帰しないのは当然のこと。

164 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 19:27:19.47 ID:E/TV++i+.net]
>>159

ありがとうございます。
あ、継続タスクでも同じ動作をしますか
すいませんうっかりしていました。
TaskRunは使いたいのですが環境の問題で駄目でした。

キャンセルの方はならパブリックにするのではなく
プライベートにしてやってみてるのですが今度はキャンセルが出来なくなりました。。。
Taskキャンセルが難しいです

165 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 19:51:26.84 ID:wjSQdsNO.net]
>>160 たぶんやりたいことは、こんなところか。

private CancellationTokenSource cancelSource;
private void button1_Click( object sender , EventArgs e ) {
if( this.cancelSource != null )
this.cancelSource.Cancel(); // まだキャンセルされてなければキャンセル要求

this.button1.Enabled = false;
this.cancelSource = new CancellationTokenSource();
var token = this.cancelSource.Token;

Task.Factory.StartNew( () =>{
for( int i = 0; i < 100000; i++ ){
token.ThrowIfCancellationRequested();
Thread.Sleep( 100 );
}
} , token )
.ContinueWith( task => {
// 継続タスク(UIスレッドに切り替わって実行される)
// キャンセルされようとも正常に完了しようとも、例外が発生しても実行される。
this.button1.Enabled = true;
} , TaskScheduler.FromCurrentSynchronizationContext() );
}

private void button2_Click( object sender , EventArgs e ) {
if( this.cancelSource != null ) {
this.cancelSource.Cancel(); // キャンセル要求
this.cancelSource = null;
}
}

166 名前:デフォルトの名無しさん mailto:sage [2015/10/12(月) 20:15:07.87 ID:E/TV++i+.net]
>>161
ありがとうございます。
参考例は非常に助かります。
早速やって見ます。

167 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 01:05:59.89 ID:41s2HnED.net]
>>161
どうやらCancellationTokenSourceの扱いをミスっていたみたいで
>>149の方の仰るとおりあのやり方ではブロック内で再生成してないので
一回しか扱えずこれで詰まっていたようです。
今回の参考例非常に助かり無事に期待した動きをしています。
ありがとうございました。

168 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 04:02:33.87 ID:P4Y/UxqF.net]
WebClientを使ってDownloadString(url)でhtmlを読み込む場合、
事前にそのurlに合わせてエンコーディングを指定すると上手く行くのですが、
UTF-8を指定してSJISのヘージを読むと当然文字化けしてしまいます。
読み込むページのエンコーディングを自動的に認識するなどの機能はありませんか?

169 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 04:44:41.46 ID:7dOTeKt2.net]
ありません。

170 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 05:03:23.35 ID:P4Y/UxqF.net]
>>165
じゃあどうすれば任意のurlを文字化けせずに読み込めますか?

171 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 06:43:34.47 ID:YzZ6qWCc.net]
そりゃあ…DownloadDataでbyte[]を取ってきて
自分でエンコーディングを推定してStringに変換するに決まってんだろ
言わせんなよ恥ずかしい



172 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 08:45:24.81 ID:xr5l46tc.net]
相手サーバが有能ならDownloadDataした後のResponseHeadersからContent-Typeを参照することもできるぞ

173 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 09:06:53.64 ID:P4Y/UxqF.net]
>>167 >>168
確かにこの方法で出来そうなのですが、URLによっては
リモート サーバーがエラーを返しました: (500) 内部サーバー エラーです
Status ProtocolError
と出る場合が有りますが。

174 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 09:17:24.10 ID:IPzu3dLL.net]
ブラウザでは読み込めるならCook

175 名前:ieが正しく設定されてないとかだろ
決まった値でいいならブラウザのデバッガで通信を監視してその通りにリクエスト送ればいいけど、
セッションが必要ならRubyのMechanizeみたいなの使わないとすぐに動かなくなる
非常に面倒だから本当にそのページが重要なのでない限りは諦めた方がいい
[]
[ここ壊れてます]

176 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 10:52:29.13 ID:P4Y/UxqF.net]
>>170
情報ありがとうございました。
RubyのMechanizeというのを少し調べてみたのですが、C#でこういうのは
ありませんか?

177 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 11:18:31.92 ID:IPzu3dLL.net]
Selenium使えば?

178 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 12:02:46.15 ID:7dOTeKt2.net]
>>168
あとは、一旦、ASCIIで読み込んで、HTMLの<META>タグ判定するぐらいか。

179 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 19:36:16.73 ID:bwylg/oX.net]
初学からc#及び.NETが一人前と言われるレベルになるにはどんな勉強していったらいいかな?

1.オブジェクト指向の基礎を学ぶ(参考書の選択肢はJAVAのが多かったのでJAVAを選択)

2.(今のところWEBがメインなので)HTML,CSS,javascriptの基礎

3.HTTPやTCP/IPの基礎

4.C#3.0以降の技術(LINQ等)

5.デザインパターンを一通り網羅

6.リファクタリングの手法を習得

7.CODE COMPLETE等を読んで基礎固め

8.ASP.NET MVCの基礎、MVC等のレイアー層の理解

今のところこんな感じで進めてるけど
まだまだ足りない所ばかりで成長遅い。

どこかでC言語の勉強もしなきゃいけないと思ってるし...

180 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 19:45:39.68 ID:xI0jh4Ci.net]
まずゴールを明確にする
具体的にどんな仕事をして誰に一人前と言われたいのか
SIerでドカタやるだけならそんだけできたら一人前どころかエースだ

181 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 19:54:30.96 ID:7dOTeKt2.net]
>>174
いろいろ言いたいことはあるが、C#ならサイトなら未確認飛行の人のサイトをお勧めする。
ArrayListとか使ってる入門サイトは、ゴミ以下だ。何の役にも立たないから気をつけろ。
非同期処理でThread(生スレッド)使ってる解説もゴミ以下だから、窓から投げ捨てよう。
C#とJavaと同じとかいう奴に出会したら、にわかなので軽くスルーしよう。

c#使いが覚えるべきことは、
拡張メソッドとIEnumerable<T>の関係性だろう。
 こいつを理解できれば、LINQは、理解できたもの同然。
INotifyPropertyChanged
 WPFなどのMVVMを理解する上で欠かせない。
Taskとasync , await
 非同期関係は、だいたい、これで間に合う。
あと、余裕ができれば、Rx周りに手を出しても良いだろう。



182 名前:デフォルトの名無しさん mailto:sage [2015/10/13(火) 20:11:30.28 ID:YzZ6qWCc.net]
不法投棄犯の言うことを信用して良いものか…

183 名前:デフォルトの名無しさん [2015/10/13(火) 20:16:29.39 ID:P4Y/UxqF.net]
C#で関数の引数でrefを使えばCのポインタのような
動作になると思うのですが、文字列、配列、構造体、クラスなど
受け渡しする時にrefを使うと効率良くなって動作が速くなりますか?






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

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

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