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


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

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



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

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

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

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

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

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

■関連スレ
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/

880 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 00:55:09.75 ID:6YLFMraq.net]
>>862
あいつ、主語と修飾語の区別ついてないからwww

881 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 00:56:14.77 ID:yLsVqD35.net]
>>865
お前は愛に溢れすぎ

882 名前:デフォルトの名無しさん [2016/07/30(土) 00:57:56.56 ID:ukjq/gdc.net]
>>861
S-JISで解釈できる領域への通知なんですね、分かりました

883 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:08:16.57 ID:ukjq/gdc.net]
>>862
なんとなく分かるよ
それをブラウザの代わりにC#にやらせるんだよね?


ContentType≒送るデータの種類として、
application/x-www-form-urlencoded≒ウェブのフォームで使われる情報です(urlエンコード済みです)

ここがちょっとわかりくいね
そもそもウェブのフォームで使われる情報をって当たり前の事では?
これらのデータを送るから処理して下さいという意味なのに、種類もくそもあるの?という疑問が湧きました
どうぞ

884 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:11:11.88 ID:6YLFMraq.net]
>>869
スレチ

885 名前:デフォルトの名無しさん [2016/07/30(土) 01:14:33.94 ID:ukjq/gdc.net]
>>870
スレチ厨はもういいよ
寝たら?

886 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:16:22.02 ID:crIAC8Sk.net]
>>869
どうぞ、釣りは失せろでございますわよ。

887 名前:デフォルトの名無しさん [2016/07/30(土) 01:20:32.96 ID:ukjq/gdc.net]
>>872
釣りじゃないんですよ

送るデータの種類=application/x-www-form-urlencodedってことは
もしかして区分があるってことですか?
例えばテキストボックスの情報はA群、ボタンを押したという通知はB群みたいなことなんでしょうか?

888 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:22:18.00 ID:6YLFMraq.net]
>>873
HTMLはスレチ



889 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:23:23.88 ID:ukjq/gdc.net]
>>874
そんな器用な分別ができてたらこんな初心者スレで聞かねーよ
もう色んな事がごっちゃになってるんだからここで聞かせろ

890 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:29:46.30 ID:crIAC8Sk.net]
>>873
>>875

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

891 名前:デフォルトの名無しさん [2016/07/30(土) 01:31:57.96 ID:ukjq/gdc.net]
俺の勘違いか

application/x-www-form-urlencoded≒ウェブのフォームで使われる情報です(urlエンコード済みです)

htmlにはフォーム以外の部分があって、その区分もまた別にあるんですね
俺が言ってたのはフォームの中でのさらに小さい区分でしたね、そういうことではない

ですよね?

892 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:37:01.32 ID:6YLFMraq.net]
>>877
Web制作
echo.2ch.net/h

893 名前:p/ []
[ここ壊れてます]

894 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:38:45.00 ID:ukjq/gdc.net]
>>878
粘着してまで書き込みしたい???
寝ろよ

895 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:40:14.97 ID:WsjdSta8.net]
>>877
htmlの中のformがurlエンコードされたものですよって教えるためのものだよ
他の部分は関係ない

896 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:45:56.67 ID:crIAC8Sk.net]
>>878
はC#のプログラムは作ったことが有って、今後のためにASP.NET覚えたいと思って、
サンプルのサイトを見てるけど、意味がわからないってこと?

それなら、今見ているサイトのアドレス晒して。

897 名前:デフォルトの名無しさん [2016/07/30(土) 01:49:42.31 ID:ukjq/gdc.net]
>>880
formがurlエンコード、こういう分かりにくい表現は好きじゃないな
formの情報がURLとしてエンコードされますよってことだから
URLなんて書いちゃったらホームページのURLとこんがらがるでしょ
説明のときはもっと分かりやすく!

898 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:52:48.60 ID:crIAC8Sk.net]
>>882
釣りマジで失せろでございますよ。
「説明のときはもっと分かりやすく! 」?
何様のつもりだテメエ失せろやボケがでございますよ。



899 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:53:31.20 ID:ukjq/gdc.net]
application/x-www-form-urlencodedは
こういう感じでエンコードしましたよっていいつつそれが識別子にもなってるってパターンですよ

ようは「この愛の歌をみんなに届けたい〜」とかいいつつそれ自体がラブソングの
歌詞みたいな事でしょ?秀逸なたとえ

このスレの人はね、色々知ってるんだろうけど用語をもっとさかみ砕くなり
分かりやすさ重視で教えてあげないと伝わらんと思うよ?

900 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:56:18.85 ID:crIAC8Sk.net]
I Banned.

901 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 01:57:06.31 ID:ukjq/gdc.net]
>>881
ASP.NETの話なんてしてないでしょ…

902 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:01:39.03 ID:ukjq/gdc.net]
>>883
釣りならこんな勘違いの連続をしない
最終的には理解できたんだから

903 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:10:12.43 ID:6YLFMraq.net]
>>887
予備知識としてHTMLの理解が必要

Web制作
echo.2ch.net/hp/

904 名前:デフォルトの名無しさん [2016/07/30(土) 02:20:35.83 ID:ukjq/gdc.net]
コピペしたら動くんだろうけど俺にとっては深い理解が大変
dobon.net/vb/dotnet/internet/webrequestpost.html

Streamっていうのがどうなってるのかがよくわからないな
//送信するデータを書き込む
reqStream.Write(postDataBytes, 0, postDataBytes.Length);
ってことでURLエンコードした文字列を送るコードだけど
さっきのreqはどこいった?reqもストリームに乗せなくて大丈夫?
でそのコードはどこだ…

905 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:21:35.08 ID:ukjq/gdc.net]
>>888
そんな器用に分けられないからもうここでいいだろ
そんな器用に分かるような人間なら最初から理解してるっつの
しつこいなお前は

906 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:22:44.26 ID:crIAC8Sk.net]
>>887
>最終的には理解できたんだから

おめでとう。

>>884
>ようは「この愛の歌をみんなに届けたい〜」とかいいつつそれ自体がラブソングの
>歌詞みたいな事でしょ?秀逸なたとえ


おめでたい。

907 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:23:42.69 ID:ukjq/gdc.net]
後はreqStream.Write(postDataBytes, 0, postDataBytes.Length);
だとストリームに書き込んだだけで、送ってはいないよね?
ストリームというのは通路とか情報を送るトンネルみたいなイメージだけど
そのトンネルに情報を置く=writeするだけで
もう動くの?スイッチみたいなことが必要な気がするんだけど…

908 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:28:52.99 ID:ukjq/gdc.net]
reqStream.Write(postDataBytes, 0, postDataBytes.Length);
reqStream.Close();

しかも次の瞬間Closeしてる…
情報がちゃんと送られてからCloseしないとダメでは?
という疑問が湧いた。

コード自体は紛れもないエラーも何もないコードだけど
動作の仕組みが分からないからコードを見て考えると疑問がいくらでもわいてくる
Streamというのがどんな動作をする機能なのか俺には分からない

それを一つずつ教えてほしい
知識より考え方のほうが大切だから、それをみんなにもわかって欲しい



909 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:33:08.25 ID:ukjq/gdc.net]
俺はいま躓いてるのは
Streamね、Streamが流れという概念のある機能だと漠然とした認識ではダメだ
C#ではStreamがどういう動作をするのか、それを追及しないとコードを理解できない
というわけで何故Streamのコードが動くのか説明してください誰か

910 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:34:29.62 ID:ukjq/gdc.net]
今までコピペプログラマだったからこういう深い理解が必要なんですよ
コピペして動くじゃダメなんです、そのからくりやら仕組みをちゃんと理解しないとダメ

911 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:35:31.89 ID:ukjq/gdc.net]
C言語のStreamとC#のStreamは恐らく違うだろうからまずそこからかな

912 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:36:08.56 ID:ukjq/gdc.net]
皆さん答えて下さいよ、今僕以外に質問してる人はいないんだから迷惑ではないはずです
誰もいない深夜に集中して質問してるんです、これは迷惑ではないですよね?

913 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:37:26.37 ID:ukjq/gdc.net]
少なくとも俺と同じ疑問を持つだろうなって思う人もいると思うので有益だとは思います
Streamについて詳しく教えて下さい、ちゃんと返答もします

914 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:40:09.16 ID:WsjdSta8.net]
>>893
Closeするときに送信する処理が行われてるんだね
簡単だね

915 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:41:42.81 ID:ukjq/gdc.net]
>>899
Closeの中身を見れば分かるってことですか?
どうなってるか教えて下さい
どういうメソッドがあるんでしょう?

916 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:43:34.60 ID:ukjq/gdc.net]
コードを見ただけで流れが分かるというメリットを考えたら
Closeの中に書く意味とかあります?
可読性ではなくて、物語性というか…

917 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:45:37.77 ID:tQhYyiEg.net]
ID:ukjq/gdc もうあんたのレスは俺にしか見えてないよ…
そして俺からも…さようなら

918 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:48:23.16 ID:6YLFMraq.net]
>>899
キチガイに触んなすな



919 名前:デフォルトの名無しさん [2016/07/30(土) 02:53:02.00 ID:ukjq/gdc.net]
>>903
たった一行のレスを何レスにもわたって延々としてるあなたのほうがキチガイだと思いますが…
あなたも質問したいならすれば?そうして空気が変われば俺は身を引きますよ
答えてくれる人がいるから質問してるんです、たった一行をずっとなんて空しい行為はやめなさい

920 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 02:55:38.70 ID:ukjq/gdc.net]
これ

Streamっていうのがどうなってるのかがよくわからないな
//送信するデータを書き込む
reqStream.Write(postDataBytes, 0, postDataBytes.Length);
ってことでURLエンコードした文字列を送るコードだけど
さっきのreqはどこいった?reqもストリームに乗せなくて大丈夫?
でそのコードはどこだ…

この疑問は結構素朴だと思うんですけど、こういう質問は何がいけないんでしょう?
ストリームは最後のトンネル、そのトンネルにreqがいないのは何故?
その仕組みが分からないという事です、おかしいですか?

921 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:01:14.64 ID:crIAC8Sk.net]
>>知識より考え方のほうが大切だから、それをみんなにもわかって欲しい
御託より調べようと手を動かすほうが大切だから、それをID:ukjq/gdcにもわかって欲しい

プログラムは主に英語という言語がベースになっています。C#もそうです。
Streamが道だと思っていたことこそが、あなたの知識量云々より、【あなたのプログラムへの取り組み姿勢】に問題が有ることの現れです。
私が小学生の頃にプログラムを始めた時に、意味のわからないことは辞書で調べましたよ。参考のプログラムを実際に実行させましたよ。
Streamは道じゃありません。【流れ】です。これは英語の辞書を引けば分かります。

922 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:03:54.83 ID:crIAC8Sk.net]
reqStream.write

リクエスを送る流れに書き込む。
これでデータが送られないと思う理由が分からなん。

御託はいいからアドレス晒してよ。

923 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:05:06.31 ID:0RZw9HDW.net]
釣りじゃないなら
一度メンタルの病院行った方が良いんじゃないかな
割と本気で

924 名前:デフォルトの名無しさん [2016/07/30(土) 03:10:04.37 ID:6eJMfqp8.net]
釣りに決まってんだろm9

925 名前:デフォルトの名無しさん [2016/07/30(土) 03:11:48.37 ID:ukjq/gdc.net]
>>908
釣りと思う理由は?

926 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:13:58.90 ID:crIAC8Sk.net]
>>909

こいつ「ID:ukjq/gdc」が「釣れてると思って喜んでる」のを「あや釣る」のも面白いんだよwww

927 名前:デフォルトの名無しさん [2016/07/30(土) 03:17:44.12 ID:ukjq/gdc.net]
>>899の人はCloseで送信処理している!と言っていて
>>907ではWriteで送信処理まで終わっているといってますね
意見が分かれちゃった、この時点で有意義な質問だったと思えますが…

928 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:20:32.60 ID:crIAC8Sk.net]
>>912
送信処理まで終わっているといってますね

どこに?



929 名前:デフォルトの名無しさん [2016/07/30(土) 03:22:02.11 ID:ukjq/gdc.net]
>>913
reqStream.write

リクエスを送る流れに書き込む。
これでデータが送られないと思う理由が分からなん。

930 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:28:13.89 ID:crIAC8Sk.net]
>>914


>「リクエスを送る流れ」に「書き込む」。
>これで「データが送られないと思う理由」が分からん。

あなたの認識が正しいなら、
「データが送られない」=「送信処理まで終わっている」?

日本語のお勉強をし直しては。

931 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:41:03.36 ID:ukjq/gdc.net]
System.IO.Stream reqStream = req.GetRequestStream();
なんだrequest用のストリームか、ここでreq仕様にしてるのか

932 名前:デフォルトの名無しさん [2016/07/30(土) 03:42:07.56 ID:ukjq/gdc.net]
>>915
だから送られるタイミングですよ
あなたの言い方だとWriteした時点で送信されるみたいに捉えられますよ

933 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 03:53:53.45 ID:crIAC8Sk.net]
あなたの言い方だとWriteした時点で送信されるみたいに捉えられますよ

>「だから送られるタイミングですよ」
>「送信されるみたいに捉えられますよ」

どこらへんでそう捉えたの?

「だから送られるタイミングですよ」

これはあなたが今しがた(今も?)疑問に思っていたことって意味ですか?

934 名前:デフォルトの名無しさん [2016/07/30(土) 04:02:28.99 ID:ukjq/gdc.net]
だめだこの人
揚げ足取ることしか考えてないね
こっちは単にStreamの疑問知りたいだけなのにさ…
なんか残念です、まー>>899が正解ってことならそれでいいです

935 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 04:02:46.60 ID:4BSXkGIU.net]
すんゲー伸びてると思ったらまた例の人かよ
C#に関係ない質問を延々と続けられると迷惑
もう次スレのテンプレに触るなって書いたほうがいいな

936 名前:デフォルトの名無しさん [2016/07/30(土) 04:54:15.58 ID:mo3DDFsV.net]
>>827
Cに関しては本当にそうなんでしょうね。

Cを本格的に学ぼうとするとそら大変なんでしょうけど
プログラミングの仕組みを理解する上では
つまり浅い段階の理解についてはC関連のものが分かりやすかったもんで

C#は逆に海外のサイトとかの方がわかりやすいかもですた
とりあえず形になるよう頑張ります

937 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 04:54:55.79 ID:crIAC8Sk.net]
>>919
>こっちは単にStreamの疑問知りたいだけなのにさ…

じゃあ、お望み通り正しく説明します。

1.Streamというのは流れという意味の単語です。
2.RequestStreamというのは「リクエストが流れる」ものです。
3.RequestStreamのインスタンスにリクエストを書き込むにはWriteメソッドを呼び出します。

4.Writeメソッドが呼び出されたからといって、即座にリクエストが流れるとは限りません。

5.ただし、リクエストが即座に流れることも有ります。
5-1.即座に流れる場合は、RequestStreamのバッファー領域がリクエストする情報より小さい時です。
5-2.加えて、RequestStreamのAutoFlush(自動洗浄)が有効な場合です。

6.プログラマーは、任意のタイミングでRequestStreamをFlushして、随時リクエストを送信を促すことも可能です。
6-1.多くの場合はFlushするとリクエストは即座に送信されます。
6-2.しかし、RequestStreamの実装の如何によって、即座に送信されないこともあります
6-3.これはRequestStreamを実装した側の都合によって、適切に無視することが許されているからです。
6-4.故に、このFlushを用いてリクエストが今送信されたかどうかをプログラマーが気にすることは愚かです。

7.RequesStreamは、リクエストストリームをこれ以上使用しなくて良い段階に来た際には、Closeメソッドを呼び出す必要があります。
7-1.Closeメソッドを呼び出した際にバッファーが空でなかった場合の挙動は、言語やその言語のジャージョンによって異なります。
7-2.例えば、(黎明期のJavaなどは)Flushしていないデータが欠落することなどもあり得たわけです。
7-3.ただし、C#であればCloseをすれば問題なくリクエストの送信は開始され、やがて終了します。
7-4.故に、このCloseを用いればWriteしたタイミングでリクエストが流れているかいないのか、はたまた
    Flushしたタイミングでリクエストが流れているのかいないのか、
    気にしなくとも良いのです。
7-5.但し、膨大なリクエストを逐次的に長い期間にかけて渡さなければならないような場合には、
    Flushを行いながら処理を行っていく必要があります。

938 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 04:59:45.17 ID:crIAC8Sk.net]
>>922
「ID:ukjq/gdc」と「ID:mo3DDFsV」の質問は向こう1日間は受け付けません。
質問する前に、一旦落ち着いて整理して下さい。その後縁があって質問があれば、回答を行います。



939 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 07:44:01.40 ID:SD9Rxi9F.net]
>>825
自分から勉強しようと思う気持ちがないと続かないよ
別にプログラマーに限ったことじゃないけど

940 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 08:40:01.82 ID:RyCiYMxC.net]
dobon.net/vb/dotnet/internet/webrequestpost.html
は、もう新規の人には紹介しない方が良いのでは。

HttpWebRequestは古臭い仕様で面倒臭い。
今から覚えるのなら、便利で分かりやすいHttpClientの方が良いだろう。

941 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 08:41:01.11 ID:RyCiYMxC.net]
.NET TIPS:
HttpClientクラスでWebページを取得するには?[C#、VB]
www.atmarkit.co.jp/ait/articles/1501/06/news086.html

942 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 09:03:14.71 ID:RyCiYMxC.net]
しまった、>>926はPOSTしてないから適切じゃなかった。
HttpClientは、まだ解説がしてるところが少ないのが難点だね。特に日本語の。

Web API よりも HttpClient に注目したい(しばやん雑記)
blog.shibayan.jp/entry/20120822/1345563275

943 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 10:31:45.32 ID:uyw/q1V9.net]
おはよう
>>919
本当に釣りじゃないんだな?
それならとりあえずここに来い
俺がここで相手してやるから
echo.2ch.net/test/read.cgi/hp/1468250963/

APS.NETの前にHTTP、HTMLの基本を覚えた方がいい

944 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 11:17:49.72 ID:ukjq/gdc.net]
仕事(プログラマではない)でWireshark使ってるんでパケットの流れには興味あるんです
釣りでは決してありません
>>922
詳しいレスありがとうございます。


5.ただし、リクエストが即座に流れることも有ります。
5-1.即座に流れる場合は、RequestStreamのバッファー領域がリクエストする情報より小さい時です。
5-2.加えて、RequestStreamのAutoFlush(自動洗浄)が有効な場合です。

でもなぜこんな詳細に分かるのかというか、どういう本読めば分かるんですか?

6.プログラマーは、任意のタイミングでRequestStreamをFlushして、随時リクエストを送信を促すことも可能です。

とめてから一気に送るみたいな安全なコードもかけるんですね、でしたらそのコードみてみたい


故に、このFlushを用いてリクエストが今送信されたかどうかをプログラマーが気にすることは愚かです。
????????
知りたい場合は?

945 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 11:18:22.50 ID:ukjq/gdc.net]
>>928
もうHTMLの話はしない

946 名前:デフォルトの名無しさん [2016/07/30(土) 11:28:06.60 ID:xUJaRIFl.net]
C#を取り扱っている先輩方、ご質問があります。
今、SQLserverのDBを用いてコーディングしています。その時に、双方向にそれぞれのリストを持たせた場合、
多対多の関係になると学びました。また、そのコードを記述し動かすと自動で中間テーブルを作り、
1対多、(中間テーブル)、多対1の関係性をDBに作ってくれるまでできました。
ただ、中間テーブルを作成したものの値が入りません…何かアドバイスお願いします。

public class A {
public int Id {get;set;}
public List<B> b;
}

public class B {
public int Id {get;set;}
public List<A> a;
}

static void main(){

A a = new A(){};
a.b.Add( new B { Id = 1 });

B.b = new B(){};
b.a.Add( new A { Id = 1 });
}


このようなクラスで中間テーブルまでは作成されます。
NULLの原因としては、AではBのリストを、BではAのリストをnewで入れてないからなのかなとは思うのですが、
new A { Id = 1, <bのリストに値を入れる記述> }
上記の<>で挟んだ部分をなんと記述したらいいのかわからないです…

947 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 11:47:47.91 ID:5Lcdfshx.net]
>>931
単にクラス定義をこうするだけではダメかな?

public class A {
public int Id {get;set;}
public List<B> b = new List<B>();
}

public class B {
public int Id {get;set;}
public List<A> a = new List<A>();
}

948 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 12:02: ]
[ここ壊れてます]



949 名前:50.80 ID:UF7V38Hh.net mailto: >>932
あ、すみません
コンストラクタでのnewを記述し忘れていました
それは問題ないです。またつまっているところが違ったと気付いたので、今から書き直してみます…
[]
[ここ壊れてます]

950 名前:デフォルトの名無しさん [2016/07/30(土) 12:11:56.19 ID:gt3sWNMS.net]
public class C {
public List<A> a;
public List<B> b;
}

public class A {
public int Id {get;set;}
public List<B> ListB;
public C c; // 外部キー
public A(){ b = new List<B>();}
}

public class B {
public int Id {get;set;}
public List<A> ListA;
public C c; // 外部キー
public B(){ a = new List<A>();}
}

CがAとB、AがB、BがAのリストを持っている構造にしたいです。
その際に、CにAddする時に、

static void main(){

C c = new C();
c.a.Add( new A { Id = 1, ListB = ????? });
}

< Cの持つリストa >に情報を入れる時の< ListB >の部分で詰まっています。ここをうまく解決できれば、中間テーブルにも
値が入るのではないかなと考えています。
List<B> tmpB = new List<B>();で定義したtmpBを入れてみても中間テーブルに値は反映されていませんでした。
A, B それぞれに、それぞれの外部キーを設定する必要があるとかでしょうか?

951 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 12:21:23.10 ID:5Lcdfshx.net]
>>934
一旦シンプルにしたほうがいい。
クラスCの定義が変だと思う。

//これはAとBの関係を保つためのクラス
public class C {
public A a;
public B b;
}

public class A {
public int Id {get;set;}
}

public class B {
public int Id {get;set;}
}

952 名前:デフォルトの名無しさん [2016/07/30(土) 12:32:22.73 ID:VbvJ+5P0.net]
>>935
つまり、Cはa, b に関係を持つが集約の関係性ってのがおかしいってことでしょうか
一応、そこの関係性は崩せると思いますが、ABの関係性は崩すと大きくクラス設計に関わってきそうです…

public class C {
public A a;
public B b;
}

public class A {
public int Id {get;set;}
public List<B> ListB;
public C c; // 外部キー
public A(){ b = new List<B>();}
}

public class B {
public int Id {get;set;}
public List<A> ListA;
public C c; // 外部キー
public B(){ a = new List<A>();}
}

static void main(){

C c = new C();
c.a = new A { Id = 1, ListB = ????? };
}

953 名前:デフォルトの名無しさん [2016/07/30(土) 12:34:07.18 ID:VbvJ+5P0.net]
連投ですみません。
どちらかと言うと、多対多で中間テーブルが自動生成させるのを達成したい感じです…
この状況で A B C のテーブルは自分で作ることになりますが、
A B の中間テーブルは自動で作られると思うので…

954 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:07:12.61 ID:RyCiYMxC.net]
>>934
c.a.Add( new A { Id = 1, ListB = c.b });
でダメなのかい。

後、
c.a = new List<A>();
c.b = new List<B>();
も抜けてそうだけど。

955 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:27:18.34 ID:cua4PELF.net]
ListのインスタンスをA,Bのコンストラクタで作る(A,BのインスタンスごとにListを持つ)つもりのようだけど
作ったListにはどんなAやBをAddしていくつもり?

AはBのListを持ち、そのListに入るBを作るにはAのListを作りそのAのListに…
…となると終わりはないけど、リストが空でも問題ない?
空で問題ないなら、new A するときに ListBに何かする必要はない
(というか、ListB = ??? とかしちゃうと、Aのコンストラクタでの new List<B>()が無駄になるよ)

956 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:27:52.31 ID:NxOPfq9t.net]
>>929
漏れらは、何十冊も本を読んでいるから、よく知っている。
素人の知識・勉強量では無理。どの資格にも受からない

皆Linux板では、SSDへの書き込み回数を減らして、寿命を延ばすため、
通常は5秒毎にフラッシュされるところを、15〜30秒にしている人も大勢いる

システムが信用できないからって、システム終了時に5分かけて、フラッシュを3回やってから、
電源を切っている人もいるくらい

OSに書き込み要求を出すというのと、デバイスが書き込んだあとに、
知らせてもらうというのは異なる。
常に、デバイスが本当に書き込んだかどうかを、疑うべき

957 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 13:59:52.29 ID:vwndqmNO.net]
>>938
まさにそこです

>>939
そうなるんですよね
別に空でも問題ないです
ヌルも許容する予定なので

ただ…それだと中間テーブルには値が入らず…ってなるので
何をどうしたらいいのかわからないってなっているところです

958 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 14:35:50.97 ID:cua4PELF.net]
>>941
AのListBにはどんなBを、BのListAにはどんなAを入れるつもり?
それがはっきりしないと、前には進まないような…

それと…
…ごめん、こちらが勉強不足だからだけど

>双方向にそれぞれのリストを持たせた場合、
>多対多の関係になると学びました。

って、どういうことだろう…
今やってるみたいに、モロにお互いを循環させることなのかな…?

あと、
>また、そのコードを記述し動かすと自動で中間テーブルを作り、
>1対多、(中間テーブル)、多対1の関係性をDBに作ってくれる

というそのコードがネットで見れるのなら、それを教えてほしいんだけど…



959 名前:デフォルトの名無しさん [2016/07/30(土) 14:42:59.78 ID:kE9N+QT2.net]
>>941
AとBは講師と学生の関係ですね
講師は複数の学生を教え、学生は講師を複数持つ
みたいな関係にするために多対多になっています
講師1に対して学生A,B,C,Dを検索でき、学生Aに対して講師1,2,3を検索できるような感じです

コードファースト開発を行っていてどこかで見たんですよね…。ただ、今回の内容については書いてなかったんです。
実際データベースにアクセスしているのは、三つしかないんですけど、
4つ目の講師・学生のIDを照らし合わせたテーブルも生成されます。
試しにコーディングしてSQLServerに繋げてみると謎のA・Bのテーブルが出来るとおもいます

960 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 14:44:17.66 ID:crIAC8Sk.net]
public class C {
  public List<A> a;
  public List<B> b;
  public C(){ a = new List<A>(); b = new List<B>();}
}

public class A {
  public int Id {get;set;}
  public List<B> ListB;
  public C ListC{get;set;} // 外部キー
  public A(){ ListB = new List<B>();}
}

public class B {
  public int Id {get;set;}
  public List<A> ListA;
  public C ListC{get;set;} // 外部キー
  public B(){ ListA = new List<A>();}
}

int id = 0;
C c = new C();
c.a.Add(new A{Id = ++id, ListC=c});
c.b.Add(new B{Id = ++id, ListC=c});

こんなんかな。。。何がしたいのかは想像できず^^;

961 名前:デフォルトの名無しさん [2016/07/30(土) 14:45:01.77 ID:kE9N+QT2.net]
www.atmarkit.co.jp/fdotnet/ef4basic/ef4codefirst02/ef4codefirst02_02.html
ここの話ですね。ただデータ追加などについて調べても出てこないという現状です

962 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:10:28.22 ID:cua4PELF.net]
>>945
そういうことなら
1.A、BのList(それぞれlistA、listB)をつくる
2.listA、listBのそれぞれにA、BのインスタンスをAdd
  (この段階でのA、BそれぞれのListB、ListAの要素は空)
3.listAの各AのListBにlistBからランダムに選んだBをAddして、
   同時に、選んだBのListAに追加先のAをAdd
…で、いいんじゃないかな?

963 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:20:04.96 ID:cua4PELF.net]
こんな感じ?
List<A> listA = new List<A>();
List<B> listB = new List<B>();

for (int i = 0; i < 30; i++) //とりあえずどっちも30
{
 listA.Add(new A { Id = i });
 listB.Add(new B { Id = i });
}

Random rnd = new Random();

foreach (A a in listA)
{
 foreach (B b in listB)
 {
  if (rnd.Next(2) == 1)
  {
   a.ListB.Add(b);
   b.ListA.Add(a);
  }
 }
}

964 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:21:01.60 ID:crIAC8Sk.net]
>>943
成る程、もともと凄くいい線いっていたと思うよ。敢えて日本語でやったので、元のa/b/cと対応させてみて欲しい。
味噌はthisじゃないかしら。

public class キー {
  public List<講師> 講師陣;
  public List<学生> 学生達;
  public void Add(講師 追加する講師, 学生 追加する学生) {
    追加する講師.外部キー = this;
    追加する講師.教えてる学生達.Add(追加する学生);
    講師陣.Add(追加する講師);
    
    追加する学生.外部キー = this;
    追加する学生.師事する講師達.Add(追加する講師);
    学生達.Add(追加する学生);
  }
  public キー(){ 講師陣 = new List<講師>(); 学生達 = new List<学生>();}
}

public class 講師 {
  public int Id {get;set;}
  public List<学生> 教えてる学生達;
  public キー 外部キー{get;set;}
  public 講師(){ 教えてる学生達 = new List<学生>();}
}

public class 学生 {
  public int Id {get;set;}
  public List<講師> 師事する講師達;
  public キー 外部キー{get;set;}
  public 学生(){ 師事する講師達 = new List<講師>();}
}

965 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:22:48.83 ID:crIAC8Sk.net]
>>948
int id = 0;
var 参照キー = new キー();
var 講師A = new 講師{ Id = ++id };
var 講師B = new 講師{ Id = ++id };
var 学生A = new 学生{ Id = ++id };
var 学生B = new 学生{ Id = ++id };
var 学生C = new 学生{ Id = ++id };

// 学生Aは講師Aの生徒、学生Bは講師Bの生徒、学生Cは講師Aと講師Bの生徒

参照キー.Add(講師A, 学生A);
参照キー.Add(講師B, 学生B);
参照キー.Add(講師A, 学生C);
参照キー.Add(講師B, 学生C);

966 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 15:50:04.23 ID:crIAC8Sk.net]
すまん。

外部キーが間違ってるね>俺
これ多分、学生/講師の、外部キーがまるっと要らない。
多対多の関係を付けるだけなんでしょ???

ideone.com/6VOBUg

967 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 16:26:38.39 ID:Nl6hflxM.net]
中間テーブルが自動作成とか、Entity Frameworkでコードファーストの話か?

968 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 16:56:54.46 ID:zScUrdBS.net]
>>946
やはりそうなりますよね
それしか思い付かず…しかもこれ永遠ループするんじゃないかなと思ってます
リストAの中のBの中のAの中の…と

>>947
ネクストって知らない関数なので家についてから見させていただきます
ありがとうございます

>>948
>>950
すごく長いコードありがとうございます
上と同じく家についてから見させていただきます
thisの関係など詳しく見る必要がありそうです

そちらのコードで言うキーを外部キーにしているところは、
最後に使う予定があるので残しておこうかと考えてます
今回困っているところは言われている通りリレーションなどです

>>951
まさにそれです
自動作成される中間テーブルがあるのですが
そこに要素が入らなくて何故かなと…



969 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 19:53:40.78 ID:qHhyCsUA.net]
>>952
合ってるか分からないけど、Listじゃなくて、ICollection型のvirtualなプロパティ書かないといけないんじゃない?

970 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 20:28:38.81 ID:Nl6hflxM.net]
>>952
その場合は、クラスAの定義にBの外部キーとなるための項目(BId)が必要なはず
クラスBにもAへの外部キー(AId)が必要

971 名前:953 mailto:sage [2016/07/30(土) 22:10:21.29 ID:Nl6hflxM.net]
n:nのリレーションだったな
>>954はとりあえず忘れて
軽く試してみたけど、EF6.1.3だとちゃんと中間テーブル作成されて値も入る
(IDがオートナンバーになったから、指定した値ではないが)

DbContextの定義とデータ追加してるコードどっかに晒してみたら?

972 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 23:10:44.57 ID:flo7DdHH.net]
.net 4.0 4.5 4.5.1は既にサポート終了してたんだな。2.0はシェアの多さからまだサポート続いてるな。

973 名前:デフォルトの名無しさん mailto:sage [2016/07/30(土) 23:18:52.42 ID:3zYE6jXl.net]
>>956
4.5ならともかくうちの会社は4.0のアプリが多いから互換チェックが大変だわ

974 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:28:55.80 ID:fxXPyGX0.net]
C#って配列を初期化しないとエラーがでるけど、これって初期化してからじゃないと
配列の実態を生成できないからでしょうか?C言語だとint a[100];の時点で作られるから
エラーがでないと思ってますけどそういうことでしょうか?

975 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:49:03.77 ID:DiaxdW8Z.net]
>>958
値型の配列を参照型の配列の違い
C#でも
fixed char name[30];
を使えば値型配列を作れる(ただしC等とのDLL連携用に作られたものなので普通はしない)
{"a","b","c"}を例にすると画像みたいになる
sssp://o.8ch.net/ewpj.png

976 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:49:48.65 ID:VGHB1MRw.net]
初期化という言葉はC#では意味が曖昧になる状況が多いから、正しく理解するまでは使わないほうがいい
C#で配列を作るとき
int[] a = new int[100];
1-1. int[]型のローカル変数aを確保する。
1-2. int[]型で100要素をもつ配列オブジェクトを生成する。このとき要素の値はすべて既定値(0)で自動的に”初期化”される。
1-3. 1-2.で作ったオブジェクトの参照をaへ代入する。
Cならこうだ
int a[100] = {0};
2-1. int[100] 型のローカル変数を確保する。この時点で100要素分確保されている。
2-2. aの全要素を0で”初期化”する。

で、>>958が初期化と呼んでいるのは(1-2.+1-3.)と2-2のことだろう。
これを理解してれば何も不思議はないはず。

977 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 09:52:22.29 ID:DiaxdW8Z.net]
ちなみに文字列型は参照型だから上みたいになるけど、値型ならこうなる
ここでは例として{1,2,3}を使う
sssp://o.8ch.net/ewpn.png

978 名前:デフォルトの名無しさん [2016/07/31(日) 10:22:20.63 ID:fxXPyGX0.net]
>>959
Cの場合スタックとヒープで容量いっしょ?www
C#との違いに驚いた



979 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:30:11.19 ID:JeOzAbnd.net]
sssp見えない

980 名前:デフォルトの名無しさん mailto:sage [2016/07/31(日) 10:32:05.95 ID:DiaxdW8Z.net]
スタックは仕組み上固定長じゃないと駄目な訳
構造体が継承できないのもそこら辺の問題

もし値型が継承しちゃったら固定長じゃなくなるよね?






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

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

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