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/
809 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 00:28:17.73 ID:zC8KxVmn.net] >>782 そういうのは、Rx使ってる。
810 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 00:45:14.09 ID:JMgFPTs6.net] .NET MVCで画面作るときに viewに複雑のユーザー定義クラスを渡す時ってカスタムbinderつくるしかない?? 例えば検索フォームと一覧で構成される画面で 検索フォームmodelと一覧modelをバインディングするみたいな。
811 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 01:45:16.57 ID:J/xjBQ6p.net] 何をわけの分からんことを class 俺モデル { public 検索フォームmodel M1; public 一覧model M2; } これをモデルとして渡せばOK
812 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 02:49:03.10 ID:JMgFPTs6.net] >>785 view側で @TextBoxFor(m => m.M1.Unko) @TextBoxFor(m => m.M2.Chinko) みたいなのをformで送ったが、 ActionメソッドをIndex(俺モデル myModel) としても、値とってこれないんだよね
813 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 02:56:01.24 ID:T0Fy32Ow.net] >>781 の兄者・・ 駄目でした;; 既にtaskは使っていて var task1 = Task.Factory.StartNew(() => これの終了に別のタスクで繋いで終了表示をしてるんですが 781の兄者のやり方のとおりに子タスクを設定してみたんです。 したら親タスクのつなぎタスクに繋がらないときがあるみたいで;; なんで繋がなくなる時がある上に終了してるのに 終了ウィンドウがしばらくしないと出ないのか・・ きっと妖怪のせい・・
814 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 11:18:55.84 ID:10oOQI9U.net] まず日本語が、正しく以下略
815 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 13:23:53.12 ID:m53r0/yX.net] こういうのを見ているとTaskチェインよりもawaitの方がスマートだというのがはっきり分かるな
816 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 16:57:33.34 ID:g6rNXfjz.net] >>786 だけど getter setterつけたらいけたわ。
817 名前:デフォルトの名無しさん [2015/11/14(土) 18:56:20.98 ID:OxpghztZ.net] 今unityでゲームを作ってるんですがc#のクラスの配列について質問です こういうコードがあるとします public class Aa{ int i; string b; public Aa(int iH,string bH){ i=iH; b=bH; } } Aa [] aa=new Aa[]{ new Aa(10,"aaa"), new Aa(20,"bbb") }; これでコンパイルは通るのですがこの後半に書かれたクラスの配列の初期化が なんとも気持ち悪くて仕方がありません これから何百行もクラスの初期化のコードを書くつもりなのでnewとかAaとかが無意味に並んでる辺りが 非常に醜いと思います もっと初期化を簡略化する書き方はないでしょうか?
818 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:13:53.28 ID:nPG81Nq1.net] 設定ファイルを別に用意して for ループかなにかでインスタンス作るのはダメなん?
819 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:15:20.30 ID:Ldro2YxR.net] >>791 ファイルに出せ
820 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:16:41.03 ID:x0D1OM5m.net] >>791 それが無駄だと全然思わないんだけど、 static Aa[] ToAaArray(params string[] args){...} みたいなメソッドでも用意するとか。
821 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:21:51.68 ID:0hbObyK2.net] ゲーム作ってますと何百個のクラス作ってますがどうしたらいいでしょうか はワンセットになりつつある
822 名前:デフォルトの名無しさん [2015/11/14(土) 19:22:29.23 ID:OxpghztZ.net] >>792 >>793 ファイルに出すというのはテキストファイルを別に作って読み込むという方法でしょうか? それも考えたんですけどそれだとテキストファイルを作る時引数の入力補完が効かなくなって かえって間違えやすくなると思うんですけど >>794 入力補完を利かすため引数のデータをデータ型通りの形で並べたいんですけどどうしたらいいですかね
823 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:35:41.52 ID:zC8KxVmn.net] >>791 var aa = new [] { new Aa( 10 , "aaa" ) , new Aa( 20 , "bbb" ) };
824 名前:デフォルトの名無しさん [2015/11/14(土) 19:39:17.01 ID:OxpghztZ.net] >>797 外側減らしたって意味無いすよw 中が圧倒的に多いんだから
825 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 19:44:59.12 ID:zC8KxVmn.net] 外部にテキストファイル、例えばcsvなんかを用意して読み込むようにするか、 もしくは、partial class を作って別ファイルにメソッドを隔離しておくか。
826 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:08:15.99 ID:nPG81Nq1.net] >>796 入力補完? 入力候補が決まってるなら、EXCEL でも使ってセルの入力規則のリストでも利用すればすむ事じゃん。 こっちの方が列で管理出来るから引数の順番とか間違えなくて(その意味では)便利だろ。 別にお前に限ったことじゃないけど、条件の後出しはよせ。正直ムカつく。
827 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:10:22.93 ID:FGqqqIfB.net] >>798 テキストファイル読み込んで作るか、もしくはnewをいっぱい書くのが普通だと思うけど それでも無理やり減らそうと考えるならこれかな。 var aa = new List<Aa>(); var elements1 = new[] { 10, 20, 30 }; var elements2 = new[] { "aaa", "bbb", "ccc" }; for(int i = 0; i < elements1.Length; i++) { aa.Add(new Aa(elements1[i], elements2[i])); } これだとタプルを分解して書かないといけないから不満が残るけど (10, "aaa")のような形でインスタンスを作れない以上どうしようもない気がする。 最近C#触っていないからもっといい方法があるかもしれないが。
828 名前:デフォルトの名無しさん [2015/11/14(土) 20:18:02.62 ID:OxpghztZ.net] >>800 基本的にunityのmonodevelopで完結させたいんだよね monodevelopは使い方も知ってるし >>801 それだと例えば1番目なら1番目の項目の書いてる場所がバラバラになってしまって とても管理出来そうにない みなさんありがとうございました 自分が今まで致命的な勘違いをしてた訳じゃないとわかっただけでも収穫でした newとクラス名連打で作りたいと思います
829 名前:デフォルトの名無しさん [2015/11/14(土) 20:23:51.44 ID:vsCbl3R/.net] テキストファイル作る時の引数って意味がわからん。 オブジェクト作成時に値チェックかけて、 整合性が保証されてる状態で書き出せばいいだろ。
830 名前:デフォルトの名無しさん [2015/11/14(土) 20:27:37.98 ID:OxpghztZ.net] >>803 それだと実行させなきゃエラーを出せない unityのmonodevelopは初期化の時引数の型が間違ってたら書いたその場でインフォメーションしてくれる
831 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 20:57:41.24 ID:Qc99f8i6.net] >>804 単体テスト書けば良いんじゃないの。書いたその場で、とは行かないが。
832 名前:デフォルトの名無しさん [2015/11/14(土) 21:00:39.59 ID:vsCbl3R/.net] >>804 モデルのオブジェクト(メンバの型)を経由するのにどう引数間違える可能性あるんだよ?
833 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 00:43:58.51 ID:PNJd8cmY.net] >>791 var bullets=Enumerable.Range(0,100).Select(i=> new {Id=i,Num=10,Str="100" });
834 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:30:33.23 ID:8pwk8L+v.net] it.srad.jp/story/15/11/13/210208/ 混迷極まってるな、MS工作員にはモバイル用は別OSにするって発想はでないのかね? 別に、コアコードは変わる訳じゃなかろうに、上っ面の部分だけモバイル向きに作り替えて アップデートのタイミングをそれぞれに調整すれば良いだけ モバイルで流行らないのは、単にWindows8に商品力が無いだけだ デスクトップ向きはWindows7に戻しちまえばいいのに Windows10とか誰も欲しがらないだろ・・・
835 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 01:31:54.15 ID:PNJd8cmY.net] static void Main(string[] args){ //AaValues.txt //10,aaa //20,bbb AaFct(File.ReadLines("AaValues.txt").Select(l=>l.Split(',')));} private static void AaFct(IEnumerable<string[]> values){ using (var f = File.AppendText("Aa.cs")){ foreach (var v in values){ f.WriteLine($"new Aa({v[0]},\"{v[1]})\",");}}}
836 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 02:56:43.32 ID:m6nrC5L1.net] やっぱりLINQ最高
837 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 06:35:48.77 ID:Ro5/nML1.net] Formをある程度デザインし終わった時に、ウィンドウそのもののフォントをUIゴシックからメイリオに切り替えると サイズや配置が変わって一気に崩れるんだけどなんで? そもそも個別のコントロールにフォントを設定していたらウィンドウのフォントって触る必要がないもの? みなさんフォントは何使ってるんだろう モリサワとか入れてるんだろうか
838 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 07:24:16.58 ID:m7boHCrI.net] テキストの幅がちょっと変わっただけで崩れるようなデリケートなデザインを作らないのが基本 業務アプリとかでクソ細かい要求を受け入れなきゃいけないなら全部MS Pゴシック
839 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 07:33:24.90 ID:wjlQu+Ap.net] >>811 まずFontはアンビエントプロパティ。特に設定してない子コントロールは親のフォントを使う よってFormのフォント変えると、子コントロールのフォントも変わる。 さらにFormのAutoScaleModeはFontがデフォ。 フォントによってAutoScaleDimentionの値が変わる よって各コントロールの大きさが変わる。以上。 AutoScaleModeはDPIにしとこう
840 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 13:44:16.69 ID:Ro5/nML1.net] >>813 具体的なご指導に感謝いたします 独学でやってるとなかなかそうしたものまで及ば
841 名前:ネいので本とありがたい [] [ここ壊れてます]
842 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 14:45:22.59 ID:s1AdXoMj.net] dbプログラミングで検索するとentity framreorkと言うのが出て来るがこれは何よ?使わ無くてもいいのか?使うといいの?
843 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 14:54:00.71 ID:giTGvBPC.net] >>815 DBを扱うためのフレームワークの一つ。 何をどれぐらいの規模で作りたいかによる。 小規模なのは、適当なDBで十分、FEは、機能が多すぎてちょっとしたものに適応するには重すぎるだろう。 サーバーを必要としないようなクライアントアプリならSQLiteあたり使っておけばいい。 ORMがやりたいならDapperあたり使えばいい。
844 名前:デフォルトの名無しさん [2015/11/15(日) 15:00:11.33 ID:19LeITHM.net] 質問です enum Syurui{ a,b,c } string moji=“a”; Syurui syurui=/この部分 この部分と書いたところに変数mojiの中身を列挙型のSyurui.aに変換して syuruiに入れる処理はどう書いたらいいでしょうか?
845 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:04:30.20 ID:giTGvBPC.net] >>817 Syurui hoge = (Syurui)Enum.Parse( typeof( Syurui ) , moji ); もしくは、 Syurui hoge; Enum.TryParse<Syurui>( moji , out hoge );
846 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:04:59.41 ID:s1AdXoMj.net] >>816 詳しい説明有難うございました。 windows vpsサーバーにmysqlいれていてdbプログラミングの勉強中です。月間ページビュー1000万くらいの規模のdbアプリを目指したいです。そういう場合はEFが良いですか?
847 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:05:44.14 ID:XKYu6RGQ.net] Enum.Parseを使う
848 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:06:56.73 ID:giTGvBPC.net] >>819 その規模になると、SQLiteとかじゃ耐えれないだろうから、EF使うと良いと思う。
849 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:11:31.11 ID:s1AdXoMj.net] >>821 有難うございました。 早速やってみます。1000万pv達成出来たら報告します。
850 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 15:12:13.39 ID:SModPTsN.net] >>819 アクセス数よりDBの構造の規模で。 どの程度学習してるか、これから学習するのかわからないけど とりあえず簡単なものを両方のやり方で試してみるのがいいと思うよ。
851 名前:デフォルトの名無しさん [2015/11/15(日) 15:26:03.20 ID:19LeITHM.net] >>818 できました〜 ありがとうございます ちゃんと列挙型の変数に格納されて違う値入れたらエラーも出ました
852 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 16:06:04.89 ID:bBffLHE3.net] Dapper使うとして、SQL文字列を組み立てるじゃん。 stringbuilderで組み立てていったとき、 なんちゃらフラグのときは〜みたいな条件がたくさんあると if,elseとかのネストがきったなくなるんだけど、どうしたらいいんだろ?
853 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 16:38:51.59 ID:kqjPbh/t.net] SQLをシンプルにして、LINQでごにょごにょする。 かなり綺麗になる。でも、巨大なデータをメモリ上に置くことになるので これが最適かどうかはわからない。 どうしたらいいんだろう…。
854 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 16:44:09.23 ID:hXzxGHNH.net] 遅延ローディングできないんですかね
855 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:06:33.10 ID:kqjPbh/t.net] ユーザー情報がID、名前、年齢、パスワード、メールアドレスで管理されているとする。 IDが4バイト、名前が255バイト、年齢1バイト、パスワード255バイト、メールアドレス255バイト だとすると、1レコードで770バイト。1万人を管理するとして、7,700,000バイトつまり7MB。 メモリ数が4GBだとすると、1/600くらいをメモリが占めることになる。思ったより巨大。 例えば年齢が25歳以下のユーザーだけを取り出したいとする。 そのために、.Where(u => u.age <= 25) というLINQ式を追加する。 7MBのデータを一つずつ見ていかなければならないとすると、一つのメソッドでどれくらいの時間がかかるだろうか?
856 名前:完全に適当だが、1レコードで100万分の1秒くらいと予想。 1万人で0.01秒。つまりメソッド一つで0.01秒しかかからない。 メモリもすぐに解放される。1/600と聞くと意外と大きな割合のように思えるが、存在しているのはほんの0.01秒である。 さて、メソッドが連なっている場合はどうなるか。 一つ目のメソッドでWbereメソッドを使っているとすると、二つ目以降のメソッドでは、処理対象のレコードが少なくなる。 それは例えば1万→5000といったように。 すると当然、処理時間も減少する。上の例では0.005秒と半分になる。 対象レコード数が1万程度なら何も問題はなさそうだ。 だから僕は、効率よりもソースコードの綺麗さを取ることにする。 これが100万行とかになると、1メソッドで1秒かかることになる。流石にそれはまずいので、 SQL分にWHERE句を追加して、RDBMSに条件の絞り込みの処理を任せる。 if,elseなどを使う必要がある場合はLINQを、最初から決まっている絞り込み条件の場合はそのままWHERE句を 使用する。そうすることにより、早さを維持しながらソースコードを綺麗にすることができる。 [] [ここ壊れてます]
857 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:24:45.76 ID:SModPTsN.net] まあif文とこ別関数にしてメソッドチェーンみたいにしてもいいしね DBは別のサーバにあることが多いから通信も考慮しないとね
858 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 17:25:22.41 ID:giTGvBPC.net] 100万件レコードがあったとして、何も100万件全部読み出す必要はないし、そんなことするなら設計を見直すべきだろう。 WHERE句とLIMIT句を指定してレコード数を制限して必要な分だけ読み込めばいい。
859 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 19:36:39.93 ID:CvRB/UR5.net] メソッドチェーンの使い所ってどんな時?
860 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 19:55:51.71 ID:5wcT3tcL.net] >>831 使いたい時に使えばいい LINQがいい例 >>819 本当にパフォーマンスが必要ならEFなんてやめとけ EFは文字列でSQLを作りたくない時に導入するもの
861 名前:デフォルトの名無しさん mailto:sage [2015/11/15(日) 20:12:14.42 ID:s1AdXoMj.net] >>832 そういう事ですか! 文字列で select 文を書く普通のやり方で十分なのでef使うのは中止します。
862 名前:デフォルトの名無しさん [2015/11/16(月) 12:51:54.53 ID:Ffgt4uY8.net] 質問です 文字列を変数名として扱う方法はありませんでしょうか? 例 int a=0; string amoji=“a”; kansu(ref ここ); void kansu(ref int a){ Debug.Log(a); } 「ここ」と書いた場所にstring型の変数amojiの内容である”a”から変数aを用いる ためのコードの書き方はどうしたらいいでしょうか 変数のリストをテキストファイルで管理しようと思っているのでこういうのが 必要になりました
863 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 12:55:17.48 ID:AqzFwWr1.net] まっ、その気になればやってやれん事はないのだが、やめろ
864 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 12:58:11.19 ID:Eod8iMW6.net] >>834 これじゃダメ? int Kansu(string amoji){ return "a"→aの処理; } テキストファイルから読み込んで変数リストの管理を行うなら別のやり方になりそうだけど
865 名前:デフォルトの名無しさん [2015/11/16(月) 13:01:18.51 ID:Ffgt4uY8.net] >>836 その「"a"→aの処理」っていうのはどうやるんでしょうかね?
866 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 13:05:25.95 ID:mRFC3bAE.net] 何故そんなことをしたいのかわからないが… やめとけ。 ろくなことにならないからw
867 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 13:14:01.22 ID:6H4dK92G.net] >>834 javascriptなら出来るんじゃないか?
868 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 13:29:25.05 ID:RuGtzWomJ] mapを使えばできる
869 名前:デフォルトの名無しさん [2015/11/16(月) 13:16:03.85 ID:Ffgt4uY8.net] >>838 そんなダメですかw 誰もやってない方法ならやめときます >>839 c#では一般的なやり方じゃないようですね 別の方法を考えます
870 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 13:35:59.43 ID:htc6fDTL.net] C#関係なしに一般的ではないと
871 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 13:36:29.71 ID:vMsjPxDw.net] ev
872 名前:alが使いたいという話でもないのか [] [ここ壊れてます]
873 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 13:50:11.34 ID:p+PVyYp5.net] ダーティーハックが尊ばれる下痢便言語ではよくある手だろ
874 名前:デフォルトの名無しさん [2015/11/16(月) 14:39:35.24 ID:Ffgt4uY8.net] じゃあこういうのはどうですか? public delegate void Aa(); Aa a; string kansuu=“Bb”; public void Bb(){ Debug.Log(“Bb”); } a=//ここにaに文字列kansuuの中身の”Bb”を関数Bbに変換するコードを入れる a();//ここでBb()を呼び出す
875 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 14:49:16.58 ID:mRFC3bAE.net] やろうとしていることが根本的にズレているんだよ
876 名前:デフォルトの名無しさん [2015/11/16(月) 14:52:29.58 ID:Ffgt4uY8.net] >>846 要するに文字列から関数や変数にアクセスしたいって事なんですけど そんなにおかしいですか 文字列から直接アクセスできないとなれば変数や関数を列挙型でリストアップして 使うときはswitch文で分岐なんていう情けないコードにしかならないと思うのですが
877 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 15:01:52.67 ID:mRFC3bAE.net] private readonly Dictionary<string,Func<object>> values = new Dictionary<string,Func<object>>(); Hoge(){ string x = 100; this.values[nameof(x)] = () = x; int ans = this.GetValue<int>( nameof( x ) ) * 2; Console.WriteLine( ans ); } T GetValue<T>( string name ) => (T)this.values[name]?.Invoke(); みたいなことをやれば辛うじてできなくはないが、保守性も効率も最悪なので普通はやらない。
878 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 15:03:36.05 ID:vMsjPxDw.net] Dictionary に入れといて呼ぶとかでいいじゃん、、 まあReflection使えばできる public static void Bb() { Debug.WriteLine("Bb"); } void test() { Type thisType = GetType(); string kansuu = "Bb"; MethodInfo mi = thisType.GetMethod(kansuu); mi.Invoke(null, null); } とか、、、delegateでもいけるかな
879 名前:デフォルトの名無しさん [2015/11/16(月) 15:13:31.76 ID:Ffgt4uY8.net] >>848 >>849 Invokeというメソッドを今初めて知ってよくわからないんですけど どうもかなり遅いらしいですね ゲームを作っているのでそれでは都合が悪いです やっぱりずらずらとリストアップする方法でやりたいと思います ありがとうございました
880 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 15:14:46.20 ID:Eod8iMW6.net] これID:OxpghztZだろw
881 名前:デフォルトの名無しさん [2015/11/16(月) 15:21:13.63 ID:Ffgt4uY8.net] >>851 バレちゃったw 結局テキストファイルを読み込んでやる事にしたんです それでテキストファイルに変数名や関数名を書きたいなぁと思って質問しました
882 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 15:39:44.62 ID:mRFC3bAE.net] ActionとかFuncのInvoke自体は、普通のデリゲートコールなので遅くない。 Action a => () => { } ; a(); と a.Invoke() は、同じことをやっている。 null伝播使うとき、 ?.() という書き方ができないので、?.Invoke() にしてあるだけだ。 もちろん、普通のメソッドに比べれば、インライン化されないなどの僅かな差はあるだろうが、気にするほどではない。 遅いのは、>>849 がやってるようなリフレクションだ。 こいつは、桁違いで遅い。ExpressionTreeで実行時にデリゲートを構築してやれば、速度の問題はある程度解消できるだろう。 あとは細かいところで変数のキャプチャ、ボックス化が生じてパフォーマンス低下につながることになる。
883 名前:デフォルトの名無しさん [2015/11/16(月) 15:46:42.66 ID:Ffgt4uY8.net] >>853 正直初心者なのでその区別もつかないです dictionaryとかならわかる範囲なのでそれでも使おうかなと思ってます 多少コードが冗
884 名前:長になっても [] [ここ壊れてます]
885 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 16:12:09.04 ID:4iBaA+8B.net] 関数と文字列が予め決まっているなら、switch文で分岐して関数呼ぶのが早いだろうが
886 名前:デフォルトの名無しさん [2015/11/16(月) 16:42:18.72 ID:Ffgt4uY8.net] >>855 やっぱりそれが一般的なんですかね 別のゲームにも再利用しやすい仕組みにできないかなと色気を出してしまったのも 今回こういう質問をした理由なんですけども
887 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 16:46:44.96 ID:mRFC3bAE.net] よくわかっていないうちは、今後再利用しようなんてやめとけ。。 再利用しようとしたときには、(誰だ、この糞設計したのは!糞コード書いたやつ死ねよ?…自分か…)ってなってゴミと化すだけだから。
888 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 18:04:07.44 ID:/wMXw7Lm.net] 型が決まってて値取り出したいだけならシリアライズで十分とも思うけども。
889 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 18:40:32.23 ID:LDaVIeza.net] >>858 「変数のリストをテキストファイルで管理しようと思っている」って>>834 で書いてるから、変数の値は保存してないんじゃねえの? 全く意味不明だけど
890 名前:デフォルトの名無しさん [2015/11/16(月) 19:19:50.00 ID:Ffgt4uY8.net] >>858 シリアライズとはどういう機能なんでしょうか? ググってもイマイチわからなかったのでこの件とどういう関係があるのか教えてもらえませんでしょうか
891 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 19:19:59.69 ID:/wMXw7Lm.net] >>859 あ、そうか、外してたな
892 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 19:37:02.75 ID:mRFC3bAE.net] シリアライズというか、設定値なりパラメータをソースコードじゃなく外部で管理したいだけなら、XMLとかJSONとかで読み込めば良いだけだろう。
893 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 19:38:00.43 ID:diuJbJ+U.net] >>860 シリアライズはオブジェクトを通信で送るのに使う ローカルファイルへの保存に使うのはドツボにはまるのでやってはいけない XmlSerializerみたいなスキーマありきの奴ならいいけどね
894 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 19:42:53.32 ID:mRFC3bAE.net] >>863 設定データの保存用にBinaryFormatter使ってたら、古いデータとの互換性取れなくなってドツボにはまったことあるわ。
895 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 20:34:38.26 ID:HIZPDz5u.net] クソみたいなゲーム作ってないで宿題やってクソして寝ろ
896 名前:デフォルトの名無しさん [2015/11/16(月) 20:45:10.02 ID:Ffgt4uY8.net] >>865 うるせーなw 大きなお世話だw
897 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:21:51.30 ID:bfEVOxks.net] >>ID:Ffgt4uY8 こういう人って必要な分だけネットで覚えたから知識に穴だらけ 基礎もままならない状態だから、ある目的のためにダメな手段を 思いつきでやろうとするから>>834 のようなことになる newを100回書こうとしたりね 目的を自分の中で明確にして質問すればいいのにな ここにいる人も気づいているのに からかい半分に間違った手段のために律儀に答えようとしてるし みんなもわかっているんだろ、本当に彼がしたいことを 焦る気持ちはわかるけど、まずは基礎だよ 基礎がしっかりしてないと、コピパーになるよ
898 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:27:42.07 ID:LDaVIeza.net] 変数のリストをテキストファイルで管理ってのが理解不能すぎて解決策が出せないんだよな 変数名しか管理しないんならソースコードに直接書けばいいとしか思えないんだけど、多分深い理由があるんだろうからテキストファイルから変数を取得する方法を教えるしかない
899 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:41:27.09 ID:p+PVyYp5.net] 別に間違ってる奴は間違ってるまま突っ走ってくれて構わんだろ 垂れ流しのウンコを擦り付けてくるなよってだけ
900 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:43:40.13 ID:p+PVyYp5.net] DSLを設計するのが好きな奴と関わりあいになりたくない
901 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:48:59.73 ID:Eod8iMW6.net] 皆律儀に構ってやるから居ついちゃうんだよな
902 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 22:50:19.96 ID:mRFC3bAE.net] たぶん設計とか何も考えてないと思う… おそらく、変数というものを最近知ったんだろう。 だが、クラスを自分で定義したり、Dictionaryを使ったりする方法は知らないと思われる。
903 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 23:01:20.17 ID:AqzFwWr1.net] どうしても必要不可欠になったとか これができなきゃプロジェクト崩壊、ヤバイ死ぬとか そういう話なら、答えてやらんでもないがね >文字列を変数名 最初から使用を前提にするとか有り得ない
904 名前:デフォルトの名無しさん [2015/11/16(月) 23:41:45.35 ID:Ffgt4uY8.net] ボロクソ言ってくれるよなぁw 俺のやりたい事はアドベンチャーゲームに近いんだけどゲームを「シナリオ単位」 に分けてそのシナリオを遷移させる事で ゲームを進めるという仕組みにしたかったんだよ で、最初はシナリオクラスをたくさんnewして並べようと思ったんだけどそれはやめて テキストファイルから読み込んでやる事にした それでそのシナリオの中には○○関数を呼び出したいとか○○変数を使いたいみたいなのも 含まれる それでテキストファイルの中にaaaaと書いてあって それを読みだしてaaaa変数が使えたら便利なんじゃないか? というのが今回の質問の趣旨
905 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 23:46:31.65 ID:diuJbJ+U.net] 「シナリオプレイヤーを作る」と割り切って考えてシナリオとプレイヤーの仕様を明確にすれば、 変数を文字列で選ぶようなメタな仕組みは必要ないと分かるはず 初心者はそこをごっちゃにするからおかしくなる
906 名前:デフォルトの名無しさん mailto:sage [2015/11/16(月) 23:59:23.74 ID:bfEVOxks.net] >>874 わかるよーADV用のスクリプト言語開発したいんでしょ 吉里吉里みたいなもんでしょ UnityだとJokerScriptというのがあるみたいだね 自作のゲーム用フレームワークを作って開発効率あげようってことでしょ ゲーム制作は専門外なのでぼくは答えられませんけど がんばってね!
907 名前:デフォルトの名無しさん [2015/11/17(火) 00:06:19.08 ID:R+1w9ien.net] >>875 設計がおかしいというのは薄々わかってました 今回おかしいと言われてようやく明確な自覚を持てました それがわかっただけで有意義な質問だったと思います ありがとうございました >>876 そういう事なんですよ スクリプトというほど高等な物じゃなくて簡易的なものなんですけど
908 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 00:10:46.96 ID:0HyN1ztj.net] はじめからどういう目的があるのかを質問に含めないから厄介なことになるんだ。 BASICみたいな感じで簡易スクリプト言語を組んでしまえばいい。 MSG 何かのメッセージ MSGEND SET A=100 GET B,A みたいなやつを決めて、C#側での変数管理は、Dictionary<string,object> values;のようなディクショナリでまとめておいて、 SET命令が出てきたら、values["A"] = 100。 GET B,Aなら、values["B"] = values["A"] って感じで実行するように組んでおけばいい。
909 名前:デフォルトの名無しさん mailto:sage [2015/11/17(火) 00:16:26.67 ID:WTj4x1Uo.net] >>877 アスペなのかもしれないから教えておくけど、875はそういうスクリプトを使えってことを嫌味を込めて言ってるんだと思うぞ 車輪の再発明は無駄だからな