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


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

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



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

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

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

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

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

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

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

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

802 名前:9le.net/entry/2012/12/26/125214

4.0でも使えないわけじゃない
[]
[ここ壊れてます]

803 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 21:50:19.26 ID:WHtd9CIG.net]
>>768さん
private delegate void デリゲート(int n);
private void 進行表示なのよさ(int n)
{
進行Label.Text=n.ToString()));//
}

デリゲート デリゲート進行なのよメソッド= new デリゲート(進行表示なのよさ);
this.BeginInvoke(デリゲート進行なのよメソッド, new object[] { j });
と渡しましたけど無事に死亡確認しました。orz
変らず・・・・

なんか5万でやったら処理が間に合わないのかデッドロック


>>776さん

あっライブラリーを別にインストールしてやる感じですか。
ありがとうございます。 

804 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 21:56:43.98 ID:qRfCc0Iv.net]
なんでわざわざdelegate宣言してんの?
特別、ref とか outを使いたいとかじゃない限り、Action<T>、Func<T> を使うべき。

805 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 22:05:31.10 ID:WHtd9CIG.net]
>>778さん

あっ宣言しなくても省略できるんですか・・
void Action<T>(T obj)・・これは知らなかったです・すいません。
Tにメソッドを入れて引数にT objを指定する感じですかな。
どうにも疎くて;;

806 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 22:11:25.68 ID:v46Ke5nq.net]
死ねアッチョンブリケ

807 名前:デフォルトの名無しさん mailto:sage [2015/11/13(金) 22:16:22.98 ID:qRfCc0Iv.net]
.NET 4.0ならBeginInvokeとかInvokeとか使わずTaskを使うといい。

Task.Factory.StartNew( () =>
{
    // 別スレッド
    Thread.Sleep( 3000 ); // 重い処理のつもり
    return 1000;
} ).ContinueWith( task =>
{
    // UIスレッド
    this.label.Text = task.Result.ToString();
} , TaskScheduler.FromCurrentSynchronizationContext() );

808 名前:デフォルトの名無しさん mailto:sage [2015/11/14(土) 00:12:23.08 ID:PWAfQw+v.net]
>>781
非UIスレッド側からUIスレッドにイベントを通知したい、なんてケースもあるので万能じゃないけどね。

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を使ったりする方法は知らないと思われる。






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

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

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