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] スタックは仕組み上固定長じゃないと駄目な訳 構造体が継承できないのもそこら辺の問題 もし値型が継承しちゃったら固定長じゃなくなるよね?