「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1533466544/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part140
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 9e9f-LwdJ)
2018/10/04(木) 18:56:38.41ID:JnxMNCXd0405デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 22:26:22.46ID:KNaAB8gP0 作ったんで、書き込もうとするんだけど 書き込めない
HTTP 403 Forbiddened が出る。
HTTP 403 Forbiddened が出る。
406デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 22:37:57.23ID:KNaAB8gP0 これって、まじなソースコードって書けないの?
全角に変換してみた
public Form1()
{
InitializeComponent();
this.AllowDrop = true;
wtest();
}
void wtest()
{
var ret=TestAsync();
System.Diagnostics.Debug.WriteLine(ret.ToString());
}
async Task<bool> TestAsync()
{
bool ret = false;
var task = Task.Run(() => {
System.Threading.Thread.Sleep(10 * 1000);
ret = true;
});
await task;
return ret;
}
全角に変換してみた
public Form1()
{
InitializeComponent();
this.AllowDrop = true;
wtest();
}
void wtest()
{
var ret=TestAsync();
System.Diagnostics.Debug.WriteLine(ret.ToString());
}
async Task<bool> TestAsync()
{
bool ret = false;
var task = Task.Run(() => {
System.Threading.Thread.Sleep(10 * 1000);
ret = true;
});
await task;
return ret;
}
407406 (ワッチョイ 039f-MyS3)
2018/11/06(火) 22:39:33.41ID:KNaAB8gP0 半角に変換して試してw
試したのは、GUIなのでFormアプリで作ってみた
で、疑問点は、
1.これがそのまま動くこと。var ret=TestAsync();でコンパイラーエラーの方が納得する
理由は、retに値が設定出来ないから。そのうえでTestAsync()呼び出しにawaitを強制するとか
2.await taskでTestAsnc()で待ちが入ると、その上位のメソッドの処理に流れが移ること
要するに流れが直観的でないと感じる。ただし、この流れはがTestAsyncがasync voidならまだ納得がいく
試したのは、GUIなのでFormアプリで作ってみた
で、疑問点は、
1.これがそのまま動くこと。var ret=TestAsync();でコンパイラーエラーの方が納得する
理由は、retに値が設定出来ないから。そのうえでTestAsync()呼び出しにawaitを強制するとか
2.await taskでTestAsnc()で待ちが入ると、その上位のメソッドの処理に流れが移ること
要するに流れが直観的でないと感じる。ただし、この流れはがTestAsyncがasync voidならまだ納得がいく
408デフォルトの名無しさん (ワッチョイ 27c3-YdG1)
2018/11/06(火) 22:49:42.00ID:jcRa2hVA0409デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 22:54:04.17ID:QbvaQ8DKa 1.
var ret=TestAsync();でコンパイラーエラーがでるとtaskをそのまま受けたい場合に困る
retはただのTask<bool>であってそいつのResultじゃないからそれでいいだろう
2.
そういう流れで処理をしたいのでawaitを使ってる
それが疑問に思うならスタートがまちがってる
var ret=TestAsync();でコンパイラーエラーがでるとtaskをそのまま受けたい場合に困る
retはただのTask<bool>であってそいつのResultじゃないからそれでいいだろう
2.
そういう流れで処理をしたいのでawaitを使ってる
それが疑問に思うならスタートがまちがってる
410406 (ワッチョイ 039f-MyS3)
2018/11/06(火) 22:54:57.62ID:KNaAB8gP0411デフォルトの名無しさん (ワッチョイ 8a7e-zV7r)
2018/11/06(火) 22:54:58.69ID:tGae1nmw0 >>407
asyncメソッドと言っても戻り値は単なるTask<bool>だし
Taskにawaitが強制されたらTaskを待つ場所を選べなくなる
動作的に言えばawaitした時点で抜けて後に再開しようとする
ILSpy 3.0.1とかでasync/awaitデコンパイルを無効にして
ビルド後のバイナリからメソッド内容を見てみるといい
まずTask.ContinueWith()+TaskScheduler.FromCurrentSynchronizationContext()とか
従来の書き方を学んだ方が良いと思う、コルーチン的な物の前に
asyncメソッドと言っても戻り値は単なるTask<bool>だし
Taskにawaitが強制されたらTaskを待つ場所を選べなくなる
動作的に言えばawaitした時点で抜けて後に再開しようとする
ILSpy 3.0.1とかでasync/awaitデコンパイルを無効にして
ビルド後のバイナリからメソッド内容を見てみるといい
まずTask.ContinueWith()+TaskScheduler.FromCurrentSynchronizationContext()とか
従来の書き方を学んだ方が良いと思う、コルーチン的な物の前に
412デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/06(火) 22:55:30.26ID:LW+aJyL/0 varについてすら理解できてないじゃん
なんで406でのvarが381でintに置き換えられるって思ったの?
なんで406でのvarが381でintに置き換えられるって思ったの?
413デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 22:57:50.35ID:QbvaQ8DKa 重い処理Aをやってる最中にBもやりたいのでawait asyncを使ってる
重い処理Aの次にCをやるのとBが実行されるのを混同してはいけない
重い処理Aの次にCをやるのとBが実行されるのを混同してはいけない
414デフォルトの名無しさん (ワッチョイ 97d3-QXT6)
2018/11/06(火) 22:58:30.18ID:hiXG5OoB0 全 角 に 変 換 し て み た
やべえコイツ思っていた以上に馬鹿だぞ!!!
int に変換できるとか言ってたらvarで受けてるし面白すぎんだろ
やべえコイツ思っていた以上に馬鹿だぞ!!!
int に変換できるとか言ってたらvarで受けてるし面白すぎんだろ
415デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:01:12.62ID:QbvaQ8DKa 初心者あおりみっともない
しかも前のレスは初心者には理解できないだろ
しかも前のレスは初心者には理解できないだろ
416デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 23:01:39.73ID:KNaAB8gP0417デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:04:27.04ID:QbvaQ8DKa418デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:07:21.50ID:QbvaQ8DKa 重い処理Aをタスクでやって同時にメインのスレッドを実行し続けるのが目的なので
上位のメソッドが引き続き実行されるのが期待の動作
awaitされた重い処理Aの続きのCが実行されるのはまた別の話
上位のメソッドが引き続き実行されるのが期待の動作
awaitされた重い処理Aの続きのCが実行されるのはまた別の話
419デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:13:59.85ID:QbvaQ8DKa 1. 順番に処理をやってるけど別の処理も同時にやりたいな A B
2. その処理が終わったらそのタイミングで別の処理をやりたいな A → C
というのを書くのが従来の非同期処理だと面倒なのでawait asyncを使ってる
2. その処理が終わったらそのタイミングで別の処理をやりたいな A → C
というのを書くのが従来の非同期処理だと面倒なのでawait asyncを使ってる
420デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:21:04.01ID:QbvaQ8DKa 上の2は従来だとコールバックメソッドだったが
今はawaitより下の行のこと
従来だと処理が終わったらコールバックメソッドを実行する
awaitだと処理が終わるまで待つ
やってることは同じでも概念が変わって見える
でもやっぱり待つと言うのと違うんだよなあ
今はawaitより下の行のこと
従来だと処理が終わったらコールバックメソッドを実行する
awaitだと処理が終わるまで待つ
やってることは同じでも概念が変わって見える
でもやっぱり待つと言うのと違うんだよなあ
421デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/06(火) 23:26:37.38ID:KNaAB8gP0 ありがとう 真面目に答えてくれた人w
差しあたって、消化しきれていないけど
なんとなく見えてきたので、よく考えてみまーす
>>420
うん。awaitって、2つの意味があるんだよね。
非同期で実行する + ここで同期する(戻り値設定とか)
でも、そこが分かりづらい
でさらに、呼び出し元のスレッドは動く だから、呼び出し元の関数が動くということなんだろうけど
差しあたって、消化しきれていないけど
なんとなく見えてきたので、よく考えてみまーす
>>420
うん。awaitって、2つの意味があるんだよね。
非同期で実行する + ここで同期する(戻り値設定とか)
でも、そこが分かりづらい
でさらに、呼び出し元のスレッドは動く だから、呼び出し元の関数が動くということなんだろうけど
422デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:26:58.31ID:QbvaQ8DKa Aを待ったあとにCをやってほしいのに先にBが実行されてしまう
これはけしからん!
というのはスタートが間違い
AとB同時にやってるけど非同期処理Aが終わったらCをやってほしいが正解
これはけしからん!
というのはスタートが間違い
AとB同時にやってるけど非同期処理Aが終わったらCをやってほしいが正解
423デフォルトの名無しさん (ワッチョイ 27c3-YdG1)
2018/11/06(火) 23:30:08.92ID:jcRa2hVA0424デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:37:32.97ID:QbvaQ8DKa awaitではどのスレッドも待ってない
元のスレッドは呼び出し元の続きを実行し続ける
新しいtaskスレッドは実行し続ける
勝手に第三のスレッドができて待機したりしない
元のスレッドは呼び出し元の続きを実行し続ける
新しいtaskスレッドは実行し続ける
勝手に第三のスレッドができて待機したりしない
425デフォルトの名無しさん (ワッチョイ 27c3-YdG1)
2018/11/06(火) 23:49:27.64ID:jcRa2hVA0 await Task.Run( () => { 処理A } );
処理B
とあったら、
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
var task = Task.Run( () => {処理A} );
task.ContinueWith( (t) => {処理B}, scheduler );
みたいに置き換わる。実際はもっと複雑だけど。
処理B
とあったら、
var scheduler = TaskScheduler.FromCurrentSynchronizationContext();
var task = Task.Run( () => {処理A} );
task.ContinueWith( (t) => {処理B}, scheduler );
みたいに置き換わる。実際はもっと複雑だけど。
426デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/06(火) 23:51:27.64ID:LW+aJyL/0 これでMSは何目指したの?なんて煽りするほどの相手に初心者煽りと言われてもなーって感じする
そもそもソフトウェア技術でハマりやすいスレッド周りをかなり触りやすく提供してくれてる技術だと思うし、その点でMSに苦情なんて出る?
そもそもソフトウェア技術でハマりやすいスレッド周りをかなり触りやすく提供してくれてる技術だと思うし、その点でMSに苦情なんて出る?
427デフォルトの名無しさん (アウアウウー Sac7-MyS3)
2018/11/06(火) 23:56:24.75ID:QbvaQ8DKa さっきも書いたけど美しくないしわかりづらいんじゃないの?
数年前はもっと理解してる人が少なかった
リアルで合う人の9割ぐらいの人は誤解してたかわからないと言ってた
ググって上位に出てくるいくつかのサイトも間違いを助長するような内容ばかりだったので
誤解するのも仕方ないかなって思ったなあ
数年前はもっと理解してる人が少なかった
リアルで合う人の9割ぐらいの人は誤解してたかわからないと言ってた
ググって上位に出てくるいくつかのサイトも間違いを助長するような内容ばかりだったので
誤解するのも仕方ないかなって思ったなあ
428デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 00:01:47.29ID:qsaRvVqe0 >>424
なるほど 最初は、async/awaitの発想って非同期処理を同期処理のように見せることだと思ってた。
(結局これが正解なのね)
Webを漁っても、元々の動機からずれていくような気がしてたんだけど、
awaitで非同期処理を挟むけど同期処理をしているものと思えば、
当初の動機との整合性は取れる。
で、async/awaitの関数は(TestAsync)と書いたものは非同期なのだから
当然呼び出し元は、そのまま動いていくと。
これで、自分の中では大きなとこの整合性はとれたのかな
なるほど 最初は、async/awaitの発想って非同期処理を同期処理のように見せることだと思ってた。
(結局これが正解なのね)
Webを漁っても、元々の動機からずれていくような気がしてたんだけど、
awaitで非同期処理を挟むけど同期処理をしているものと思えば、
当初の動機との整合性は取れる。
で、async/awaitの関数は(TestAsync)と書いたものは非同期なのだから
当然呼び出し元は、そのまま動いていくと。
これで、自分の中では大きなとこの整合性はとれたのかな
429デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/07(水) 00:02:18.96ID:dWNwSiW+a430デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 00:20:23.00ID:qsaRvVqe0 >>425
BackgroundWorkerからasnc/awaitに飛んだから
Taskすらまともに理解していなんだけど、
TaskSchedulerとSynchronizationContextはキーワードとし覚えてる
レベルアップするために、そこを解説したものを教えてください。
BackgroundWorkerからasnc/awaitに飛んだから
Taskすらまともに理解していなんだけど、
TaskSchedulerとSynchronizationContextはキーワードとし覚えてる
レベルアップするために、そこを解説したものを教えてください。
431デフォルトの名無しさん (ワッチョイ 4e80-mY15)
2018/11/07(水) 00:35:56.72ID:+978RLDn0 >>406-407
cmd.exe とか、特定の命令を半角で書くと、5ch は受け付けない。
ちょっとした英単語の書き込みでハッキングされるとか、5ch の運営は、アホなんだろう
Mango 板で、単語の絞り込みのテストができる
例えば、ドットなら、💩e みたいな文字参照を使えば、書き込める
cmd💩eexe
cmd.exe とか、特定の命令を半角で書くと、5ch は受け付けない。
ちょっとした英単語の書き込みでハッキングされるとか、5ch の運営は、アホなんだろう
Mango 板で、単語の絞り込みのテストができる
例えば、ドットなら、💩e みたいな文字参照を使えば、書き込める
cmd💩eexe
432デフォルトの名無しさん (ワッチョイ 5bc9-MyS3)
2018/11/07(水) 00:38:25.44ID:T3rtNmkK0 >>424
a「wait」って名前が誤解招いている感じ
a「wait」って名前が誤解招いている感じ
433431 (ワッチョイ 4e80-mY15)
2018/11/07(水) 00:40:03.17ID:+978RLDn0 16進数の2e は間違い。ウンコが表示されたw
例えば、ドットなら、10進数の. みたいな文字参照を使えば、書き込める
cmd.exe
例えば、ドットなら、10進数の. みたいな文字参照を使えば、書き込める
cmd.exe
434デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/07(水) 00:41:05.63ID:NkMDfY750435デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 01:11:44.95ID:qsaRvVqe0 >>434
>俺も純粋にvarの理解すら怪しいのに
逆に聞くと、varってどう誤解するの?もっとも俺はvarを誤解してるかもしれないけどw
余計誤解されるかもしれないとおもって書かなかったけど
解説しておくとすると、そこはシンタックスシュガーだと思ってた Task.Resultを返す
だから、上のほうで、本来ならコンパイラーエラーを出すべきだと書いたのも そこら辺の理由
他の人も指摘してるけど、そこはawaitを書くべきだと自分も書いたのも、あるべき姿はそっちだろうと思ってたから
実際には、動かした段階で、Task<bool>なのは知ってたんだけど そこで気づくべきだった。
とは思うけど、誤解する心理とはそういうものだと思う。
ちなみに、本当にasync/awaitで知りたいのは モナドとの関わりあい
F#ではコンピュテーション式で、async/awaitが実装されてるらしいんだけど
どう実装されているのかが知りたい。
>俺も純粋にvarの理解すら怪しいのに
逆に聞くと、varってどう誤解するの?もっとも俺はvarを誤解してるかもしれないけどw
余計誤解されるかもしれないとおもって書かなかったけど
解説しておくとすると、そこはシンタックスシュガーだと思ってた Task.Resultを返す
だから、上のほうで、本来ならコンパイラーエラーを出すべきだと書いたのも そこら辺の理由
他の人も指摘してるけど、そこはawaitを書くべきだと自分も書いたのも、あるべき姿はそっちだろうと思ってたから
実際には、動かした段階で、Task<bool>なのは知ってたんだけど そこで気づくべきだった。
とは思うけど、誤解する心理とはそういうものだと思う。
ちなみに、本当にasync/awaitで知りたいのは モナドとの関わりあい
F#ではコンピュテーション式で、async/awaitが実装されてるらしいんだけど
どう実装されているのかが知りたい。
436デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/07(水) 01:29:03.21ID:NkMDfY750 >>435
まずvarはシンタックスシュガーじゃないよ
メソッドの戻り型を自分で定義してるのになんでTask外れると思ったの?
定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
asyncなんか関係なくTask<bool>型を返すメソッドを作って、その戻り値をbool型に入れるって、あれ?ってなるよね
どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
まずvarはシンタックスシュガーじゃないよ
メソッドの戻り型を自分で定義してるのになんでTask外れると思ったの?
定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
asyncなんか関係なくTask<bool>型を返すメソッドを作って、その戻り値をbool型に入れるって、あれ?ってなるよね
どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
437デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 01:42:24.43ID:qsaRvVqe0 >>436
>まずvarはシンタックスシュガーじゃないよ
というのは、どこで判断するの?
シンタックスシュガーか否かなんての 言語仕様以外の判断基準って存在するの?
delegate、匿名メソッド、ラムダ式周りなんて、旧バージョンでは許されなかった
代入が普通に許されてなかったっけ?
疑問に思った全てを、MSDNで確認するわけではないよね。
>定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
いやvarだから定義すらしてないし、脳内変換では、boolだと思い込んでるから
>どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
だから、テストした段階で、気づいていると>>435にも書いたんだけど これは、今回の一連の質問以前に知ってた
実際には、retに何が入るのかは気になるからローカルウォッチで見た
だから、コンパイルエラーの方が本来の姿だと思ってたけど…
>まずvarはシンタックスシュガーじゃないよ
というのは、どこで判断するの?
シンタックスシュガーか否かなんての 言語仕様以外の判断基準って存在するの?
delegate、匿名メソッド、ラムダ式周りなんて、旧バージョンでは許されなかった
代入が普通に許されてなかったっけ?
疑問に思った全てを、MSDNで確認するわけではないよね。
>定義した型と違う型が返ってくるなんて言語仕様そのものからかわっちゃうじゃない
いやvarだから定義すらしてないし、脳内変換では、boolだと思い込んでるから
>どんな環境でテストしてるのかわからんけどVSとかIDEならvarの上にマウスオーバーすれば型教えてくれるよ?
だから、テストした段階で、気づいていると>>435にも書いたんだけど これは、今回の一連の質問以前に知ってた
実際には、retに何が入るのかは気になるからローカルウォッチで見た
だから、コンパイルエラーの方が本来の姿だと思ってたけど…
438デフォルトの名無しさん (ワッチョイ 1ae3-aMe6)
2018/11/07(水) 01:50:14.49ID:Z88Q6V1f0 >>436
XMLDocumentにかざしたけど出ないね
XMLDocumentにかざしたけど出ないね
439デフォルトの名無しさん (ワッチョイ 27c3-kaR4)
2018/11/07(水) 01:50:48.17ID:Nx5407ci0 具体的にはどの行がコンパイルエラーになるべきだと思ってる?
440デフォルトの名無しさん (ワッチョイ 4e81-mm7G)
2018/11/07(水) 02:07:33.40ID:NkMDfY750 >>437
>async Task<int> TestAsync()
TestAsyncメソッドの戻り値をTask<int>型と定義したのは君だよ?
varは右辺から型を推論する、メソッドが○○型を返しますって定義されてるからその型になる
>async Task<int> TestAsync()
TestAsyncメソッドの戻り値をTask<int>型と定義したのは君だよ?
varは右辺から型を推論する、メソッドが○○型を返しますって定義されてるからその型になる
441デフォルトの名無しさん (ワッチョイ 1ad2-vbIu)
2018/11/07(水) 04:03:10.82ID:4Q/iuGqA0 久しぶりにvarすら使えないやつを見た
442デフォルトの名無しさん (ワッチョイ 97d3-QXT6)
2018/11/07(水) 07:40:05.39ID:Nn5ja2xC0 まあvarとawaitの合わせ技で混乱すると言うのはわからん話じゃない
C++でautoとPPLを絡めると俺も怪しい時があるし
コンパイルが通るコードを
コンパイルエラーになって欲しいと妄想したコードに勝手に改変して
コンパイルが通ると主張して出してきたくだりはさっぱりわからんがw
>>438
https://i.imgur.com/T2Wmm9g.png
出るぞ
べつに型名スペルミスしててもusingなくても出るぞ
C++でautoとPPLを絡めると俺も怪しい時があるし
コンパイルが通るコードを
コンパイルエラーになって欲しいと妄想したコードに勝手に改変して
コンパイルが通ると主張して出してきたくだりはさっぱりわからんがw
>>438
https://i.imgur.com/T2Wmm9g.png
出るぞ
べつに型名スペルミスしててもusingなくても出るぞ
443デフォルトの名無しさん (アウアウウー Sac7-kTxa)
2018/11/07(水) 07:55:13.01ID:7FHAql48a >>385
ちょ待てよ
ちょ待てよ
444デフォルトの名無しさん (ドコグロ MM92-aMe6)
2018/11/07(水) 08:24:11.94ID:o5rBIXZlM445デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 10:07:36.67ID:qsaRvVqe0 >>440
一応、以下は煽りのつもりは無いんだけど
実は未だに混乱してるんだけどね varのとこw
var ret=await TestAsync() とawaitをつけると、bool
var ret=TestAsync() とawaitをつけないと Task<bool>
とか、でも、TestAsync()関数内のreturn retはboolなんだぜ
混乱しないか?var ret=TestAsync()の方が、
普通の関数ぽいからこっちの方がboolぽいという見方もできるし
一応、以下は煽りのつもりは無いんだけど
実は未だに混乱してるんだけどね varのとこw
var ret=await TestAsync() とawaitをつけると、bool
var ret=TestAsync() とawaitをつけないと Task<bool>
とか、でも、TestAsync()関数内のreturn retはboolなんだぜ
混乱しないか?var ret=TestAsync()の方が、
普通の関数ぽいからこっちの方がboolぽいという見方もできるし
446デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 10:37:39.04ID:qsaRvVqe0 これで最後にするけど、
多分初心者にとって誤解を与えるのは、
”非同期処理を同期処理のように扱える” わけではないと思う。
きちんと、Taskを理解したうえでasync/awaitに入らないと、誤解する可能性があるということ
awaitを魔法の言葉のようにとらえると、誤解の森をさまようってしまうって感じかな
awaitできるのは、Task型に対してで決して普通の関数に適用できるわけではない。
async/awaitの書式が自然に思えるのは、Taskから入った人
そこを飛ばす人間にとっては、”非同期処理を同期処理のように扱える”が逆に誤解を与える
多分初心者にとって誤解を与えるのは、
”非同期処理を同期処理のように扱える” わけではないと思う。
きちんと、Taskを理解したうえでasync/awaitに入らないと、誤解する可能性があるということ
awaitを魔法の言葉のようにとらえると、誤解の森をさまようってしまうって感じかな
awaitできるのは、Task型に対してで決して普通の関数に適用できるわけではない。
async/awaitの書式が自然に思えるのは、Taskから入った人
そこを飛ばす人間にとっては、”非同期処理を同期処理のように扱える”が逆に誤解を与える
447デフォルトの名無しさん (ブーイモ MM7f-0Z6C)
2018/11/07(水) 10:37:56.63ID:+HyKX3eQM >>435
F#の computation expression でも let! ret = Async.AwaitTask (TestAsync()) で ret が bool になるんだが?
君には抽象化という考え方は難しいようだね
そんなんじゃF#なんか夢のまた夢だぞ
F#の computation expression でも let! ret = Async.AwaitTask (TestAsync()) で ret が bool になるんだが?
君には抽象化という考え方は難しいようだね
そんなんじゃF#なんか夢のまた夢だぞ
448デフォルトの名無しさん (スップ Sd5a-mm7G)
2018/11/07(水) 10:51:40.13ID:DKcaR4dnd >>445
右辺の型が違うんだからvarによる型推論の結果も変わるだけ
varの話をしてたのにawaitによる処理の話にすり替わってる
retがboolだろうがなんだろうがメソッドの戻り型はTask<bool>と定義したんだろ?
じゃあ疑問が出るのはメソッドの呼び出し箇所じゃなくて実装箇所じゃないの?
なんで戻り型はTask<bool>なのにreturn boolでおkなんだろう?って
ここにvarなんて関係ないのにごっちゃにするから話がこじれる
右辺の型が違うんだからvarによる型推論の結果も変わるだけ
varの話をしてたのにawaitによる処理の話にすり替わってる
retがboolだろうがなんだろうがメソッドの戻り型はTask<bool>と定義したんだろ?
じゃあ疑問が出るのはメソッドの呼び出し箇所じゃなくて実装箇所じゃないの?
なんで戻り型はTask<bool>なのにreturn boolでおkなんだろう?って
ここにvarなんて関係ないのにごっちゃにするから話がこじれる
449デフォルトの名無しさん (ササクッテロ Spbb-YFvO)
2018/11/07(水) 11:06:26.88ID:pyY+8g+op >>445
async関数を書く立場と使う立場でごっちゃにし過ぎ
> var ret=TestAsync()の方が、普通の関数ぽいからこっちの方がboolぽいという見方もできるし
そんな見方はできないよ
関数を使う側は戻り値のシグニチャに従うだけだ
逆にawait式の戻り値がTaskじゃないのが直観的じゃない、と言うなら初心者視点に限って見ればまだ理解はできる
とは言え型推論のvarが非同期機能のawaitまで勝手に面倒を見てしまうという妄想を
まるで仕様により勘違いを誘発されたかのように語るのはお門違いだな
基礎を疎かにしているのに最短距離だけ求める欲求が強すぎるて歪んでいる
async関数を書く立場と使う立場でごっちゃにし過ぎ
> var ret=TestAsync()の方が、普通の関数ぽいからこっちの方がboolぽいという見方もできるし
そんな見方はできないよ
関数を使う側は戻り値のシグニチャに従うだけだ
逆にawait式の戻り値がTaskじゃないのが直観的じゃない、と言うなら初心者視点に限って見ればまだ理解はできる
とは言え型推論のvarが非同期機能のawaitまで勝手に面倒を見てしまうという妄想を
まるで仕様により勘違いを誘発されたかのように語るのはお門違いだな
基礎を疎かにしているのに最短距離だけ求める欲求が強すぎるて歪んでいる
450デフォルトの名無しさん (オイコラミネオ MMe3-a/N+)
2018/11/07(水) 11:10:22.09ID:pVsScpvPM varはわざわざ型名書かなくて済むためのシュガーだと思うの
当然、型が自明か気にしなくて済むくらい明瞭なコードなら、可読性も満たす
書き方で型が変わるシチュで、
変数名もretにして混乱してたら本末転倒かと
当然、型が自明か気にしなくて済むくらい明瞭なコードなら、可読性も満たす
書き方で型が変わるシチュで、
変数名もretにして混乱してたら本末転倒かと
451デフォルトの名無しさん (スップ Sd5a-mm7G)
2018/11/07(水) 11:21:51.89ID:DKcaR4dnd asyncが難しいことを誰も否定していないのに勝手に初心者でも理解できると解釈して、そんなことない!って文句垂れてるようにしか見えないんだよね。
基本や順序すっ飛ばして全部一気に詰め込むなんて土台無理な話なのに
基本や順序すっ飛ばして全部一気に詰め込むなんて土台無理な話なのに
452デフォルトの名無しさん (ワッチョイ 1ad2-JVrp)
2018/11/07(水) 11:33:01.55ID:+tTqHYr+0 そもそもawaitがTaskからResult取り出すものだってわかってなかっだけだな
453デフォルトの名無しさん (ワッチョイ 1ad2-JVrp)
2018/11/07(水) 11:36:32.44ID:+tTqHYr+0 あとasyncが戻りを勝手にTaskにしてくれるのも混乱のもとか
454デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 11:44:16.22ID:h4FWJh3Ka 読んでてHaskellのIOモナドみたいとか思った。
asyncが>>=でawaitがreturn。
(Haskellのreturnは戻り値にIOを被せる)
実行順序がコード通りとは限らないと言う意味では遅延評価も非同期か。
asyncが>>=でawaitがreturn。
(Haskellのreturnは戻り値にIOを被せる)
実行順序がコード通りとは限らないと言う意味では遅延評価も非同期か。
455デフォルトの名無しさん (ワッチョイ 039f-MyS3)
2018/11/07(水) 11:46:01.13ID:qsaRvVqe0 一応読んでるよ〜
>>452
そこもまだ混乱してるんだけどね
var tas=TestAsync()
bool ret=tas.Result
とすると、デッドロックするんでしょ 理由は分かってるから説明不要
var ret=await TestAsync()
ならOKとか。違いがわかりづらい
>>452
そこもまだ混乱してるんだけどね
var tas=TestAsync()
bool ret=tas.Result
とすると、デッドロックするんでしょ 理由は分かってるから説明不要
var ret=await TestAsync()
ならOKとか。違いがわかりづらい
456デフォルトの名無しさん (ブーイモ MMba-WT4u)
2018/11/07(水) 11:50:22.74ID:T9rK23F2M なんでこんなに書き込み増えてんねん
457デフォルトの名無しさん (ササクッテロラ Spbb-Tqgu)
2018/11/07(水) 11:53:24.50ID:xNIAd77Ep いつからC#はセミコロン不要になったんだ?
458デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 11:57:23.58ID:h4FWJh3Ka >>454
あ、asyncとawaitの>>=とreturnの関係逆だった。
あ、asyncとawaitの>>=とreturnの関係逆だった。
459デフォルトの名無しさん (アウアウカー Sac3-U2lQ)
2018/11/07(水) 12:11:39.88ID:h4FWJh3Ka 要するにさ。
時間かかり過ぎる処理がUIスレッド占有するとプログラム上正常でもユーザーからは固まったように見えるから、非同期でUIスレッドから切り離してしまいましょうって機能でしょ?
asyncで別スレッドに切り離して、直後のコードで押したボタンとか無効化しておいて、答えが返ってきたら有効化する。みたいな。
(だからUIスレッドは他の操作もできるけど、await付きメソッドは(async部分以外は終わってるけど)async返るまで正式な終了では無い。みたいな。
んで、UI弄るのはUIスレッドのみって縛りを解決する為にSynchronizatrionContextがあると。
齧った限りはそんな理解。
時間かかり過ぎる処理がUIスレッド占有するとプログラム上正常でもユーザーからは固まったように見えるから、非同期でUIスレッドから切り離してしまいましょうって機能でしょ?
asyncで別スレッドに切り離して、直後のコードで押したボタンとか無効化しておいて、答えが返ってきたら有効化する。みたいな。
(だからUIスレッドは他の操作もできるけど、await付きメソッドは(async部分以外は終わってるけど)async返るまで正式な終了では無い。みたいな。
んで、UI弄るのはUIスレッドのみって縛りを解決する為にSynchronizatrionContextがあると。
齧った限りはそんな理解。
460デフォルトの名無しさん (スップ Sdba-vbIu)
2018/11/07(水) 12:12:41.51ID:j1BgkYjRd 何もドキュメント読まずに妄想だけでコーディングしようとするからこんなアホが生まれる
461デフォルトの名無しさん (アウアウエー Sa52-uVrJ)
2018/11/07(水) 12:29:37.11ID:GX8LMMiJa >>446
まあ気持ちは分からんでもないけど、「非同期処理を同期処理のように扱える」なんて
宣伝してる人はいないよね。
大概の記事は「同期処理のように<書ける>」となってるんではないか。
違うかもしれないが、あなたはasyncで修飾されたメソッドの内側の視点と、
外側からの視点の区別がついてないんじゃないか。
「同期処理のように<書ける>」というのは、あくまでasyncで修飾されたメソッドを
書いてる時の、内側の視点に立った場合の話。
先にTaskをある程度知らないと混乱するのはその通りかもしれないが、
知らなくても「async/awaitの書式が自然に思える」とは思うけどな
>>455に書いてるような落とし穴が分かりづらいのはその通りだしたぶん大方が同意するところ。
だから非同期メソッドは糞、と言いたいならそれはないんじゃないかと
まあ気持ちは分からんでもないけど、「非同期処理を同期処理のように扱える」なんて
宣伝してる人はいないよね。
大概の記事は「同期処理のように<書ける>」となってるんではないか。
違うかもしれないが、あなたはasyncで修飾されたメソッドの内側の視点と、
外側からの視点の区別がついてないんじゃないか。
「同期処理のように<書ける>」というのは、あくまでasyncで修飾されたメソッドを
書いてる時の、内側の視点に立った場合の話。
先にTaskをある程度知らないと混乱するのはその通りかもしれないが、
知らなくても「async/awaitの書式が自然に思える」とは思うけどな
>>455に書いてるような落とし穴が分かりづらいのはその通りだしたぶん大方が同意するところ。
だから非同期メソッドは糞、と言いたいならそれはないんじゃないかと
462デフォルトの名無しさん (ラクッペ MM4b-vkTM)
2018/11/07(水) 14:33:31.51ID:uHgdkwYaM 馬鹿は犬のクソでも拾ってろ
463デフォルトの名無しさん (ワッチョイ 6a80-PzUS)
2018/11/07(水) 15:23:16.06ID:B5IB+WEZ0464デフォルトの名無しさん (ワッチョイ 3eeb-ZA70)
2018/11/07(水) 16:08:24.07ID:RZxjCpbR0 C#に関しては特にそうだけど、QiitaとHatenaは検索から除外したほうが良いよ
465デフォルトの名無しさん (ワッチョイ 1ae3-aMe6)
2018/11/07(水) 18:02:56.35ID:Z88Q6V1f0466デフォルトの名無しさん (ワッチョイ 1ae3-aMe6)
2018/11/07(水) 18:03:21.43ID:Z88Q6V1f0 hatenaも
467デフォルトの名無しさん (ワッチョイ 6a80-PzUS)
2018/11/07(水) 18:04:06.24ID:B5IB+WEZ0 こうやって馬鹿が量産されるわけだ
468デフォルトの名無しさん (アウアウウー Sac7-eilh)
2018/11/07(水) 18:25:46.93ID:GPEu9teNa めるか機械翻訳に慣れているなら
stackoverflow英語版見に行けばほとんどのことは書かれていると思うよ
stackoverflow英語版見に行けばほとんどのことは書かれていると思うよ
469デフォルトの名無しさん (ワッチョイ 5a9b-mm7G)
2018/11/07(水) 22:06:05.59ID:F0eFVJRp0 Dispose();
リソースを解放ってどういう意味ですか?
リソースを解放ってどういう意味ですか?
470デフォルトの名無しさん (ワッチョイ 4ee8-MyS3)
2018/11/07(水) 22:24:06.37ID:EkNn3I7h0 デバッグ時にスレッド数分のウィンドウが出て
一斉かそれぞれでステップインしていけたりしないかなあ
一斉かそれぞれでステップインしていけたりしないかなあ
471デフォルトの名無しさん (ワッチョイ 5b80-Q1ft)
2018/11/07(水) 23:36:12.44ID:fWOqg0Pc0 頭ワルイヤツが頭ワルイ日記を読んで
ネトウヨやパヨチョンや放射脳になる
コレと同じ
タチがワルイ頭ワルイのが量産される
コレは低学歴知恵遅れに顕著
ネトウヨやパヨチョンや放射脳になる
コレと同じ
タチがワルイ頭ワルイのが量産される
コレは低学歴知恵遅れに顕著
472デフォルトの名無しさん (ワッチョイ d9e3-7saQ)
2018/11/08(木) 06:47:12.34ID:2O0gVFLm0 c#に限らずググって見つかったページを鵜呑みにするだけならキータだろうがハテナだろうがダメに決まってるだろ。
473デフォルトの名無しさん (スッップ Sdb3-RZyg)
2018/11/08(木) 07:53:34.07ID:HzGiMKkRd 配列について。
例えばクリックイベントが起こるたびに配列に1つずつ入れたい時、使いたい1次元配列を宣言して、要素数を1つずつ増やしたいときってどうすればいいですか?
例えばクリックイベントが起こるたびに配列に1つずつ入れたい時、使いたい1次元配列を宣言して、要素数を1つずつ増やしたいときってどうすればいいですか?
474デフォルトの名無しさん (ササクッテロラ Spcd-RfMZ)
2018/11/08(木) 07:59:27.65ID:t5YueCJxp arraylist
475デフォルトの名無しさん (スッップ Sdb3-RZyg)
2018/11/08(木) 08:00:45.70ID:HzGiMKkRd 一番上のパブリックで宣言時はやっぱ一個は確定でつくるものですかね?
476デフォルトの名無しさん (アウアウカー Sa9d-Gc0T)
2018/11/08(木) 08:16:23.72ID:Tu3rCJEka >>473
whileの代わりにイベント使うと考えればおk
whileの代わりにイベント使うと考えればおk
477デフォルトの名無しさん (ワッチョイ 4b23-QsJb)
2018/11/08(木) 08:53:08.32ID:YlmbbEml0 可変長なら配列じゃなくてList<型>を使えばいいよ
478デフォルトの名無しさん (ワッチョイ 419f-ki2E)
2018/11/08(木) 09:02:34.53ID:CSIZeDt+0 ワッチョイ 8a7e-zV7r
479デフォルトの名無しさん (ワッチョイ 419f-ki2E)
2018/11/08(木) 09:25:03.69ID:CSIZeDt+0 ああごめん 間違えて書き込んじゃった
いいレスしてるなぁ抽出しようとして
いいレスしてるなぁ抽出しようとして
480デフォルトの名無しさん (ワッチョイ f9c3-A2K7)
2018/11/08(木) 22:05:15.41ID:62lAQ4k70 >>474
過去の遺物
過去の遺物
481デフォルトの名無しさん (アウアウウー Sa05-8+/G)
2018/11/09(金) 08:06:06.00ID:XmmzP5eBa 先入れ先出しとかならQueueを使うかな
482デフォルトの名無しさん (ブーイモ MMb5-6bMw)
2018/11/09(金) 14:44:37.04ID:beO0HsiNM 先っちょだけ抜き差しするならstackやな
483デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 09:47:43.85ID:sUbsN3PYp 質問します。
C#初心者。プログラミング初心者です。
よろしくお願いします。
csvファイルがあって中身は
a,b,c,d
e,f,g
h,i,j,k,l,m,n
のような
行によってカンマの数(1行ずつ読み込んで配列に入れた場合は要素数)が違います。
プログラグの処理としは
このcsvファイルをの内容を1行ずつ読み込んで
xmlまたはjsonファイルに変換したいのですが
どのような処理をすれば
行によって要素数が異なるこのデータ達を
変換できるでしょうか?
よろしくお願いします。
C#初心者。プログラミング初心者です。
よろしくお願いします。
csvファイルがあって中身は
a,b,c,d
e,f,g
h,i,j,k,l,m,n
のような
行によってカンマの数(1行ずつ読み込んで配列に入れた場合は要素数)が違います。
プログラグの処理としは
このcsvファイルをの内容を1行ずつ読み込んで
xmlまたはjsonファイルに変換したいのですが
どのような処理をすれば
行によって要素数が異なるこのデータ達を
変換できるでしょうか?
よろしくお願いします。
484デフォルトの名無しさん (ブーイモ MMb3-OD9P)
2018/11/10(土) 09:52:04.57ID:HbWc37XyM Split使えば配列に変換してくれるでしょ
485デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 09:59:03.63ID:sUbsN3PYp Splitメソッドで配列に格納するところまではできてますが、その後の要素数の異なる配列を
xmlやjsonの要素に入れる際の処理のコードが腫れ上がって困ってます。
配列の要素数のパータンに応じて
If (配列の要素数=3){…}
else If(配列の要素数=4){…}
else If(配列の要素数=5){…}
のように
配列の要素数に応じてコード量が
多くなってしまいます。
他に処理の仕方はございますか?
xmlやjsonの要素に入れる際の処理のコードが腫れ上がって困ってます。
配列の要素数のパータンに応じて
If (配列の要素数=3){…}
else If(配列の要素数=4){…}
else If(配列の要素数=5){…}
のように
配列の要素数に応じてコード量が
多くなってしまいます。
他に処理の仕方はございますか?
486デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 10:31:22.39ID:sUbsN3PYp If(3<配列の要素>7){
オブジェクト名.xmlのタグ名1= 配列名[0];
オブジェクト名.xmlのタグ名2= 配列名[1];
オブジェクト名.xmlのタグ名3= 配列名[3];
オブジェクト名.xmlのタグ名4= 配列名[4];
オブジェクト名.xmlのタグ名5= 配列名[5];
}
のようにすると
配列の要素数とxmlのタグ数が違う場合にエラーがでてしまいます。
例えば上記のコードだと
配列の要素数が5以外の場合はエラーになります
オブジェクト名.xmlのタグ名1= 配列名[0];
オブジェクト名.xmlのタグ名2= 配列名[1];
オブジェクト名.xmlのタグ名3= 配列名[3];
オブジェクト名.xmlのタグ名4= 配列名[4];
オブジェクト名.xmlのタグ名5= 配列名[5];
}
のようにすると
配列の要素数とxmlのタグ数が違う場合にエラーがでてしまいます。
例えば上記のコードだと
配列の要素数が5以外の場合はエラーになります
487デフォルトの名無しさん (ワッチョイ d9e3-7vdd)
2018/11/10(土) 10:46:41.57ID:kamloJld0488デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:21:38.15ID:sUbsN3PYp ルコード
namespace Sample.model
{
public class PersonModel
{
/// <summary>
/// ID
/// </summary>
[System.Xml.Serialization.XmlAttribute("id")]
public String ID { get; set; }
/// <summary>
/// 名前
/// </summary>
[System.Xml.Serialization.XmlElement("firstname")]
public String FirstName { get; set; }
/// <summary>
/// 苗字
/// </summary>
[System.Xml.Serialization.XmlElement("lastname")]
public String LastName { get; set; }
/// <summary>
/// 誕生日
/// </summary>
[System.Xml.Serialization.XmlElement("birthday")]
public String Birthday { get; set; }
}
}
namespace Sample.model
{
public class PersonModel
{
/// <summary>
/// ID
/// </summary>
[System.Xml.Serialization.XmlAttribute("id")]
public String ID { get; set; }
/// <summary>
/// 名前
/// </summary>
[System.Xml.Serialization.XmlElement("firstname")]
public String FirstName { get; set; }
/// <summary>
/// 苗字
/// </summary>
[System.Xml.Serialization.XmlElement("lastname")]
public String LastName { get; set; }
/// <summary>
/// 誕生日
/// </summary>
[System.Xml.Serialization.XmlElement("birthday")]
public String Birthday { get; set; }
}
}
489デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:23:23.72ID:sUbsN3PYp ファイルを読み込み処理
.
.
string data =1行ずつ読み込みこんだデータ;
string xml[]= data.Split(,);
/シリアライズする為のPersonsインスタンスを生成
Sample.model.PersonsModel model = new Sample.model.PersonsModel();
model.Persons = new List<Sample.model.PersonModel>();
//インスタンスに値を設定
// Persons1
Sample.model.PersonModel person1 = new Sample.model.PersonModel();
If (3<配列の要素数<8){
person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);
}
//出力先XMLのストリーム
System.IO.FileStream stream = new System.IO.FileStream(@"D:\DATA\EXPORT.XML", System.IO.FileMode.Create);
System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, System.Text.Encoding.UTF8);
//シリアライズ
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Sample.model.PersonsModel));
serializer.Serialize(writer, model);
writer.Flush();
writer.Close();
.
.
string data =1行ずつ読み込みこんだデータ;
string xml[]= data.Split(,);
/シリアライズする為のPersonsインスタンスを生成
Sample.model.PersonsModel model = new Sample.model.PersonsModel();
model.Persons = new List<Sample.model.PersonModel>();
//インスタンスに値を設定
// Persons1
Sample.model.PersonModel person1 = new Sample.model.PersonModel();
If (3<配列の要素数<8){
person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);
}
//出力先XMLのストリーム
System.IO.FileStream stream = new System.IO.FileStream(@"D:\DATA\EXPORT.XML", System.IO.FileMode.Create);
System.IO.StreamWriter writer = new System.IO.StreamWriter(stream, System.Text.Encoding.UTF8);
//シリアライズ
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Sample.model.PersonsModel));
serializer.Serialize(writer, model);
writer.Flush();
writer.Close();
490デフォルトの名無しさん (アウアウウー Sa05-8u3a)
2018/11/10(土) 11:26:08.88ID:q+mWhUVWa >>483
var data = File.ReadAllLines("path/to/file.csv")
.Select(line => line.Split(","));
var jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(data);
var data = File.ReadAllLines("path/to/file.csv")
.Select(line => line.Split(","));
var jsonText = Newtonsoft.Json.JsonConvert.SerializeObject(data);
491デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:27:19.41ID:sUbsN3PYp person1.ID = data[0];
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);
}
ここの処理に困っています。
この場合は読み込みだデータの配列の要素数が4以外の場合エラーになります。
エラー原因は要素が4未満の場合は
指定したxmlのタグの数に満たないためだと考えられます
person1.FirstName = [1];
person1.LastName = [2];
person1.Birthday = [3];
model.Persons.Add(person1);
}
ここの処理に困っています。
この場合は読み込みだデータの配列の要素数が4以外の場合エラーになります。
エラー原因は要素が4未満の場合は
指定したxmlのタグの数に満たないためだと考えられます
492デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:28:55.94ID:sUbsN3PYp 間違えました
data[0]ではなく
xml[0] でした
data[0]ではなく
xml[0] でした
493デフォルトの名無しさん (ササクッテロル Spcd-WqUE)
2018/11/10(土) 11:33:51.32ID:sUbsN3PYp >490
ご指摘ありがとうございます。
要素数が異なる配列を
xmlタグ要素に入れる処理の
ご指摘を頂けると幸いです。
読み込んだ1行のデータの配列の要素が異なる場合の処理はどのように書くのがスマートでしょうか?
ご指摘ありがとうございます。
要素数が異なる配列を
xmlタグ要素に入れる処理の
ご指摘を頂けると幸いです。
読み込んだ1行のデータの配列の要素が異なる場合の処理はどのように書くのがスマートでしょうか?
494デフォルトの名無しさん (アウアウウー Sa05-I2rI)
2018/11/10(土) 12:23:15.91ID:h+MQ7FTQa >>491
要素が足りない場合に、Birthdayなどをどう書き込むべきかによる
何かしらの既定値を書き込みたいなら
string GetOrDefault(string[] xml, int index, string defaultValue)
{
if (0 <= index && index < xml.Length) { return xml[index]; }
return defaultValue;
}
のような補助メソッド作って
person1.Birthday = GetOrDefault(xml, 3, "1000/01/01");
のように取得する
要素が足りない場合にはBirthdayなどを書き込まないなら
xml出力の方では、PersonModelクラスのメンバーにDefaultValue属性を付けて
その属性で指定した値を格納しておけば書き出されなくなる
JSONの方も同じように書き出さないように出来ると思う
要素が足りない場合に、Birthdayなどをどう書き込むべきかによる
何かしらの既定値を書き込みたいなら
string GetOrDefault(string[] xml, int index, string defaultValue)
{
if (0 <= index && index < xml.Length) { return xml[index]; }
return defaultValue;
}
のような補助メソッド作って
person1.Birthday = GetOrDefault(xml, 3, "1000/01/01");
のように取得する
要素が足りない場合にはBirthdayなどを書き込まないなら
xml出力の方では、PersonModelクラスのメンバーにDefaultValue属性を付けて
その属性で指定した値を格納しておけば書き出されなくなる
JSONの方も同じように書き出さないように出来ると思う
495デフォルトの名無しさん (ドコグロ MM1d-7vdd)
2018/11/10(土) 12:35:22.80ID:2+OzQsKxM >>493
サルなの?
仕様も決めないでどうやるもこうやるもねぇよ
じゃあ、全部key,valueでいいよ
csvに存在するすべての要素をkey,valueで出せ
keyのフォーマットはcolumn-rowな
xmlでのタグ名はdata
属性はkeyとvalue
サルなの?
仕様も決めないでどうやるもこうやるもねぇよ
じゃあ、全部key,valueでいいよ
csvに存在するすべての要素をkey,valueで出せ
keyのフォーマットはcolumn-rowな
xmlでのタグ名はdata
属性はkeyとvalue
496デフォルトの名無しさん (アウアウウー Sa05-8u3a)
2018/11/10(土) 13:04:57.13ID:q+mWhUVWa >>493
var persons = File.ReadAllLines("file.csv")
.Select(line => { var a = line.Split(","); Array.Resize(ref a, PROP_COUNT); return a; })
.Select(a => new Person() {
ID = a[0],
Name = a[1],
...,
LastProp = a[PROP_COUNT - 1]
});
var json = JsonConvert.SerializeObject(persons);
var persons = File.ReadAllLines("file.csv")
.Select(line => { var a = line.Split(","); Array.Resize(ref a, PROP_COUNT); return a; })
.Select(a => new Person() {
ID = a[0],
Name = a[1],
...,
LastProp = a[PROP_COUNT - 1]
});
var json = JsonConvert.SerializeObject(persons);
497デフォルトの名無しさん (ワッチョイ 4b33-mDL8)
2018/11/10(土) 15:54:29.53ID:48CyTBFD0 jsonって名前=値ペアの連想配列は順序が保証されないので
順序を保証したい場合は配列で囲って [{名前: 値}{名前: 値}] みたくすると思うんですが、
データ保存用途として見た場合使い難くないですかね?
シリアライズした時も処理系によって順序が保証されないから単純diff比較も使えずパースして比較する必要がありますよね
これって問題にならないんですか?
順序を保証したい場合は配列で囲って [{名前: 値}{名前: 値}] みたくすると思うんですが、
データ保存用途として見た場合使い難くないですかね?
シリアライズした時も処理系によって順序が保証されないから単純diff比較も使えずパースして比較する必要がありますよね
これって問題にならないんですか?
498デフォルトの名無しさん (ワッチョイ 31b3-uQDt)
2018/11/10(土) 16:48:27.38ID:gqodC/ga0 名前と値で取れるんだから、順序関係ないだろ?
499デフォルトの名無しさん (ワッチョイ 31b3-uQDt)
2018/11/10(土) 16:49:31.82ID:gqodC/ga0 つか、シリアライズした結果がいつでも同じだと思うのか?
500デフォルトの名無しさん (ワッチョイ 93b3-Mdza)
2018/11/10(土) 17:04:14.17ID:hLxIIZfE0 >>498
テキストだからdiffしたいって言うのは割とよくある要望
テキストだからdiffしたいって言うのは割とよくある要望
501デフォルトの名無しさん (ワッチョイ 4b33-mDL8)
2018/11/10(土) 18:05:23.42ID:48CyTBFD0 たとえばweb屋なら画面のチェックボックスとかの状態をjsonでデータ管理するとして
そのデータから設定仕様書とかを起こす時に困るんじゃないかな
なんかここだけアルゴリズム依存で時代と逆行してるような気がしてイマイチなんですよ
そのデータから設定仕様書とかを起こす時に困るんじゃないかな
なんかここだけアルゴリズム依存で時代と逆行してるような気がしてイマイチなんですよ
502デフォルトの名無しさん (ササクッテロル Spcd-uQDt)
2018/11/10(土) 18:07:52.91ID:/C4Raf5+p んなもん仕様書の書き方次第だろ。
503デフォルトの名無しさん (ワッチョイ 41eb-K50l)
2018/11/10(土) 18:26:43.69ID:ZJVvB/9K0 なんかよくわからないけど、このJSON君はお金出して誰かに作ってもらったほうがいいんじゃねえの?
504デフォルトの名無しさん (ラクッペ MM6d-0mwj)
2018/11/10(土) 18:31:49.77ID:jXgJ1KMYM JSONがイマイチだというお前の小言にこのスレはつき合わなければならないのか?
C#に関係ないんだが
C#に関係ないんだが
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【実況】博衣こよりのえちえち朝こよ🧪
- ヨッシー、ヘイホー、テレサ ←こいつらwwwwwwwww
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- さかまた「過呼吸になった」かなた「耳聞こえない」ござる「声出ない」まつり「ご飯食べれない」
- くそしてかがやけ
- テレビ「地震!津波!高いところへ逃げて!」
