C#, C♯, C#相談室 Part86 [転載禁止]©2ch.net

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
■Visual Studio 2013 Express(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part85
http://peace.2ch.net/test/read.cgi/tech/1412298752/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
2デフォルトの名無しさん:2014/12/27(土) 14:06:36.30 ID:Cc0RXd7d
一乙
3デフォルトの名無しさん:2014/12/27(土) 15:54:09.50 ID:tQpEEr8J
>>1
4デフォルトの名無しさん:2014/12/27(土) 18:35:29.91 ID:GhEDQNHO
うんこみたいなC
5デフォルトの名無しさん:2014/12/27(土) 19:22:08.64 ID:Iiyigm9/
>>4
DQN
6デフォルトの名無しさん:2014/12/28(日) 21:59:57.74 ID:/g9XUAft
引数の型・関数がまったく同じで、中身が違うクラスがあるのですが、
まとめて扱うことは可能でしょうか。

たしか、<T> ってのが、
ネットのサンプルにあったのですが、
使い方がよくわかりません。

addcomponent<ClassA>().init(int,float,"String");
addcomponent<ClassB>().init(int,float,"String");
  ↓
addcomponent<T>().init(int,float,"String");

こんな感じにまとめたいです。
7デフォルトの名無しさん:2014/12/28(日) 22:03:54.64 ID:3UhPoklt
>>6
違う処理だけabstractメソッドにしてClassA, ClassBそれぞれで別の実装を割り当てればまとまるかもね
8デフォルトの名無しさん:2014/12/28(日) 22:06:04.30 ID:hI2mx2NI
>>6かinterfaceを付けてwhere T:Hogeで制約を指定すればいいと思うけど何がやりたいのかいまいち分からん
9デフォルトの名無しさん:2014/12/28(日) 22:06:44.69 ID:hI2mx2NI
おっと>>6じゃなくて抽象クラスね
10デフォルトの名無しさん:2014/12/28(日) 22:09:22.41 ID:PN+Ts2DK
>>6
意味がわからないから何がしたいのか目的を教えて
クラスとか引数とか関数とか一般的な表現じゃなくて、
何を作ろうとしててどういうことをしててどこで詰まってるのか
11デフォルトの名無しさん:2014/12/28(日) 22:10:21.56 ID:3UhPoklt
見た感じで言うと

ClassA ClassB が BaseClass から派生していて

AddComponent(BaseClass component) こんなのがひとつあれば十分そうな見た目だけどね

使うときは

AddComponent(new ClassA(1, 1F, "String"))

って感じで
12デフォルトの名無しさん:2014/12/28(日) 22:15:04.90 ID:hI2mx2NI
元はT AddComponent<T>() where T:new()なのか?
でもnew()制約知ってて型制約知らないってことはないよな
13デフォルトの名無しさん:2014/12/28(日) 22:29:36.54 ID:eacLnmbF
プロパティでIEnumerable<継承クラス>を取得して、
それをIEnumerable<基底クラス>を引数に取る関数に渡したいのですが、うまくいきません。
以下のようなコードを書いたのですが、間違っているのでしょうか?

public static void test(Base obj)
public static void test2(IEnumerable<Base> obj)

test(new Inheritance()); //OK
test(new Inheritance[]{}); //OK

public class IEnumerableTest<T> where T : Base
public IEnumerable<T> Get{get { return _Targets; }}

test(new IEnumerableTest<Inheritance>.Get()) //NG
14デフォルトの名無しさん:2014/12/28(日) 22:34:12.29 ID:3UhPoklt
>>13
多分プロパティに()つけて呼び出してるのが間違ってるんじゃないの

public IEnumerable<T> Get(){ return _Targets; }

こうじゃダメなの
15デフォルトの名無しさん:2014/12/28(日) 22:40:27.16 ID:eacLnmbF
>>14
申し訳ない、プロパティを()で読んでるのは転記ミスでござる。
関数で受け取れば渡せるが、プロパティで受け取ると渡せない。
何が起こっているの??

test2(new IEnumerableTest<Inheritance>.Get) //NG
test2(new IEnumerableTest<Inheritance>.GetFunk()) //OK
16デフォルトの名無しさん:2014/12/28(日) 22:49:28.57 ID:eacLnmbF
すまん、やっぱどっちもNGだ
17デフォルトの名無しさん:2014/12/28(日) 22:57:31.63 ID:d8VFVXkn
お前は何を言っているんだ
18デフォルトの名無しさん:2014/12/28(日) 23:02:31.11 ID:m3FY95E3
一度深呼吸して
コード片じゃなくて完全なコードを>>1のideoneにコピペしてみて
19デフォルトの名無しさん:2014/12/28(日) 23:08:30.43 ID:eacLnmbF
つまりだ、
test(new Inheritance[] { }); //OK
test((IEnumerable<Inheritance>) new Inheritance[] { }); //NG

ってことなんだ。
俺は引数に何のインターフェースを使えばいいんだ?
20デフォルトの名無しさん:2014/12/28(日) 23:08:55.36 ID:eacLnmbF
>>18
少々お待ちください。
21デフォルトの名無しさん:2014/12/28(日) 23:22:05.58 ID:eacLnmbF
http://ideone.com/Mkn9IN

ビルドターゲット4.5だといけたけど、
3.5だとダメだった。そーいうこと??
22デフォルトの名無しさん:2014/12/28(日) 23:26:25.33 ID:m3FY95E3
そういうことだな
ジェネリックの共変性と反変性 を調べてみて
23デフォルトの名無しさん:2014/12/29(月) 00:53:11.30 ID:GGNnGKbX
場所のキメ打ちではなくexeファイルと同じフォルダーに入っているtxtファイルを読むようにするにはどうすれば言いのですか?
24デフォルトの名無しさん:2014/12/29(月) 01:05:40.29 ID:aPtCKv3Y
25デフォルトの名無しさん:2014/12/29(月) 01:15:04.67 ID:GGNnGKbX
>>24
アリガd
26デフォルトの名無しさん:2014/12/29(月) 02:21:26.92 ID:7EAdwxrq
>>10
すみません…

Unity でシューティングゲームの敵データを、
CSV から読み込もうとしています。
Unity質問スレからこちらに誘導してもらいました。

CSV は1レコードの前半は共通仕様、
後半は読み込むデータ形式は同じですが、
後半データは敵の行動パターンごとに使い方が異なります。

体力や初期位置など共通して使うものは、
共通コンポーネントで持ちました。
差異が発生する後半部分(その敵固有の処理)は
同じデータ形式で取り込むのですが、
使い道や処理が違うので
取り込み先が違うコンポーネントになっている、という感じです。

コンポーネント名だけ書き換えて、
まったく同じ読み込みソースをコピペしてるのが、
スマートじゃないなと思いました。

void yomitori ( GameObject go, Type classType, 引数いっぱい ){
  go.getComponent<classType>().init(引数いっぱい);
}

こんな感じにクラス(コンポーネント)を指定できるようにして
まとめたいなと思いました。
27デフォルトの名無しさん:2014/12/29(月) 02:26:56.53 ID:7EAdwxrq
ジェネリックってやつをやればいいんでしょうか
28デフォルトの名無しさん:2014/12/29(月) 03:13:02.84 ID:lr1HMbxN
>>26
既に他の人が判りやすく説明しているけどに共通部分をまとめた基底クラスを作ってAとBがその基底クラスを継承する

コンポーネントを追加するときは作成したコンポーネントインスタンスをAddComponent()の引数として渡して
コンポーネントを取得するときはGetComponent<基底クラス>()とすればいい
29デフォルトの名無しさん:2014/12/29(月) 09:40:21.83 ID:7EAdwxrq
>>28
出来ました!
継承を実践で使ったことがなかったので
まったく考えてませんでした。
ありがとうございます!
30デフォルトの名無しさん:2014/12/29(月) 09:44:40.00 ID:tirsBVZi
>>26
この場合はテンプレートメソッドかな
abstract class GameObject {
int 共通情報;
public void Yomikomi(CSVの行データ) { 共通情報 = CSV前半; ActionPatternYomikomi(CSV後半); }
protected abstract void ActionPatternYomikomi(CSV後半);
}
class EnemyA : GameObject {
int 固有情報A;
protected override void ActionPatternYomikomi(CSV後半) { 固有情報A = CSV後半; }
}
class EnemyB : GameObject {
int 固有情報B;
protected override void ActionPatternYomikomi(CSV後半) { 固有情報B = CSV後半; }
}

GameObject a = new EnemyA(), b = new EnemyB();
a.Yomikomi(CSV1行目); b.Yomikomi(CSV2行目);
31デフォルトの名無しさん:2014/12/29(月) 14:46:23.53 ID:nnY+ZM/3
>>29
解決したコード書いて
32デフォルトの名無しさん:2014/12/30(火) 22:22:27.97 ID:WbPDupBZ
有限状態マシンを使っているときに特定の状態に変化したときに呼ばれたい関数をすっきりと書くにはどのように記述するのがベストでしょうか

 void OnStateEnter () {
 
 }

という関数を特定の状態の時に呼び出してほしい用に記述したい
Attributeか何かをうまく使って指示できませんかね

[StateIs(Running)]
 void OnStateEnter () {
 
 }

こんな感じで
33デフォルトの名無しさん:2014/12/30(火) 23:12:51.79 ID:dxBK7ujR
yield使う
普通にまっすぐ書いたコードからステートマシンを自動生成してくれる
34デフォルトの名無しさん:2014/12/30(火) 23:32:31.80 ID:dxBK7ujR
あとは、どこかにデリゲートとして次に呼び出してほしい関数を登録しておく方法がある
登録先によってStateパターンとか継続渡しとか呼ばれる方法だね
列挙体かなんかをキーにしてデリゲートをディクショナリに登録しとく手もあるけど、
単純に処理の振り分けに使いたいだけなら冗長
35デフォルトの名無しさん:2014/12/30(火) 23:51:20.16 ID:ZXsgTzJD
これをLinqに直すとどこまでスマートになるのか教えてください

for (i = 0; i < 100; i++){
list.Add(i);
}
36デフォルトの名無しさん:2014/12/31(水) 00:05:13.74 ID:UsUXYvH4
>>35
list = Enumerable.Range(0,100).ToList();
37デフォルトの名無しさん:2014/12/31(水) 01:34:01.19 ID:hZ6ACt+c
>>36
ありがとうございます。天才ですね
38デフォルトの名無しさん:2014/12/31(水) 01:37:47.29 ID:hZ6ACt+c
>>37
すみません、これだと型がintになっちゃいますよね。
iがなんかのクラスの場合はどうやるのですか?
39デフォルトの名無しさん:2014/12/31(水) 02:59:13.00 ID:0KovdbRl
Range(0, 100).Select(i => new Hoge(i)).ToList();
40デフォルトの名無しさん:2015/01/01(木) 11:23:54.13 ID:vAAHlH5Q
partial enumを何とか実現できないでしょうか
enumの定義そのものはクラスライブラリ側で行って、
中身だけアプリケーション側で定義したい
文法的には不可能ですが似たような機能を実装できないでしょうか
41デフォルトの名無しさん:2015/01/01(木) 11:25:47.35 ID:iDo75q0v
何がしたいのか全く分からん
42デフォルトの名無しさん:2015/01/01(木) 11:28:34.71 ID:dlaa3g2E
ライブラリ側
public struct Color : IEquatable<Color> { public Color(int value) { this.value = value; } /* valueを比較するEqualsを実装 */ }

アプリケーション側
static class Colors { public static readonly Color Blue = new Color(0x00FF00); }
43デフォルトの名無しさん:2015/01/01(木) 11:32:29.49 ID:aZRx2Zh3
IDE上の話ならTypeConverter.GetStandardValuesとか
44デフォルトの名無しさん:2015/01/01(木) 11:37:16.67 ID:2oZHmgl+
そもそもEnumって定義側で値を制限するための機能だろ
無制限に外部で作らせてどうする
45 【大吉】 【748円】 :2015/01/01(木) 11:43:03.89 ID:g7S+XSL4
複数のpartialブロックを作った場合、
数値の割り当てどうするという問題が
4640:2015/01/01(木) 11:50:50.94 ID:vAAHlH5Q
有限状態マシンを提供したいんですよ
Appelaration<State, Trigger> fsm;
みたいな。
どういうステートがあるかはアプリケーション側で定義するので
partial enumがどうしても必要なのですがいいアイディアが思いつきません
47デフォルトの名無しさん:2015/01/01(木) 11:54:38.11 ID:2oZHmgl+
Enumは拡張を意図してないんだから
拡張を意図した構成要素を使えばいいだけだろが
そう、クラスだ
あほなことを止めろ
48 【大凶】 【1104円】 :2015/01/01(木) 11:57:00.72 ID:g7S+XSL4
有限状態マシンってよく知らんけど、
Stateパターンじゃダメなん?
これなら、状態の基底クラス作っとけばユーザー側で継承して
任意に状態クラス作ればいいし
49デフォルトの名無しさん:2015/01/01(木) 11:59:42.03 ID:JpKW+t0f
stateを列挙体=定数でしか定義できないって不自由じゃん
あとpartial class自体アセンブリを超えて分割できる物じゃないぞ
50デフォルトの名無しさん:2015/01/01(木) 12:01:02.14 ID:aZRx2Zh3
とりあえずWFでも研究したら
51デフォルトの名無しさん:2015/01/01(木) 13:47:07.08 ID:iDo75q0v
状態を増やしていくっていうのはもうスクリプティングの段階に入ってるから
そこでクラスを一つ一つ継承するっていうのは記述に対して実入りが少なすぎる
52デフォルトの名無しさん:2015/01/01(木) 14:24:36.87 ID:iDo75q0v
D(S.Initial, T('a',S.a), T('b',S.b));
D(S.a, T('b',S.ab), T('c', S.ac));
...

まあこんな感じで書ける程度の記述合理性は欲しいよね
DはDefine SはState(enum) TはTriggerの略で
StateがそれぞれDefineされてるかどうかの整合性チェックも一応リフレクション使って実装しときたいな
53デフォルトの名無しさん:2015/01/01(木) 14:34:57.74 ID:iDo75q0v
Stateのenumはデフォルトのただの連番っていう約束を決めておけば
ライブラリ側はenumの具体的な値であるintに対して処理すれば
全てのenumに対して使えるからそれでいいんじゃないかと思った
54デフォルトの名無しさん:2015/01/01(木) 19:33:21.08 ID:dlaa3g2E
文字列でいいよそんなもん
55デフォルトの名無しさん:2015/01/01(木) 19:37:46.81 ID:iDo75q0v
せっかくC#使ってインテリセンスのサジェストを受けられるのに
文字列とか無いわw
56デフォルトの名無しさん:2015/01/01(木) 19:40:12.35 ID:aZRx2Zh3
String型だとseが効かないって誰が決めたんだよ
57デフォルトの名無しさん:2015/01/01(木) 19:41:24.67 ID:aZRx2Zh3
なぜSE…
上で書いた通り方に関係なくTypeConverterを使えばIntelliSenseは効く
58デフォルトの名無しさん:2015/01/01(木) 19:48:03.68 ID:dlaa3g2E
列挙体にしたところで結局実際の値はアプリケーションが勝手に決めるんだから
インテリセンスは自動的には効かないだろ
どっちにしろ定数クラスに纏めるなら値が数値だろうが文字列だろうが使い勝手は一緒
でも拡張性を持たせるなら文字列の方が管理は容易だ
59デフォルトの名無しさん:2015/01/01(木) 20:19:41.93 ID:iDo75q0v
>>57
俺はenumの代わりにダブルクオートでくくって文字列直打ちするっていう話だと思ったけど

D("Initial", T('a',"a"), T('b',"b"));

これがTypeConverterを使うとどうにかなってインテリセンスが効くようになるの?

>>58
public const string Initial = "Initial";

こんなふうにやってくって話? 

これを書くのがまず面倒だし
定義箇所が複数に分かれたら同じ文字列が出てきちゃう場合が考えられるから拡張性も高いとは思えないな
俺だったら複数に分けるほど大きくなる場合は
namespace N1{
enum S{ A, B, C }

class Script : ScriptBase{
 void D(S s, params T[] triggers){
  StateMacine.Instance.Set(typeof(S), s, triggers);
 }

 public static void Initialize(){
  D(S.A, T('b', S.B), T('c', S.C), T('d', N2.S.D));
 }
}

こんな感じでenumの型情報と一緒に登録して型ごとに分かれるようにして
ある型のenumが初回出現した時に対応するScriptクラスをnewして登録するようにすることで
初期化の負荷も分散できるようにするかな
60デフォルトの名無しさん:2015/01/01(木) 20:23:00.17 ID:iDo75q0v
なんか間違いまくってるな
namespace N1{
enum S{ A, B, C }

class Script : ScriptBase{
 static void D(S s, params T[] triggers){
  StateMacine.Instance.Set(typeof(S), s, triggers);
 }

 public static void Initialize(){
  D(S.A, T('b', S.B), T('c', S.C), T('d', N2.S.D));
 }
}}

ある型のenumがTriggerで初回出現した時に
対応するScriptクラスのInitializeメソッドをリフレクションで呼び出して登録するようにすることで
初期化の負荷も分散できるようにする
だわ
61デフォルトの名無しさん:2015/01/01(木) 20:59:03.53 ID:dlaa3g2E
読みづらすぎ
命名についてはとやかく言うつもりはないが、
呼び出し先の処理と状態遷移の定義が分離されてていいんなら、もう状態遷移表を外部ファイルか配列で持つわ
コード中に書くんであれば、コードとそれに関連する設定はまとめた方が読みやすいし修正ミスが防げる
>>32みたいに属性使うとか規約ベースでメソッド名使って定義するとかね
62デフォルトの名無しさん:2015/01/01(木) 21:05:29.97 ID:iDo75q0v
そんなこと言ったって一つが膨大になる場合は幾つかに分けないとしょうがないだろう
そうでなければ一つにまとめりゃいいし
一つで済むならenum連番を拒む理由もないはず
enum連番なら配列に入れられるからパフォーマンスも良いし
63デフォルトの名無しさん:2015/01/01(木) 21:31:21.13 ID:dlaa3g2E
>>62
1つに纏めるっていうのは状態遷移表を一つに纏めるって意味じゃないぞ
[State(A), Trigger(B), Trigger(C)]
void OnA() { ... }
[State(B), Trigger(A)]
void OnB() { ... }
こんな風に処理と設定をセットにするってこと
設定は設定、処理は処理でまとめるよりもこのやり方の方が良いかどうかは場合によるが、言いたいのは
・設定は設定でまとめるんならコード中に中途半端に混ぜないで外部ファイルに出せ
・コード中に設定書くなら処理と纏めろ
ということ
64デフォルトの名無しさん:2015/01/01(木) 22:06:23.87 ID:MUP8EK3k
コンソールアプリケーションを他のアプリのデバッグ用に起動したいのですが、
方法がわかりません。

こんなのをイメージしているんですが。
var console = new DebugConsole(new MyScript());

本体のアプリを実行しながら、コンソールを起動して、
コンソールからの入力をMyScriptに渡して、
本体のアプリとやり取りした結果をコンソールに返したいのです。
65デフォルトの名無しさん:2015/01/01(木) 22:14:19.48 ID:aZRx2Zh3
Process.StandardOutputとかそのあたり
66デフォルトの名無しさん:2015/01/01(木) 22:20:27.58 ID:dlaa3g2E
他のコンソールアプリ(MyScript?)と本体アプリの間でやりとりをしたいってこと?
>>65の言うように標準入出力使うのが筋だけど結構面倒でまどろっこしいよ
やりとりの内容によるが、複雑な制御が必要ならIPC使ったほうがいいかも
67デフォルトの名無しさん:2015/01/01(木) 22:27:48.27 ID:MUP8EK3k
Process.StandardOutputですが、ちょっと調べてみます。

例えば、コンソールで
get "test" とかやると
本体アプリのdictionaryインスタンスからtestを取得して返すみたいなことをしたいんです。
68デフォルトの名無しさん:2015/01/01(木) 23:22:14.46 ID:dlaa3g2E
デバッガ使わないのは本体を止めたくないからだよな?
なら標準入出力使うよりIPCの方がいいよ
標準入出力だと本体側で入力待ちのための専用スレッドが必要になったりするし
全部文字列でやりとりしなきゃいけないからコマンドの解析などは全部本体側で実装することになってしまう

自分でスレッド立てるのも本体にデバッグ用の処理を全部書くのも嫌でないなら、
コンソールアプリ使うのはやめてAllocConsoleで本体側から直接コンソールを表示することもできる
これならプロセス間のやりとりはいらない
69デフォルトの名無しさん:2015/01/01(木) 23:41:37.70 ID:MUP8EK3k
はい、本体は止めたくないです。

本体プログラムの内部でluaインタプリタが動いていて、
デバッグのコンソールからもそのインタプリタに入力を送れるようにしたいです。

IPCについても調べてみます!
70デフォルトの名無しさん:2015/01/02(金) 11:37:09.11 ID:+yHd1Kpb
>>63
別に設定だけでもC#で書けばインテリセンスの加護は受けられるし可読性も高くできる
外部に書き出すメリットはないよ

処理と設定を一緒にする場合もクラスと属性なんて言う冗長性の高いものじゃなくて
enumとラムダ式にした方がずっと可読性が高く書きやすく出来る

スクリプティングの段階に入ってもC#から離れなければメリットは大きいよ
71デフォルトの名無しさん:2015/01/02(金) 11:41:48.09 ID:UoXQYS7H
設定を外部に書き出すメリットはないって、世の中の99.99%のアプリを敵に回したな
72デフォルトの名無しさん:2015/01/02(金) 11:51:03.67 ID:+yHd1Kpb
設定ファイルにしたって型安全で表現力が高く文法的に一貫している方がメリットは大きいやろ
静的言語をスクリプティングに適用するノウハウが浸透していないだけだと思う

まあユーザーがいじることを想定した設定なら外部に書き出すこともあるだろうけど
そんなこと出来ても喜ぶのは変態だけで普通はOption画面からGUIで設定するわけだしな
73デフォルトの名無しさん:2015/01/02(金) 12:34:57.51 ID:MtiBaX+Y
設定を外部に持たずにどうやって保持するんだろ?
74デフォルトの名無しさん:2015/01/02(金) 12:37:56.70 ID:3oVUtplv
スクリプトもC#で記述はありだな
75デフォルトの名無しさん:2015/01/02(金) 12:40:50.06 ID:5Yq30nMG
元の質問からすると 63 で正しいと思うけど、遷移表って一か所で読みたくならない?
外だしにしといて悪くはないと思うよ。GUI 自動で作るとか
76デフォルトの名無しさん:2015/01/02(金) 12:46:10.56 ID:UoXQYS7H
>>63を実装するなら遷移表も自動生成すればいいじゃん
どうせリフレクションで情報収集するんだからついでに簡単にできるでしょ
77デフォルトの名無しさん:2015/01/02(金) 12:55:28.12 ID:5Yq30nMG
遷移表は作る前提でみんな話してると思うけど?
78デフォルトの名無しさん:2015/01/02(金) 13:00:33.89 ID:UoXQYS7H
遷移表は自動生成することにして、遷移表を編集する=>>63の属性を編集する
ということにすればいいだろう
表作るんなら>>63みたいなスタイルはミスを生みやすくなるだけだから外部ファイルでいいと思う
DRYだよ
7978:2015/01/02(金) 13:06:53.32 ID:UoXQYS7H
訂正
表作るんなら→手作業で表作るんなら
80デフォルトの名無しさん:2015/01/02(金) 13:10:06.15 ID:JU2xwz8d
状態管理は外に出せるけど、対応処理の管理は簡単に出来るの?
今、VS Express2013のC#で作っているけど
イベント登録の"+="の使い方が解らなくて、一つのクラスで作っている。

"using"の使い方次第なのかな?
81デフォルトの名無しさん:2015/01/02(金) 13:15:33.00 ID:+yHd1Kpb
自動生成ったってまずどこかに手で書かなきゃいけないんだから

可読性を上げるためにはひと目で見て把握できる範囲を広げるために冗長性を下げる必要があり
また冗長性が低くないと書いてて嫌になってしまうという問題もある

書いて読んで修正するっていう作業をスムーズにしてスクリプティングの効率を上げるには
属性やなんかで冗長に書いてからプログラムで表を自動生成するのではダメだよ
読んで即編集できるように冗長性の低いフォーマットで記述されている必要がある
C#ならインテリセンスの加護を受けて安全で速く書ける

>>73
編集可能にするにしてもデフォルト設定はどこかにガリガリ書かなきゃいけないわけで
人間が手で書ける形式の設定ファイルを外出ししてそれでデフォルト設定も書くか
デフォルト設定をC#で書いてGUIで編集することにして
人間が読み書きすることを想定しないファイルフォーマットで保存するかといった程度の違いの話だな
82デフォルトの名無しさん:2015/01/02(金) 14:19:29.57 ID:h8FNsbbo
まだやってる
馬鹿か
83デフォルトの名無しさん:2015/01/03(土) 13:04:04.79 ID:xZbaMjzc
struct(構造体)を作ってnewでインスタンス化するとエラーが出た

コンストラクタを書くとコンパイルが通った


これって構造体にはデフォルトのコンストラクタがないという事ですか?
クラスと違って必ずコンストラクタ書かないと駄目なんですか?
84デフォルトの名無しさん:2015/01/03(土) 13:08:04.43 ID:j/TgmM2H
publicなデフォルトコンストラクタはむしろ強制的に作られる
具体的にどう書いたらエラーになったの?
85デフォルトの名無しさん:2015/01/03(土) 13:32:40.25 ID:xZbaMjzc
public struct CoOrds
{
 public int x, y; // フィールド
}
public class Player_2D : MonoBehaviour {

CoOrds coOrds = new CoOrds();
coOrds.x = 10;
}
↑★エラー


public struct CoOrds
{
public int x, y;
}
public CoOrds(int p1, int p2)
 {
  x = p1;
  y = p2;
 }
}
public class Player_2D : MonoBehaviour {

 CoOrds coOrds = new CoOrds(100,50);
}
↑★通った


こんな感じです
86デフォルトの名無しさん:2015/01/03(土) 13:35:18.49 ID:0VTOA39G
coOrds.y = 10;

↑こうやってyのほうも初期化してやれば大丈夫。
87デフォルトの名無しさん:2015/01/03(土) 13:41:01.42 ID:xZbaMjzc
ありがとうございます。
クラスと違って必ず全フィールド初期化する必要があるんですね
88デフォルトの名無しさん:2015/01/03(土) 13:41:51.03 ID:0VTOA39G
そうそれ。もはや定番のトラップともいえる。
89デフォルトの名無しさん:2015/01/03(土) 13:44:08.10 ID:W1+QD1Kd
自動実装プロパティーを構造体のコンストラクターで初期化する時も
明示的にデフォルトコンストラクタを呼ぶ必要があるけど、書くたびにこんなの自動でやってくれよと思う。
90デフォルトの名無しさん:2015/01/03(土) 14:03:25.84 ID:EzY/doXv
構造体のプロパティに初期値つけたいとき
get setで細工するのって悪手なんだろうか

public struct Hoge
{
private int _number;
public int Number { get { return _number + 10; } set { _number = value - 10; } }
}
91デフォルトの名無しさん:2015/01/03(土) 15:01:28.05 ID:C22WgX+v
Blittableな構造体はポインタ取ったりマーシャリングなしでアンマネージコードとやりとりしたりできるから
見た目と中身が一致してないとトラブルの元になる可能性がある
クラスの方が無難
92デフォルトの名無しさん:2015/01/04(日) 00:00:53.54 ID:Knmlwtn7
>>85
これってunityのみの話?

デフォルトコンストラクタのインスタンス作成で、int型は0に初期化されるよね?
93デフォルトの名無しさん:2015/01/04(日) 01:08:25.59 ID:+rZjO+Yw
そもそもエラーって書いてある方は文法的におかしいので意味不明だった
94デフォルトの名無しさん:2015/01/04(日) 01:12:49.99 ID:+tHlT8u4
>>90キチガイは去れ
95デフォルトの名無しさん:2015/01/04(日) 01:17:48.81 ID:+rZjO+Yw
諦めてファクトリメソッド使えば済む話なのに
96デフォルトの名無しさん:2015/01/04(日) 04:52:16.18 ID:BYramH0M
>>90
悪手じゃないと思える方が不思議。
97デフォルトの名無しさん:2015/01/04(日) 11:35:01.06 ID:VztenZHc
>>90
(´・ω・`)いろんな人がいるわね
98デフォルトの名無しさん:2015/01/04(日) 11:54:41.15 ID:V2qD8ALg
俺の記憶では
structの全てのフィールドを埋めないといけないのは
structの自前定義コンストラクタの中とかout変数の中とかだけじゃなかったか
99デフォルトの名無しさん:2015/01/04(日) 11:59:37.45 ID:pmYq5Gj4
ローカル変数でnewなしで使う場合とかも
100デフォルトの名無しさん:2015/01/04(日) 17:21:16.29 ID:BwoXMWJD
Process特定するときにPidやProcessNameやウィンドウタイトル以外を使って特定する方法ってありますか?
101デフォルトの名無しさん:2015/01/04(日) 17:36:24.77 ID:+rZjO+Yw
ウィンドウがある前提なら位置とか
102デフォルトの名無しさん:2015/01/04(日) 18:07:18.39 ID:SGTkLy8I
クラス名、スタイルとか
103デフォルトの名無しさん:2015/01/04(日) 18:10:21.89 ID:Rixhug78
>>90
年明け一発目に笑ったのがこれ
会社いきたくねーなー
104デフォルトの名無しさん:2015/01/04(日) 18:15:58.07 ID:XBKS/x+u
仕事でこんなコード見たら切れるが、個人なら多少はね
105デフォルトの名無しさん:2015/01/04(日) 18:40:07.66 ID:W7Dn89Wi
そんなに変かなとおもうけどね。
例えば、Windows FormのSizeとClientSizeなんか>>90と似たような実装だろう。
106デフォルトの名無しさん:2015/01/04(日) 18:45:20.74 ID:+rZjO+Yw
会社!今日一度たりとも口にせず、目にも入れなかったのに!この単語!
107デフォルトの名無しさん:2015/01/04(日) 18:55:47.56 ID:SGTkLy8I
>>105
実装こんなんだったよ
ちなみにControlクラスね
ttp://ideone.com/wLGaud
108デフォルトの名無しさん:2015/01/04(日) 19:00:01.67 ID:BYramH0M
>>105
初期値が基点として何らかの意味を持っているなら分かる。即値は勘弁して欲しいが。
上記のような意味が無く初期値を与えるためだけの実装ならあり得ない。誤解を招くだけ。
109デフォルトの名無しさん:2015/01/04(日) 19:01:01.11 ID:XBKS/x+u
外から設定された値をそのままで覚えておかないと後からその値使おうとした時にスパゲッティになるよね
110デフォルトの名無しさん:2015/01/04(日) 19:13:30.05 ID:pmYq5Gj4
Control.AutoScrollPositionの話はやめるんだ
111デフォルトの名無しさん:2015/01/04(日) 19:51:19.43 ID:F+SkZ8NF
>>108
確かに初期値を与える目的ならありえんね。
>>90がそう書いてるのを読み飛ばしてたよw
112デフォルトの名無しさん:2015/01/04(日) 23:08:11.87 ID:zeAkgQcd
Entity Framework 6.0についてる?のか

最新のEntity Data Model DesignerをVisualStudio2010のExpressで使うことは可能でしょうか?
ライブラリはとって来て動いてるけど、デザイナーは古いままのようで、
どこで入手するのかすら分かりません

方法知ってる人がいたら教えてください
113デフォルトの名無しさん:2015/01/04(日) 23:14:59.80 ID:pmYq5Gj4
MSがいちいち古いVSにバックポートするとも思えないし、ましてやExpress
114デフォルトの名無しさん:2015/01/05(月) 00:24:57.21 ID:CcrdyzYe
リストに入れたクラスインスタンスのフィールドにアクセスするにはどう書けばいいですか?

@class Hoge(){
  public int x = 10;
 }
というクラスを作る

A Hoge hogeinst = new Hoge();でHogeのインスタンス取得

B ArrayList testlist = new ArrayList();を作り、testlist[0]にhogeinstを入れる

Cclass Hoge2内で
  Hoge thisClass = testlist[0];
 とする

この時testlist[0]にはクラスHogeが入っているので、そのフィールドのxに
アクセスしたいんですが(できますよね?)

int y;
y = thisClass.x;

とかしても、リスト要素にxなんてものはありませんと言われます。
なぜですか?
デバッガ上でthisClassの中を見るとちゃんと実体が入っていて、xの値も見れます。
115デフォルトの名無しさん:2015/01/05(月) 00:27:41.19 ID:Y6BCcXgq
ArrayList使うの止めてList<Hoge>使いなさい
あなたが参考にしている文献は古いので新しいのを探しなさい
116デフォルトの名無しさん:2015/01/05(月) 00:40:39.01 ID:sgWfPCE2
MSDNのリファレンスもそうだけど
参照するクラス名がハイパーリンクになっていないのに
クラスの名前空間が書かれていないとイラっとする
117デフォルトの名無しさん:2015/01/05(月) 00:42:18.63 ID:Y6BCcXgq
あと

>Hoge thisClass = testlist[0];

これコンパイル通らないだろ。
質問するときは下手に省略しない。
理想的には、エラーが出る最低限のコードをどこかに貼る。

http://ideone.com/zC9Ig5
118デフォルトの名無しさん:2015/01/05(月) 01:33:11.62 ID:0eh7fjHk
>>114
継承について勉強すべし

ArrayListはHogeの基底クラスであるObject型で格納するので、
thisClass = testlist[0]; のthisClassはObject型。
Object型に x というメンバーは存在しないので当然アクセス不可。
ただ実体としてはあくまでもHogeクラスなので、デバッガでは見れるようになっている。

なので、Hogeクラスにキャストすれば良い
Hoge thisClass = (Hoge)testlist[0]

とはいえ、ArrayListはジェネリック対応までの古いクラスなので、
>>115 氏と全く同意見。
119デフォルトの名無しさん:2015/01/05(月) 02:21:12.29 ID:CcrdyzYe
>>117
ありがとうございます。
すみません、気をつけます・・・。

>>118
ありがとうございます。
Listに直し、キャストも試してみます
120デフォルトの名無しさん:2015/01/05(月) 03:18:54.29 ID:CcrdyzYe
追加ですみません、入れる型が不明な時、もしくは複数の型を
一つのリストに入れたい時はList<T>は使えないですよね?
121デフォルトの名無しさん:2015/01/05(月) 05:25:09.73 ID:kYxtbyc6
そんな構造が必要ってケースは99.9%ぐらい設計がまずいので
そんな構造が不要になるように考える
122デフォルトの名無しさん:2015/01/05(月) 09:16:26.05 ID:+R2flTDU
>>112
VS2010でDbContext使いたい場合はEF5にしとけ
123デフォルトの名無しさん:2015/01/05(月) 10:06:37.33 ID:0eh7fjHk
>>120
型が不明ってどんな場合?コードを書く時点で何を格納するか決まってるはず。
複数の型も怪しいけど。

基本的には同じ型、もしくは同じ基底クラスから継承したクラスを格納する。
List<基底クラス>
124デフォルトの名無しさん:2015/01/05(月) 11:38:55.66 ID:FTlsmlFT
List<object>
125デフォルトの名無しさん:2015/01/05(月) 12:00:57.25 ID:QplnPHvB
基底すぎぃ
126デフォルトの名無しさん:2015/01/05(月) 14:58:15.89 ID:CcrdyzYe
>>121
なるほど・・・今日もう一度考えてみます

>>123
Randam.rangeによって入れるクラスがランダムに変わるんです

なのですが、どうもListに入れる型が入れるまで不明というのは
設計的にまずいようですので、一つのクラス内に複数のメソッドを作って
そのメソッドをlistに入れるという方向でやってみようと思います
127デフォルトの名無しさん:2015/01/05(月) 15:16:16.37 ID:X/XHMwki
>Randam.rangeによって入れるクラスがランダムに変わるんです
斬新すぎるw
128デフォルトの名無しさん:2015/01/05(月) 15:22:49.76 ID:CcrdyzYe
恥ずかしい・・・
PGの友人にまずはメソッドで出来ないか考え、どうしても無理ならクラスでやれ
と言われたのを今思い出しました
メソッドで可能か考えずにいきなりクラスでやる設計にしたのが悪かったようです
普通にメソッドで可能だと思うので、メソッドでやります

ArrayListにしたのはListと違って型指定が不要で色んなクラスを入れられたので
ArrayListを使いました
こちらも言われた通りListに修正しようと思います
129デフォルトの名無しさん:2015/01/05(月) 15:37:14.65 ID:F0b7DCdm
どんな物をつくろうとしてるのかさっぱりわかんないけど一から書籍で学習した方がいいよ
130デフォルトの名無しさん:2015/01/05(月) 16:12:57.15 ID:wIPFuinN
本当にArrayListが必要だったら>>124が代替になるけどさ…

>入れるクラスがランダムに変わる
ってどういう用途で必要?

本当に必要だったらabstract classかinterfaceで縛った方がいい
131デフォルトの名無しさん:2015/01/05(月) 16:27:36.40 ID:mE5biZZS
初心者が詰まるのはそもそも選んだ道が間違ってる場合が多いので、
無理な道をどう進めばいいかに拘ってはいけない
publicフィールドとメソッドだけでも十分何でも作れるよ
132デフォルトの名無しさん:2015/01/05(月) 17:04:56.11 ID:CcrdyzYe
>>130
トランプやカード(のような種類のあるもの)をランダムでデッキに積む処理です
それぞれのカードの種類をクラスで作りました
133デフォルトの名無しさん:2015/01/05(月) 17:08:59.64 ID:0G+rQibS
お前はポーカー作るのに52クラス作るつもりか
134デフォルトの名無しさん:2015/01/05(月) 17:40:38.34 ID:QplnPHvB
同じListに突っ込んで処理するって事はそれらに何かしら共通点があるはず
その共通点を基底クラスにして派生クラス作ればいいだけさ
List<基底クラス>で用意すれば派生クラスをいくら入れてもなんとかなる
どこまで基底クラスに機能を持たせるかは経験を積んで判断してくれ
135デフォルトの名無しさん:2015/01/05(月) 18:36:45.06 ID:P8usTFQm
シャッフルってどうやるのがいい?
やっぱり定石といってるやり方の方が正しいのかね?
最近ランダムソートをよく見る気がするが。
ttp://bbs.wankuma.com/index.cgi?mode=al2&namber=74460
136デフォルトの名無しさん:2015/01/05(月) 18:47:09.51 ID:FTlsmlFT
for(int i = 0; i < array.Length; ++i)
{
 var rand = random.Next(array.Length);
 Swap(array, i, rand);
}

俺はこれだなあ
正しいかは知らん
137デフォルトの名無しさん:2015/01/05(月) 18:55:57.15 ID:Y6BCcXgq
俺は使用頻度の高い順に

標準ライブラリにあるやつ
FisherYates
俺俺アルゴ

C#じゃない場合も含めて
138デフォルトの名無しさん:2015/01/05(月) 18:59:01.09 ID:Y6BCcXgq
標準ライブラリにシャッフル関数持ってる奴は
だいたいFisherYatesで実装されてると思う
139デフォルトの名無しさん:2015/01/05(月) 20:34:33.21 ID:X/XHMwki
>>132
処理でカードの種類を区別したいだけなら整数値でいいよ
トランプなら百の位でマークを、十と一の位で数字を表すとかで十分すぎる
カードクラスなんかいらない
140デフォルトの名無しさん:2015/01/05(月) 20:54:34.70 ID:O5Cj2lUa
意味をはっきりさせるために構造体ぐらいは使った方が良いし、値じゃなくて参照の方が適当な処理もあると思うが
141デフォルトの名無しさん:2015/01/05(月) 21:04:57.32 ID:X/XHMwki
ソーシャルゲームのカードみたいにカード自体がいろんな性質を持つならそうだね
トランプなら手札クラスや場札クラスまででいいと思うよ
カード型があってもアルゴリズム記述の邪魔になるだけ
142141:2015/01/05(月) 21:13:21.66 ID:X/XHMwki
あとはトランプの中でも特定のゲームを前提にするなら
カード型がメソッドやプロパティを持ってる方が便利な場面はあるだろうな
ページワンで「約札かどうか」とか、ルール上、各カード自体が特別な性質を持ってると見なせる場合
143デフォルトの名無しさん:2015/01/05(月) 23:46:57.60 ID:i4FQe74T
自分で何入ってるのか分かってるんなら別にarraylistでいいじゃん。
継承関係あろうがなかろうが、ゲームで使うオブジェクトを片っ端からぶちこめ。
取り出すときに、System.Linq.Enumerable.OfType<Hoget>(arraylist)とかで取り出せばいい。
144デフォルトの名無しさん:2015/01/05(月) 23:55:32.16 ID:4ygqeEMH
>>143
そうするメリットが皆無なのにする意味がない。
145デフォルトの名無しさん:2015/01/06(火) 00:20:25.34 ID:yfzj11GY
型指定しちゃったら型にはまらない型入れられないじゃん
146デフォルトの名無しさん:2015/01/06(火) 00:35:48.24 ID:9rh5iKlf
>>145
List<Object>
147デフォルトの名無しさん:2015/01/06(火) 00:45:48.08 ID:thA/82xL
ArrayListやList<object>だと、
カードクラスを追加したら、他の部分もそれに合わせて変更が必要になるじゃん?

カードクラスを追加しても、他の部分を変更せずに済むようにするのが良い設計だよ
その方法が>>134
148デフォルトの名無しさん:2015/01/06(火) 00:49:55.98 ID:Sh5lmqQg
外人のプログラマがcharをキャレットと発音していました
なぜですか?
149デフォルトの名無しさん:2015/01/06(火) 00:51:16.47 ID:P27SxgEV
アニモー
モータポー
ミッソッ
ポテイトゥ
150デフォルトの名無しさん:2015/01/06(火) 00:58:06.22 ID:dzcmrdpW
>>148
charはキャラって読みそうだけど、
通はシャアって読むよね!
151デフォルトの名無しさん:2015/01/06(火) 01:00:32.54 ID:nsrYhV9A
マークがenum
数字がintのクラス一つあれば十分
152デフォルトの名無しさん:2015/01/06(火) 01:03:06.40 ID:yfzj11GY
<<147
ならないよ。
list.OfType<Interface>で取り出せばいいよ。
153デフォルトの名無しさん:2015/01/06(火) 03:41:49.07 ID:lXgSl7Ko
>>152
それなら、List<Interface>で良いんじゃ。
154デフォルトの名無しさん:2015/01/06(火) 06:50:09.33 ID:Gue0XuXV
>>153
それだと入れられなくないか?
155デフォルトの名無しさん:2015/01/06(火) 10:00:22.93 ID:tMvZ7xD7
>>135
これ結構早い段階というか最初から?偏りがあるんじゃないかって疑ってたみたいだけど、そういうのってなんとなく?感覚的に?あるいは論理的に?分かるもんなの?
なんにしても、なんとなく適当にやると簡単に偏りとか出てしまうんだな。
156デフォルトの名無しさん:2015/01/06(火) 10:23:55.04 ID:IQcBbcwX
経験的に、だと思う
157デフォルトの名無しさん:2015/01/06(火) 12:36:40.69 ID:M5IoxY0a
・Randomは重複する
・OrderByは安定ソートである
この2点さえ知ってれば明らかでしょ
安定ソートでないアルゴリズムでも重複キーの順序は大抵何らかの単純な法則に従うから偏るだろうね
>>136はNext(i, array.Length)に変えたら一様になるよ
インプレースだから分かりらさ
158デフォルトの名無しさん:2015/01/06(火) 12:38:49.14 ID:M5IoxY0a
すまんミス
インプレースだから分かりにくいけど、直感的には袋に入れた玉を無作為に取り出して並べるのと等価
159デフォルトの名無しさん:2015/01/06(火) 12:52:09.52 ID:RdEZdnsU
rnd.NextDouble使ってれば重複は無視できるレベルになると思うけどね
160デフォルトの名無しさん:2015/01/06(火) 13:05:59.44 ID:IQcBbcwX
理解して無視してるならいいよ
理解せずに無視してるとなるとそれは
161デフォルトの名無しさん:2015/01/06(火) 13:10:43.51 ID:9BIJAN3Y
>>158
等価に思えんけど。
それではインデックスが若い物ほどSwapされる頻度の平均値が上がってしまう。
162デフォルトの名無しさん:2015/01/06(火) 13:13:38.84 ID:IQcBbcwX
昨日とりあえずFisherYates使えって言ったじゃん
163デフォルトの名無しさん:2015/01/06(火) 14:53:07.88 ID:nsrYhV9A
>>157
>Next(i, array.Length)に変えたら一様になるよ

全く意味不明だな
元がどう一様ではないのか説明してみろよ
164デフォルトの名無しさん:2015/01/06(火) 14:59:54.65 ID:3sTwSoye
>>136>>157の修正したものがFisherYatesと同じでしょ
でそれは>>158の解釈通りでしょ
165デフォルトの名無しさん:2015/01/06(火) 15:01:16.62 ID:3sTwSoye
あ、元が一様かそうでないかは自分にはわからん
166デフォルトの名無しさん:2015/01/06(火) 15:02:50.44 ID:9BIJAN3Y
だから初期状態で若いインデックスの物ほどswapされる頻度が高くなるんだから>>158の説明は間違い
167デフォルトの名無しさん:2015/01/06(火) 15:07:35.47 ID:A5fXnf9K
スワップと考えるから間違える。
やってることはスワップなんだが、論理的には袋の中から一つずつランダムに取り出すのと同じになるんだよ、>>158のやり方で。
よく考えれば分かる。
最初のやり方は一様にならない。
168デフォルトの名無しさん:2015/01/06(火) 15:09:36.32 ID:3sTwSoye
>>166
どういうこと?157のように変えたらarray[0]は初回のみしかswapされないと思うんだが
169デフォルトの名無しさん:2015/01/06(火) 15:09:40.81 ID:nsrYhV9A
そもそもランダムならばスワップが1回でも2回でもランダムな値であることには変わりないはずだからそこは問題じゃないだろう

元が一様ならばNext(i, array.Length)にするのは無駄な処理が増えるしシンプルさを損なうから無粋だろう
170デフォルトの名無しさん:2015/01/06(火) 15:10:38.19 ID:A5fXnf9K
違う、>>157のやり方だった。

スワップする事で、袋から選んだボールを並べた上で、選ばなかったボールを袋に返してることになるんだよ。
ちょっとわかりにくいけどよく考えてみれば分かるはず。
171デフォルトの名無しさん:2015/01/06(火) 15:12:21.30 ID:A5fXnf9K
>>168
スワップじゃなくて、袋から一つずつ取り出してるんだ。
一回取り出した奴を含めて選びなおしてたらおかしくなるだろ?
172デフォルトの名無しさん:2015/01/06(火) 15:17:05.25 ID:nsrYhV9A
>>170
ボールを袋に返すっていうのがまず意味不明だし
袋に返すとどう一様じゃなくなるのかも分からんな
173デフォルトの名無しさん:2015/01/06(火) 15:17:15.48 ID:9BIJAN3Y
>>170
だから、初期状態の位置によって何度も袋に戻される玉とそうでない玉が出るんだから全然等価じゃありません。
174デフォルトの名無しさん:2015/01/06(火) 15:21:19.22 ID:9BIJAN3Y
例えばarray.Length == 5の時、初期状態でarray[0]に入ってる値は
Swap(0, 1)→Swap(1, 2)→Swap(2, 3)→Swap(3, 4)
と最大4回swapされる可能性があるが、初期状態でarray[4]に入ってる値は
最大でも1回だけ。
175デフォルトの名無しさん:2015/01/06(火) 15:22:15.54 ID:nsrYhV9A
現実のボールをランダムに並べるには袋から取り出していく事が必要になるが
現実のボールを袋から取り出してるわけではないからそのメタファーに従う必要はない
別にボールを取り出すようにやらないと配列が一様なランダム性を得られないわけではないし

さらにいえばボールを袋に返してはいけないのは並べ終わらなくなるからであって一様性とは関係ないはずだ
176デフォルトの名無しさん:2015/01/06(火) 15:27:31.97 ID:A5fXnf9K
>>136のやり方がなぜだめか。
例えばボール3つの場合、ボールの並び方は
123 132 213 231 312 321
の6パターンになる。
一方、スワップの組み合わせ数は3×3×3で27パターン。
つまり6パターンで割り切れない。
ということは、どういうことになるかというと、パターン数に偏りがあるって事になる。
分かる?
177デフォルトの名無しさん:2015/01/06(火) 15:30:16.08 ID:A5fXnf9K
>>175
違うよ。
プログラムの動作をメタファーで表現してるのではなくて、元々の袋から一つずつ取り出して並べる操作を、プログラムでシンプルに実装するとこうなるんだ。
論理的に等価なんだよ。
178デフォルトの名無しさん:2015/01/06(火) 15:31:51.57 ID:9BIJAN3Y
言ってて無理があると思わないんだ...
179デフォルトの名無しさん:2015/01/06(火) 15:34:02.23 ID:A5fXnf9K
>>176
一方で、>>157のやり方だと、スワップの組み合わせ数は
3×2×1で6パターン
つまりボールの並び順のパターン数と同じになる。
袋から一つずつ取り出して並べるのと等価になるようにプログラムしてるんだから当然だけど。
180デフォルトの名無しさん:2015/01/06(火) 15:35:29.20 ID:nsrYhV9A
>>176
まずスワップの組み合わせ数とボールの並べ方の数に何の関係があるんだよ
関係無いものを並べてみただけのただの詭弁だ

ランダム性が一様であるかどうかは「配列のすべてのインデックスで、
全ての項目から均等な確率で一つが選ばれて割り当てられているかどうか」で決まる
だから>>136は全く正しいアルゴリズムである
181デフォルトの名無しさん:2015/01/06(火) 15:40:01.80 ID:A5fXnf9K
最初の配列は全部袋の中のイメージな。
まず一回目のループで3つのうちどれか選ぶよな。
それが一つ目のボールだ。
配列の1つめと、選んだボールをスワップする。
配列の1つは選んだボールになり、2つ目と3つ目は袋に残ったボールになる。

2回目のループで配列の2つ目と3つ目どちらかを選ぶ。
つまり、袋に残った2つのどちらかを選ぶ。
配列の2つ目と入れ替える。
配列の2つめは、袋から2回目に選んだボールとなり、配列の3つ目には選ばれなかったボールが残る。

こういう事だよ。
182デフォルトの名無しさん:2015/01/06(火) 15:43:07.32 ID:A5fXnf9K
>>180
さすがに
確率を勉強し直せとしか言えん。

スワップのパターン数=出来上がる配列の最終的なパターンの総数だろうが。
その総数が、並び方のパターン数の倍数にならないなら、並び方によって出現するパターン数が替わってしまう=一様になってない。
何で分からん?
183デフォルトの名無しさん:2015/01/06(火) 15:43:43.21 ID:IQcBbcwX
あ、ご高説終わりましたか?
184デフォルトの名無しさん:2015/01/06(火) 15:46:15.23 ID:3sTwSoye
>>136を10000回やってみると確かに偏った(初期位置が後ろのものほど前に来にくい)
>>157だと偏ってないように見えた

ちょっと確率の計算を勉強しなおしてくる
185デフォルトの名無しさん:2015/01/06(火) 15:51:38.69 ID:IQcBbcwX
約一名様は中学校からやり直しね
186デフォルトの名無しさん:2015/01/06(火) 15:57:49.21 ID:3sTwSoye
え、一人だけ
187デフォルトの名無しさん:2015/01/06(火) 16:04:24.60 ID:3sTwSoye
結局>>164の認識で合ってるという理解になったんだが
合ってるよね?
188デフォルトの名無しさん:2015/01/06(火) 16:04:38.57 ID:9BIJAN3Y
a[i]とa[j](i≦j≦n, where n = a.Length - 1)を交換する行為は、確かに
a[i]からa[n]までの部分配列を袋とみなして玉を取り出した後、袋とみなす部分配列の始点を
インクリメントするのと同じだから、やっぱり>>157-158が正しいなw

すまんかった。
189デフォルトの名無しさん:2015/01/06(火) 16:22:27.74 ID:W2F4pWSu
こういう時にideone使えよ
俺はやらないけどな
190デフォルトの名無しさん:2015/01/06(火) 16:41:32.07 ID:A5fXnf9K
>>187
合ってる。
191デフォルトの名無しさん:2015/01/06(火) 16:41:49.09 ID:3sTwSoye
貼ってみたよ
http://ideone.com/Uic7zf
192デフォルトの名無しさん:2015/01/06(火) 18:03:02.39 ID:GG94B219
アルゴリズム的に一様になるとしても、そもそもの乱数に偏りがあったら何にもならんのだが
実際どの程度偏ってるんだろ
193デフォルトの名無しさん:2015/01/06(火) 18:17:27.51 ID:fNWhMhIP
>>192
CのデフォRand()がアレなのは常識だけど、C#デフォのはどうなの?
メルセンヌ・ツイスタとかなら文句はないんだが
194デフォルトの名無しさん:2015/01/06(火) 18:21:06.20 ID:W2F4pWSu
クヌースの減算法じゃなかったか
195デフォルトの名無しさん:2015/01/06(火) 18:27:12.50 ID:pqQorvDT
>>194
うん。
196デフォルトの名無しさん:2015/01/06(火) 18:29:24.17 ID:pqQorvDT
>>160,180
>>184
ジワジワくるw
息してないけど。
197デフォルトの名無しさん:2015/01/06(火) 18:30:35.79 ID:pqQorvDT
>>160じゃなくて>>169だた。
198デフォルトの名無しさん:2015/01/06(火) 18:32:22.80 ID:nsrYhV9A
>>182
>スワップのパターン数=出来上がる配列の最終的なパターンの総数

何言ってんだ一体
たとえば同じ箇所を二回スワップすれば同じパターンに戻るんだからスワップの総数は最終的なパターンの総数になんかなるわけないだろう

たしかに俺が間違っていたことは間違いないが
これが詭弁なことにも違いはない

>>191の結果を見ると
結局最初に0番にスワップされた奴はもう戻って来られない可能性が高いが
0は自由な位置に移動した後もう一度必ず移動するチャンスがあるので
その分移動しやすいってことか
なので自分の数字より若い位置に移動したらもう移動しない可能性が高いので
自分の数字より前の濃度が高くなるのか
199デフォルトの名無しさん:2015/01/06(火) 18:42:43.31 ID:pqQorvDT
>>198
だから確率を勉強しし直すといいよ。
同様に確からしい起こりうる事象のすべての組み合わせのうち、
ある事象が起こる回数の割合が、その事象の起こる確率だ。

同様に確からしい、起こり得るすべての事象の総数がここでは27パターンなわけ。
この27パターンは同じ確率で発生するわけ。
並び方のパターンは6で、総事象が27ってことは、確実に多い並びと少ない並びがあるわけ。
27パターンは同じ確率で発生するんだから、少ない並びのパターンが発生する確率は少なくなるわけ。

確率を分かってたら総パターンの意味なんてすぐ分かるけど、ちゃんと理解してないからピンと来ないんだな。
200デフォルトの名無しさん:2015/01/06(火) 18:45:28.69 ID:pqQorvDT
>>198
詭弁でもなんでもなくて、確率の話ではふつうの言い方だよ。

理解できないおまえがアホなだけ。
結局お前の言ってたこと全部間違ってるじゃんw
201デフォルトの名無しさん:2015/01/06(火) 18:52:03.53 ID:W2F4pWSu
そろそろ面会時間終わりですよー
202デフォルトの名無しさん:2015/01/06(火) 19:15:40.97 ID:nsrYhV9A
>>200
現象を理解してないから詭弁を使うわけ
俺は現象を理解したから無意味な詭弁で妙な説明をする必要はなくなったの
そしてお前は煽ってるだけで最初からなんにも理解できてないわけ
確率の上っ面を舐めて変な解説に屋上屋を重ねただけ 現象には全く届いていない
203デフォルトの名無しさん:2015/01/06(火) 19:18:01.57 ID:W2F4pWSu
そんなハッスルしなくても
あと5時間もあるのよ?
204デフォルトの名無しさん:2015/01/06(火) 19:59:29.97 ID:d8xiUFfP
>>202
おまえは何を言ってるんだ…
205デフォルトの名無しさん:2015/01/06(火) 20:06:27.17 ID:Q7R46vB5
言葉ではなく心で現象を理解できたとかそんなん
206デフォルトの名無しさん:2015/01/06(火) 20:10:09.17 ID:d8xiUFfP
もう少しだけ正確な言葉でいうなら、>>136は、根元事象が27で、表に出てくる、結果の並び順は6事象。
27の根元事象は、結果としてこの6事象はのいずれかに対応している。
偏りがないためには、結果の6事象が同じ確率で発生しなければならない。
しかし、根元事象が27なので、結果の6事象は均等に発生せず、6事象の発生確率は確実に異なる。

だから>>136は絶対に偏りが発生する。
それだけの話で、確率としては当たり前の話。
理解できない奴がアホ。
207デフォルトの名無しさん:2015/01/06(火) 20:13:24.83 ID:d8xiUFfP
確率の上っ面も何も、確率の入門レベル、超基礎レベルで分かる話だ。
208デフォルトの名無しさん:2015/01/06(火) 20:20:40.77 ID:Q7R46vB5
2chでよかったな
これがidentifyのあるコミュニティだったらユーザー封印レベルだった
209デフォルトの名無しさん:2015/01/06(火) 21:11:12.98 ID:qlHRI5QU
>>206
つまりこういうことか。
https://ideone.com/crwsk4
210デフォルトの名無しさん:2015/01/06(火) 21:24:47.79 ID:MYBQVLqU
3以上の整数nについてn^nがn!で割り切れないことって一般に証明できるの?
211デフォルトの名無しさん:2015/01/06(火) 21:36:10.21 ID:O9PzdG7T
板違い
単純に大小比較で終わりそうな気もするがw
212デフォルトの名無しさん:2015/01/06(火) 21:46:17.93 ID:Z/uJ2lW6
>>210
階乗って事は、n以下の前自然数が因数として含まれてるわけだ。
割り切れる訳ないよね?
213 ◆QZaw55cn4c :2015/01/06(火) 22:05:21.43 ID:3D6Su9d8
>>210
証明できる。

準備:隣合う二つの整数は互いに素
証明:a, b, が d で割り切れるなら、差 a - b も d で割り切れる。(∵a = q1・d, b = q2・d とおくと a - b = d(q1 - q2))
a - b = 1 ならば、a, b, ともに割ることのできる 1より大きい整数は存在しない、もしあったら、a - b = 1 をわることができることになり矛盾。

>>210 の証明
素因数分解は一通りであることを仮定する(これは実はあたりまえじゃない)
n を素因数分解すると p1〜p(n) の m 種類の素数で構成されていたとする。このとき、 n^n も m 種類の素数で構成される。
ここで n >= p1・p2・...・p(n) 、そして、p1・p2・... p(n) とp1・p2・... p(n) - 1 は互いに素
すなわち n! を素因数分解すると p1, p2, ... p(n) のどれとも異なる素数を持つ
ゆえに、n^n は n! で割り切れない Q.E.D
214デフォルトの名無しさん:2015/01/06(火) 22:23:51.73 ID:qlHRI5QU
>>213
n >= p1・p2・...・p(n)
じゃなくて、
n = p1・p2・...・p(m)
じゃないの?
215デフォルトの名無しさん:2015/01/06(火) 22:28:02.85 ID:uMZjRgvb
ここって高校数学のスレだっけ
216デフォルトの名無しさん:2015/01/06(火) 22:30:35.81 ID:nsrYhV9A
何ひとつ現象を説明できないピントのズレた話を繰り返して分かったような気分に浸るだけならともかく
C#もプログラムも一切関わりのないことをプログラム板のC#スレにズルズル書き込んでるんじゃない
217デフォルトの名無しさん:2015/01/06(火) 22:39:13.30 ID:Z/uJ2lW6
>>216
とっとと失せろよ
218デフォルトの名無しさん:2015/01/06(火) 22:47:05.72 ID:3D6Su9d8
>>214
ああ、m と n の使い分けがごちゃごちゃだ‥てきとーに読み替えて

>>216
ごめん
219デフォルトの名無しさん:2015/01/06(火) 22:55:20.05 ID:3sTwSoye
>>216
自分も見直したけど、あなたも確率の考え方は見直しといた方が良いよ
たぶん何か勘違いしてる
220デフォルトの名無しさん:2015/01/06(火) 23:01:15.45 ID:Bc4EA3Wj
まあ就職したら玉と袋の話程度も理解できない文系SEの奴隷として
搾取されるんですけどね
221デフォルトの名無しさん:2015/01/06(火) 23:08:04.94 ID:Q7R46vB5
これで就職できるの?迷惑防止条例違反だわ
222デフォルトの名無しさん:2015/01/06(火) 23:16:03.06 ID:/zWcLRCZ
玉と袋が有って棒はないの?
223デフォルトの名無しさん:2015/01/06(火) 23:28:31.96 ID:Q7R46vB5
完全におっさんの発想
224デフォルトの名無しさん:2015/01/06(火) 23:59:07.16 ID:fH0Fgns+
>>136>>157両方試したけど、136でも全然偏ってないけどな
225デフォルトの名無しさん:2015/01/07(水) 00:03:39.74 ID:kDJhAAzR
すみません、この流れを作った>>132です。
一応、報告と、また低レベルな質問をしに来たのですが
今はやめた方がいい感じでしょうか?
226デフォルトの名無しさん:2015/01/07(水) 00:04:29.36 ID:dafMrNYg
>>224
ロジックを説明されても理解できないなら、せっかく>>209でコード書いて
実証したんだからそれ見て納得してよ。
227デフォルトの名無しさん:2015/01/07(水) 00:05:35.11 ID:dafMrNYg
>>225
別にいいよ。
荒れたって死人がでるわけじゃない。
多少スレッドの見通しが悪くなるだけだ。
228デフォルトの名無しさん:2015/01/07(水) 00:05:49.11 ID:2DuSSq4q
>>225
いや、むしろこの流れを変えて欲しい
229デフォルトの名無しさん:2015/01/07(水) 00:15:10.63 ID:kDJhAAzR
また私のせいで荒れてしまったらすぐ引き上げます。すみません。

まず、
・カード・タイプごとにクラスを切るのをやめた
・カード種類の判別は普通のintの数字のみにした
・int型のリストにランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする

これでやりました
結果から言うと、やりたかった事は出来ました

また、シャッフル(ランダムにする)する処理は昨日一日調べたのですが
FisherYatesを最初使っていたのですが、もっと簡単にできるのがあるという記事を見つけて
FisherYatesをやめ、以下のように書きました。

private static void Fisher(int[] c)
{
int[] cardlist = c; //引数の配列を格納

// 1回じゃ偏りが生じるっぽいので念のため何度かシャッフルを繰り返す
for (int cnt = 0; cnt < 10; cnt++)
{
DeckList.cardlist = cardlist.OrderBy(i => Guid.NewGuid()).ToArray();
}
}

正直、このグイッドについてはあまり理解してないのですが、要するにOrderByというソートメソッドと
乱数を発生させるグイッドメソッドを組み合わせてランダムにインデックスの値をソートさせると認識しています

まず1点目にお聞きしたいのは、上記の処理は何か問題点を含んでいないでしょうか?という事です
ちなみに偏りについてですが、あまり起きないに越したことはないと思いますが、そこまで是が非でも
偏りを解消したいというわけでもないので、程々乱れてくれればいいという観点です。
230デフォルトの名無しさん:2015/01/07(水) 00:15:59.95 ID:PZkMwQ+l
トランプとか麻雀とかで使うシャッフルなら>>136で何の問題もない
偏るって、どれだけ偏るんだよ
使い物にならないくらい偏るわけないだろ
シャッフル厨は死ねよ
231デフォルトの名無しさん:2015/01/07(水) 00:17:03.97 ID:kDJhAAzR
すみません、少し訂正です

・カード・タイプごとにクラスを切るのをやめた
・カード種類の判別は普通のintの数字のみにした
・カード種類をintで判定するようにしたので、ArrayListをやめてint配列にした(public static int[] cardlist = {・・・})
・int型のリストにランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする
232デフォルトの名無しさん:2015/01/07(水) 00:23:45.46 ID:kDJhAAzR
何度もすみません
・int型の配列にランダムでカード種類を表す整数リテラルを入れ、それをシャッフルする

でした
233デフォルトの名無しさん:2015/01/07(水) 00:24:43.11 ID:qh26SAEn
Guid(じーゆーあいでぃー)ソートが許されるのはT-SQLまで
234デフォルトの名無しさん:2015/01/07(水) 00:26:17.95 ID:/xILHur9
ぐいっどそーと
235デフォルトの名無しさん:2015/01/07(水) 00:29:02.69 ID:BcMWINqr
ま、いいんじゃね?
最初の、入門書も読んでるか怪しい、ど素人にもほどがある質問に比べて、
別人かのようなレベルだし。
コードも自分が納得する動きになっているんであればそれで十分かと。
236デフォルトの名無しさん:2015/01/07(水) 00:35:27.18 ID:GJGYE4EM
シャッフルするなら初期状態をランダムにする必要ないんじゃないの?
237デフォルトの名無しさん:2015/01/07(水) 00:39:17.83 ID:+paEBoih
>>229
シャッフルは FisherYatesが正解だよ。
GUIDでソートは簡単に書くのが目的であって、
わざわざ偏るからループまでするくらいなら FisherYatesでいい。
238デフォルトの名無しさん:2015/01/07(水) 00:41:20.08 ID:+paEBoih
>>237
GUIDは別に質のいいランダムじゃないしね。
239デフォルトの名無しさん:2015/01/07(水) 00:45:57.08 ID:+paEBoih
>>216
どう見ても自分に言ってる。
自分に言ってるなら違和感ない。
240デフォルトの名無しさん:2015/01/07(水) 00:49:11.22 ID:6g40PNLQ
偏ってることを承知の上で使うならよいが
>>224みたいな人がゲームを作るとカルドセプトのようになる

>>191,209でせっかく実際に偏りを見せてくれてるのに
241デフォルトの名無しさん:2015/01/07(水) 01:06:06.00 ID:nug8jEZh
>>239
偏ってるって言ったところで
なぜそれが偏るのか説明できなきゃ理解したことにはならないんだよ

逆に言えばなぜそれが偏るのか理解できないから
トンチンカンな説明をしだすってこと
242デフォルトの名無しさん:2015/01/07(水) 01:19:30.07 ID:6g40PNLQ
おっと再びブーメランか
243デフォルトの名無しさん:2015/01/07(水) 01:26:30.11 ID:kDJhAAzR
もう一つ質問があったのですが、また日を改めます
質問するレベルじゃない気もしますし

あとシャッフルはGuidやめてFisherYatesにします
ありがとうございました。
244デフォルトの名無しさん:2015/01/07(水) 01:31:14.45 ID:nug8jEZh
「可能な手の総数が組み合わせの数の倍数にならない」という理論で
なぜ自分より若いインデックスの濃度が高まるのか説明できるか考えてみるといい
いかに頓珍漢な説明をしているか分かるだろう
245デフォルトの名無しさん:2015/01/07(水) 07:13:52.16 ID:AKPWQzMr
>>244
トンチンカンは消えろって言ってんだよ
自覚ねえのか昨日の地球で人類最低ランキング一位のカス
246デフォルトの名無しさん:2015/01/07(水) 07:14:44.59 ID:+paEBoih
>>244
やっぱり勝手に勘違いしてるんだな。
一様でないのはこういう理由で明らかと言ってるだけで、どう偏るかについては何も言ってないのに。

こういう理由で一様でないのは明らか。
→こういう風に偏る説明になってない、トンチンカンだ。
アホか。
247デフォルトの名無しさん:2015/01/07(水) 07:20:08.78 ID:+paEBoih
>>246
しかも実例で偏るの見た後でしか偏るわけがないって言い張ってたくせにw
248デフォルトの名無しさん:2015/01/07(水) 08:36:08.25 ID:lse0FVq2
>>244による自称正しい説明ってどれだ?
249デフォルトの名無しさん:2015/01/07(水) 08:40:58.67 ID:lse0FVq2
>>248
198 デフォルトの名無しさん sage 2015/01/06(火) 18:32:22.80 ID:nsrYhV9A
>>191の結果を見ると
結局最初に0番にスワップされた奴はもう戻って来られない可能性が高いが
0は自由な位置に移動した後もう一度必ず移動するチャンスがあるので
その分移動しやすいってことか
なので自分の数字より若い位置に移動したらもう移動しない可能性が高いので
自分の数字より前の濃度が高くなるのか

これか。
ワロタ。
じゃあ何で可能性が低いどころか絶対に戻ってこれない>>157で偏らないんだよ。
250デフォルトの名無しさん:2015/01/07(水) 09:20:24.53 ID:pOoHqu3J
ゲームでユニット表やアイテム表を作るのにTupleがたくさんあります
Tuple<string, string>
Tuple<string, string, sring>
Tuple<string, string, sring, sring>
これを1つのTableクラスが複数の種類のTupleを扱うためには
どういう形で持てばいいのでしょうか
Tupleの共通する基底クラスがあればいいのですが・・・あるいはインターフェース
251デフォルトの名無しさん:2015/01/07(水) 10:09:33.54 ID:NB6nt07B
>>250
いまひとつどういう事をしたいのか分からない…
sringってのはstringの間違い?
252デフォルトの名無しさん:2015/01/07(水) 10:16:24.34 ID:NB6nt07B
>>241
>>244

>>249

ジワる
253デフォルトの名無しさん:2015/01/07(水) 10:29:32.20 ID:pOoHqu3J
>>251
要素の数が異なるTupleをまとめて1つの変数で表す方法
ないんだよねー
ようは ITuple があればいいんだけど(内部使用の同名のインターフェースはあるっぽいがちょっと違う)
254デフォルトの名無しさん:2015/01/07(水) 12:41:40.75 ID:DpCzErqF
ブーメランすぎてわざとやってんじゃないかって気がしてきた。
255デフォルトの名無しさん:2015/01/07(水) 12:44:31.50 ID:DpCzErqF
そもそも本当に単純に自分より若いインデックスの濃度が高くなってんのか?
>>209みるとどうもそういう簡単な話には見えないんだが。
256デフォルトの名無しさん:2015/01/07(水) 13:20:09.53 ID:6g40PNLQ
>>250,253
全部stringなんだったらArrayとかListとかの別のコレクションに変えたらいいのでは
なぜTupleにしたいの
257デフォルトの名無しさん:2015/01/07(水) 13:45:38.44 ID:CxxL7eUt
>>255
三下は引っ込んでろ
258デフォルトの名無しさん:2015/01/07(水) 13:48:40.68 ID:nug8jEZh
>>249
自分より前のインデックスに移動する場合、
移動なしだった場合にN+1手目に来る自分が移動するチャンスが消えてしまう

N+1手目でN番目にある数字は自由な位置にランダムに移動できるので
それを経験すれば初期並び順の影響は消える
経験できない場合は初期並び順の影響がガッチリ残ってしまう

それはたとえば最初の1手で5番が0番に移動するケースではそこから9回再移動のチャンスが有る
でも2手目で5番が1番に移動したらあと8回しかチャンスがない
だから0番より1番の方が濃度が大きくなる
同じように9手目で何かの数字が8番に移動すると10手目でもう1回移動のチャンスがあるけど
10手目で9番に移動したらもう移動のチャンスはないので10番目の方が濃度が高い
9手目ともなると8番目に8が入ってる可能性が低くなるので初期と比べると影響は少なくなる
つまり一度でもN+1手目のランダムジャンプによるリセットが入れば初期並び順の影響は消えるので>>191では検出できなくなるわけだけど
再移動チャンスを繰り返していけばリセットから時を経るごとに大きいインデックスの方の濃度が高まっていく

自分より大きいインデックスに移動した場合はもう一度再帰的に「N+1手目にN番目のリセットを経験できるか」の
サイコロを振ることになるわけだけどこの影響もまた>>191では検出できない
あと「場合の数が並び順の倍数にならない」影響も検出はできないけど理論上存在してるはずだな

再移動なしなら再移動チャンス自体が存在しないので並び順の影響は発生しないわけだな
259デフォルトの名無しさん:2015/01/07(水) 14:10:00.61 ID:nug8jEZh
再移動チャンスの説明がインチキ臭いな
若い番号に移動した後の再移動チャンスは常に大きなインデックスに引き上げられるチャンスなので
大きなインデックスに移動する可能性が高くなり、若いインデックスのものはそこに留まる可能性が低くなるってことだな
260デフォルトの名無しさん:2015/01/07(水) 17:11:30.38 ID:7MvMVdqp
そろそろアルゴリズムのスレ探すか立てるかしてそこでやってくれ
261デフォルトの名無しさん:2015/01/07(水) 17:48:52.70 ID:6g40PNLQ
>>258,259
確率の遷移を表にしてあげたから見ながら考えてみてね
http://ideone.com/Sc1TQ4
262デフォルトの名無しさん:2015/01/07(水) 18:04:15.93 ID:6g40PNLQ
表にしてみて気付いたが157はFisher-yatesより1回ループが多いんだね
でもその1回はやってもやらなくても確率は均一のままなのか
263デフォルトの名無しさん:2015/01/07(水) 18:27:39.03 ID:6g40PNLQ
よく考えたら当たり前だった 最後の1回は入れ替えが起こらない
264デフォルトの名無しさん:2015/01/07(水) 18:31:20.23 ID:nug8jEZh
>>261
いやそんなのは頭のなかに出来てるけど
それを見ると何か新しいことが分かるのか?
265デフォルトの名無しさん:2015/01/07(水) 18:36:15.77 ID:6g40PNLQ
頭の中wなら最初から頓珍漢なこと言わずに作っといてよw
266デフォルトの名無しさん:2015/01/07(水) 18:45:01.14 ID:XLZDHvL7
世界最低と世界ブービーが実現して欲しくなかった史上最悪のコラボトークを行ってます
267デフォルトの名無しさん:2015/01/07(水) 18:55:05.79 ID:dA3MQeHU
つっこみどころが多すぎてもう何も言う気にならない。
268デフォルトの名無しさん:2015/01/07(水) 19:05:27.61 ID:nug8jEZh
>>265
そんなん見たって解釈しないと何も分からんがな
解釈した結果は>>258に書いたし
269デフォルトの名無しさん:2015/01/07(水) 20:25:41.50 ID:48bxsm4k
>>191では検出できない云々を言い始めた辺りから言ってることが無茶苦茶になってる。
270デフォルトの名無しさん:2015/01/07(水) 20:26:36.75 ID:nug8jEZh
どうムチャクチャなのか言ってみ
271デフォルトの名無しさん:2015/01/07(水) 20:30:21.32 ID:48bxsm4k
場合の数が並び順の倍数にならない影響も理論的にはあるはずだが検出できないとか、そもそも根本的に意味分かってないじゃん‥
272デフォルトの名無しさん:2015/01/07(水) 20:34:01.48 ID:48bxsm4k
リセットされるから検出できないってどういう意味だよ。

検出できないってどういう意味で書いてんの?
273デフォルトの名無しさん:2015/01/07(水) 20:37:32.30 ID:48bxsm4k
>>270
まあ昨日からアホなことばっか書きながら、言い繕いばかりやって、書けば書くほど余計にアホとしか思われんぜ。
昨日の時点で根本的に頭悪すぎることはもう見えてしまってるから。
274デフォルトの名無しさん:2015/01/07(水) 22:43:01.26 ID:nug8jEZh
>>271,272
一旦ランダムな位置に移動したら濃度が全インデックスで均一になるからどうスワップしようと偏らないので検出できない
これをリセットと表現している

並び順の倍数のやつは統計的に検出できるほどの量にならないってこと
275デフォルトの名無しさん:2015/01/07(水) 23:37:56.54 ID:+paEBoih
>>274
そもそもそのリセットされた場合もされなかった場合も
その後のどんな動きもひっくるめて繰り返し試行した
統計的な結果が>>191なんだからリセットされた場合は
検出できないなんて表現自体がとっても変なんだが、
まあそこはおいとく。

後半がぶっ飛びすぎててもはやどうでも良いレベル。
根元事象の数が結果の並び順の倍数になってないことを、
いくつかある偏る原因の一つだとでも思ってるのか…

ほかの理由による偏りは統計的に見えているが、
倍数になってないことによる偏りは統計的に影響が
少なくて見えていないってか?

ユニークな考え方だなおい。
276デフォルトの名無しさん:2015/01/07(水) 23:38:36.58 ID:+paEBoih
>>274
そもそもそのリセットされた場合もされなかった場合も
その後のどんな動きもひっくるめて繰り返し試行した
統計的な結果が>>191なんだからリセットされた場合は
検出できないなんて表現自体がとっても変なんだが、
まあそこはおいとく。

後半がぶっ飛びすぎててもはやどうでも良いレベル。
根元事象の数が結果の並び順の倍数になってないことを、
いくつかある偏る原因の一つだとでも思ってるのか…

ほかの理由による偏りは統計的に見えているが、
倍数になってないことによる偏りは統計的に影響が
少なくて見えていないってか?

ユニークな考え方だなおい。
277デフォルトの名無しさん:2015/01/07(水) 23:54:35.46 ID:+paEBoih
二回書き込んだのはミス。

根元事象ってのは、ありとあらゆる動きをすべて含んだ全結果だぜ。
お前がいろいろ説明したいろんな理由によって起こる偏りも
全て含んだ結果の集まりが根元事象だぜ。
根元事象をすべて並べてみればどういう偏りになるか見えるといっても良いかな。

倍数になってないのは偏る原因じゃないんだよ、むしろいろんな原因によって偏った結果を意味してるんだよ。
もし統計的に検出できるほどの量にならないとしたら、
それはつまり>>191は全く偏ってない結果になるってことだよ。

もうあんまり笑わすな。
278デフォルトの名無しさん:2015/01/08(木) 00:38:57.21 ID:VH1XIADf
今は知らないけど俺の時代は理系でも確率統計って(実は思いっきり有用なのに)
軽視されてたな。

大学ではまったく教わってないし、そもそも入試に出ないところが圧倒的に多かった記憶がある。
高専出身者に聞いたら高専では全く習わないって言ってた。
279デフォルトの名無しさん:2015/01/08(木) 09:56:01.78 ID:1y8mGCEd
>>277
倍数になってないことによる影響は10の10乗回試行した時に1差がつくっていうものだ
これを統計的に検出するテストが作れるか作れないかは知らんが
少なくとも俺のPCでは現実時間では実行できない
280デフォルトの名無しさん:2015/01/08(木) 10:14:37.49 ID:jnBNhdgx
>>279
倍数になってないのは原因じゃなくて結果だ。
倍数になってないことだけから分かる確実に発生する偏りの最小量ならそうなるとしても、影響って言わないんだよそんなのは。
そもそも分かってたらそんな言い方しない言い方をしてる時点で、ああ分かってないんだなというそれだけの話。

そもそも倍数でないことから分かるのは、少なくとも偏ってるということだけであって、
どの程度偏ってるとか偏ってないとかは何も想定できない。
倍数でないという条件から確実である最低限の偏りだった場合にその影響は見えないと勝手に言ってるだけで、
そんな条件はきちんと言わなきゃ無意味だし、実際もっと偏ってるわけだ。

そんな細かいレベルの話じゃない、これまでの数々の言動で、何も分かってないアホとしか考えられんと言ってるだけのこと。
281デフォルトの名無しさん:2015/01/08(木) 10:20:55.79 ID:jnBNhdgx
倍数になってないというのは単なる結果の見方、表現の一つ。
統計的な頻度の表も、結果の見方、表現の一つ。
後で出てきた最終的な確率の数値表も結果の見方、表現の一つ。
どれも結果の表現、見方の一つであって、どれかが原因でどうなるという因果関係ではなく、単なる別の側面での見方。
282デフォルトの名無しさん:2015/01/08(木) 11:27:33.77 ID:1y8mGCEd
書き込めてないな
これ279の直後に書いたやつなんで280とかには答えてないけどごめんね


違うか

そもそも論から言えば
Fisher Yatesが決まって完全ランダムな数列が作れたとすれば
012になる場合の数も021になる場合の数も同じだ
だから次に1と2を入れ替えるスワップを行ったとしても偏りは発生しない
スワップは複雑な操作だから倍数になっていないから偏るというものではない

だがFisher Yatesのようなものが決まっておらず元の影響が残っているなら
>>209で示されているような影響が残る
元の影響が完全に残っている場合は10の10乗回で1の差になるけども
元の影響があまり残らないようにスワップしているわけだからこの影響がどの程度になるのかは見積もることすら俺には出来ないな
283デフォルトの名無しさん:2015/01/08(木) 11:54:11.86 ID:5iJyKn99
お前の見解なんて聞いてねえんだよ 
これ以上書き込むと殺す
284デフォルトの名無しさん:2015/01/08(木) 11:54:30.55 ID:c12syUmk
言い合いしてる人ら、いい加減スレ移ってくれませんかね
285デフォルトの名無しさん:2015/01/08(木) 12:00:03.43 ID:1y8mGCEd
お前らが頼みにしていた「場合の数が倍数になってないから偏る」っていうのが誤りなのを示したら発狂か
まあ悪くないな
286デフォルトの名無しさん:2015/01/08(木) 12:12:29.97 ID:WfhjodiB
>>282
また分かってない。
スワップ回数と場合の数は違う。
スワップ回数は>>136>>157も同じだろうが(最後の分は違うとも言えるが)。

シャッフル終わった後に固定場所の二つを入れ替えても、場合の数は変わらない。
ランダム選んで入れ替えたら変わる。
当たり前の話。
287デフォルトの名無しさん:2015/01/08(木) 12:15:13.71 ID:WfhjodiB
>>285
もういい加減にしろよ。
最初から、倍数になってないから一様でない(偏ってる)のは明らか、という話で、間違いも何も、明らかな事実だ。

ていうかおまえ論理的にはあるはずって言ってたじゃんあれは嘘だったのかよw

はいもう終わり。
バカだって表明は事はもう十分だからやめとけ。
288デフォルトの名無しさん:2015/01/08(木) 12:20:17.80 ID:5iJyKn99
お前の見解も聞いてねえよ
黙れ殺すぞ
289デフォルトの名無しさん:2015/01/08(木) 12:23:11.97 ID:GXT9U931
>>132「この流れいつ終わるんだろう・・・」
290デフォルトの名無しさん:2015/01/08(木) 12:24:28.44 ID:WfhjodiB
>>286
場合の数は変わってないから倍数のままと言うことは変わらない。
けど結果の並びは変わるから、全並びが均等のままかどうかは俺には分からない。
ちゃんと考えたら分かるかも知れんが。
倍数になってないことからは、偏ってることが確実と分かるだけ、それ以上の何者でもない。
最初からそういう話しかしてない。

>>288
通報されるぞ
291デフォルトの名無しさん:2015/01/08(木) 12:25:57.51 ID:WfhjodiB
まあ悪かったよもうやめる。
292デフォルトの名無しさん:2015/01/08(木) 12:34:30.60 ID:qIfkunGX
マルチは相手にしてはいけない
http://peace.2ch.net/test/read.cgi/tech/1197620454/
293デフォルトの名無しさん:2015/01/08(木) 13:00:28.01 ID:VLjg/Twc
>>292
テメエ自身がそのマルチじゃねえか馬鹿が。
294デフォルトの名無しさん:2015/01/08(木) 16:07:45.40 ID:G25LXaeS
List<Object>
295デフォルトの名無しさん:2015/01/08(木) 16:17:06.20 ID:qIfkunGX
ばれた?
296デフォルトの名無しさん:2015/01/08(木) 19:50:35.56 ID:gLCA3hvH
>>294
基底すぎぃ
297デフォルトの名無しさん:2015/01/08(木) 22:17:56.21 ID:RxvcgyHB
自作ソフトをVectorに登録してみたんだけどさ。
メールで「公開されましたよ〜!」みたいな通知ってこないもんなの?
サイト上では既に公開されてるのに・・・。
深夜に一斉送信とかかな?

Vectorに登録したことある人教えて。
298デフォルトの名無しさん:2015/01/08(木) 22:24:38.99 ID:ZIphMHjt
Vectorとか久しぶりに聞いたわ
人に使ってもらいたいならスマホアプリに行ったほうが楽しいよ
299デフォルトの名無しさん:2015/01/08(木) 22:30:24.54 ID:RxvcgyHB
>>298
VS2015でザマリンが標準搭載されるらしいね。
でもたしか無料版は容量制限があるから、
もう少し制限が緩和されたら俺もスマホアプリ開発する予定。
ObjectiveCとJavaの二重開発問題をまさかC#が解決するとはね。
300デフォルトの名無しさん:2015/01/08(木) 22:31:31.93 ID:0wZdKCPg
ようやくVSでもAndroidの開発ができるようになるの?
301デフォルトの名無しさん:2015/01/08(木) 22:56:29.91 ID:NRtGS2+4
言語がC#でもライブラリがJava(のパチモン)ではあんまり嬉しくないw
302デフォルトの名無しさん:2015/01/08(木) 23:01:07.37 ID:NTFJsV9R
VS2015でザクマリンが標準搭載と空目してしまった。

でも本当は水ジムの方が好きです。
303デフォルトの名無しさん:2015/01/08(木) 23:06:40.76 ID:RxvcgyHB
>>301
androidの上ではJavaもパチモンだけどなw
真の正体であるDalvikはGoogleが本気だして作ってるから
C#よりも優秀な可能性がある。
それをC#から使えるんだから嬉しい限りだろ。
304デフォルトの名無しさん:2015/01/08(木) 23:14:44.73 ID:m9BFGJK5
VM同士が直接競合しているわけでもないのに実行環境の比較をして何の意味があるの
305デフォルトの名無しさん:2015/01/08(木) 23:14:56.87 ID:NRtGS2+4
>>303
Dalvikそのものが出来が悪いって散々聞いたけど、4.4になって改善されたの?

っていうか俺が言ってるのはそこじゃなくて、ザマリンって.NET Framework(BCL)使えないよね確か。
ライブラリはSDK(Javaのパチモン)しか使えないはず。
306デフォルトの名無しさん:2015/01/09(金) 02:41:15.95 ID:gjp6+33N
やっぱ紗栄子が悪かったんや
307デフォルトの名無しさん:2015/01/09(金) 03:28:42.14 ID:oCewwXo0
型を型推論型のフィールドに入れる事ってできますか?
308デフォルトの名無しさん:2015/01/09(金) 06:13:54.32 ID:Yt8mQXej
型推論型ってなんだよ…
309デフォルトの名無しさん:2015/01/09(金) 07:58:15.25 ID:Xchv982B
>>305
MonoベースだからBCLは.NETと同じだよ
310デフォルトの名無しさん:2015/01/10(土) 11:29:27.83 ID:W1xS5lAE
>>306
アンドロイドOS上で動くシェルが開発された・・・その名は
Dalvish
311デフォルトの名無しさん:2015/01/11(日) 07:34:57.86 ID:6fleKwOw
Action型の変数actに何かの処理を書いて実行します。

その際に、
act()とact.Invoke()どちらを使った方がいいのでしょうか?
312デフォルトの名無しさん:2015/01/11(日) 07:45:18.43 ID:6BuzDaMr
>>311
Invokeじゃないとだめな場所以外で
デリゲートを呼び出すのに()を使わない理由が思いつかない
313デフォルトの名無しさん:2015/01/11(日) 07:55:48.50 ID:6fleKwOw
速度とか変わらないの?

ActionDictionary[type]() じゃ見にくいから
ActionDictionary[type].Invoke()にしようと思って沸いた疑問なんだけど
314デフォルトの名無しさん:2015/01/11(日) 08:03:03.08 ID:YzoMt1+V
おそらくIL上では全部Invoke()扱いだと思う
315デフォルトの名無しさん:2015/01/11(日) 08:26:15.20 ID:6BuzDaMr
ちゃんとリファレンス読んでるのかね。
「CLRがリフレクションのための自動的にInvokeメソッドを提供しますが
コンパイラが自動的に呼び出すのでC#から明示的にInvokeメソッドを呼び出す必要はありません」
という特殊なメソッドなので
それが自分の使い方に合ってるならどうぞお好きに。
速度についてはコンパイラの実装は314の通り
316デフォルトの名無しさん:2015/01/11(日) 08:43:01.93 ID:c5JqEBin
リファレンスに書かれてないメソッド使う俺カッコいい
317デフォルトの名無しさん:2015/01/11(日) 09:32:45.68 ID:8e7vlna2
Invokeは実装依存だから将来的なバージョンアップや
別系統の.NETで使えなくなる可能性があるね
318デフォルトの名無しさん:2015/01/11(日) 10:07:19.53 ID:rflegamX
>>313
>見にくいから
それは変数名が原因じゃないのか・・・
319デフォルトの名無しさん:2015/01/11(日) 10:33:16.66 ID:fxK+EsZ/
>>297
[Vector] ライブラリ公開のお知らせ って件名でメール来たけど、公開してから数日後のようだな
正月だからだろうが2日に公開して9日にメール来たよ
320デフォルトの名無しさん:2015/01/11(日) 10:35:44.14 ID:fxK+EsZ/
あ、2日は修正してUPした日だった。でも、公開してからメールは2,3日はかかっているようだな
321デフォルトの名無しさん:2015/01/11(日) 11:21:34.46 ID:YzoMt1+V
MSDNのAPMの項とか見ればInvokeについても記載されていると思うけど
322デフォルトの名無しさん:2015/01/11(日) 15:58:35.38 ID:xu7NJdBG
うんうん書いてあるね
でも>>317の通りだろ?
323デフォルトの名無しさん:2015/01/11(日) 18:25:40.55 ID:YzoMt1+V
別に言語仕様/MSDNに関係なくなくなる可能性は無くはない
324デフォルトの名無しさん:2015/01/11(日) 18:40:45.94 ID:hXDAFv79
なくなくなる無くない
325デフォルトの名無しさん:2015/01/11(日) 20:23:09.56 ID:23xXqbRD
>>319-320

297だが、おまえは俺かw
俺も2日に修正して9日にメールが来た(・∀・)人(・∀・)ナカーマ
ttp://www.vector.co.jp/vpack/whats/index_1.html
この145本の中に俺のソフトとおまえのソフトがあるわけだw

ところで今回はじめてソフトを登録してみたんだけど、
日本でソフトの登録を行ってるサイトとしてはVectorの他に窓の杜が有名だと思うけど、
あそこはソフト作者からの登録は行ってないんだね。
窓の杜側が優秀なソフトを選定して作者に対して採録していいかを問い合わせる、
という形態であるということが色々調べる中でわかった。
ソフト作者からすると自作ソフトが窓の杜に採録されることって名誉なことなの?
326デフォルトの名無しさん:2015/01/11(日) 20:31:51.99 ID:hXDAFv79
楽しそうだね
327デフォルトの名無しさん:2015/01/11(日) 21:29:51.05 ID:fxK+EsZ/
>>325
俺は10日分にのっていたが、現物はコレだ
http://www.vector.co.jp/soft/winnt/util/se508393.html
閑古鳥鳴いているんで頼むからダウンロードして下さい!

窓の杜の件だが、特別宣伝しているサイトも少ないし関係無さそうに思います
328デフォルトの名無しさん:2015/01/11(日) 21:35:52.00 ID:8e7vlna2
PowerShellとかで一瞬でできそう
329デフォルトの名無しさん:2015/01/11(日) 21:49:32.61 ID:ueBHNwdy
>>327
インストール中にこんなダイアログ出たんだけど

http://www.age2.tv/rd05/src/up6869.jpg
一応実行はできるみたい
実行環境はWin 7 Home 64bit
330デフォルトの名無しさん:2015/01/11(日) 21:54:12.87 ID:YzoMt1+V
なんで.NET4と.NET3.0用のPresentationFrameworkを両方参照してるの?
331デフォルトの名無しさん:2015/01/11(日) 21:57:24.14 ID:fxK+EsZ/
>>329
http://www7b.biglobe.ne.jp/~megatherium/download.html
こっちに一応書いてあるんだが、windows8のメニューに登録する際のオプションなんですわ
windows7では無害なので安心して使って下さい

Wixの設定なんだけど止めたほうがいいのかな?
332デフォルトの名無しさん:2015/01/11(日) 22:02:18.82 ID:YzoMt1+V
TestWindowで何をテストしていたのかが気になる
333デフォルトの名無しさん:2015/01/11(日) 22:02:52.54 ID:3WksrUDW
DataGridViewで、バインドモードでソート列で行の値を変えたとき、
しれっと行が入れ替わってCellStyleとか値以外のプロパティとかを置いてけぼりにしてしまうのですが

ちゃんと行に紐付けてプロパティも一緒に移動させる方法はないでしょうか?
334デフォルトの名無しさん:2015/01/11(日) 22:44:59.64 ID:fxK+EsZ/
>>330
俺の勘違いじゃなければ、外部のライブラリが使用しているという面白くもなんともない理由です
てか、解析するのもいいけど普通に使って下さいよw
335デフォルトの名無しさん:2015/01/11(日) 22:51:01.75 ID:zMjTexzn
>>331
バージョン判定して 7 なら抑止した方がいいんじゃね?
どう見てもエラーメッセージだし、俺なら使うのやめると思う。
336デフォルトの名無しさん:2015/01/11(日) 23:03:57.31 ID:fxK+EsZ/
>>335
MSご謹製のWixと言うxmlで設定するインストーラー使っているんだが
該当する部分にバージョンで判定する方法がよくわからないです
まあ、大した機能じゃないから削除しましょうかね
Windows8使っている人にはわかると思いますが、インストール時にスタートメニューにピン止めする機能です
もしWix上でバージョンで処理を切り分ける方法を知っている人がいて教えてもらえたら幸いです
337デフォルトの名無しさん:2015/01/12(月) 00:58:56.97 ID:15C9Kifs
もうブログでやれよ
338デフォルトの名無しさん:2015/01/13(火) 08:57:32.19 ID:KQw876kB
メモリの改ざんを検出したいのですが何か良い方法はありますか?
339デフォルトの名無しさん:2015/01/13(火) 09:02:45.74 ID:iU8Z/nwR
CRCとかMD5とかSHA1とかを定期的に取るんじゃない?
340デフォルトの名無しさん:2015/01/13(火) 09:20:21.58 ID:ItHN1w7Z
.Netって直にメモリを触れるの?
StreamBufferとかその辺しか無理臭くない?
341デフォルトの名無しさん:2015/01/13(火) 09:27:05.89 ID:NaldXlx/
Marshal.ReadInt32(new IntPtr(0x12345678));
*((int*)0x12345678) = 0x5555aaaa;
触るだけならいくらでも
342デフォルトの名無しさん:2015/01/13(火) 14:00:29.46 ID:cjipnmCJ
>>331
ホームページ、よく出来ているけれど、自作か?
どういうツールで作るのか教えてけれ。
俺も似たようなホームページ作りたい。
343デフォルトの名無しさん:2015/01/13(火) 14:05:15.04 ID:8RgDkMSv
よほど早死にしたいらしいなお前
344デフォルトの名無しさん:2015/01/13(火) 19:35:37.57 ID:A+1L71nc
>>342
自作じゃなくてフリーのテンプレ使っています
http://www.coolwebwindow.com/template/public.php
あとhttp://ri-mode.com/rainbow/2014/06/11/simple_css_dropdown_menu/
のメニューを使わせてもらっています

ツールはMSのExpressionシリーズ(Blend4の仲間)を使っています。無料化されたので探してみてください
345デフォルトの名無しさん:2015/01/13(火) 20:09:24.19 ID:fFU9OuRs
C#スレなんだからここで宣伝続けたきゃソース公開しろよ
346デフォルトの名無しさん:2015/01/13(火) 21:01:47.74 ID:AKeCVrBf
しなくていいから消えて
347デフォルトの名無しさん:2015/01/15(木) 09:40:21.78 ID:V95QWGsJ
>>342
blogspot.com
ここでアカウント作れ
348デフォルトの名無しさん:2015/01/15(木) 10:34:10.16 ID:Dbge0Tem
ブログとは全然違うだろ・・・・・・
349デフォルトの名無しさん:2015/01/15(木) 14:30:38.22 ID:ORcxK7jY
blogger なら自由度高い
十分ホムペとして通用するよ
350デフォルトの名無しさん:2015/01/15(木) 14:37:43.60 ID:WLm8ZLzH
>ホムペ
351デフォルトの名無しさん:2015/01/15(木) 14:42:15.22 ID:IiuUEEzW
ホムペマンの誕生の瞬間であった
352デフォルトの名無しさん:2015/01/15(木) 14:43:59.93 ID:Dbge0Tem
オープンソースプロジェクトのホームページに使えるサービスはずっと探してるな
こういうかっこいいページはどうやって作ってるんだろう
http://www.mapeditor.org/
353デフォルトの名無しさん:2015/01/15(木) 15:13:19.72 ID:k20V67BW
右下に書いてあるやん
354デフォルトの名無しさん:2015/01/15(木) 15:33:50.00 ID:DICmco6v
355デフォルトの名無しさん:2015/01/15(木) 15:36:41.59 ID:DICmco6v
>>342 >>352
スレチ

あっちでどうぞ
http://kanae.2ch.net/php/
356デフォルトの名無しさん:2015/01/15(木) 20:16:39.96 ID:sFrLm9vj
using System;

public static int[] list = {1,2,3};

var n = list.length;

これで
エラー
'System.Array' に 'length' の定義が含まれておらず、型 'System.Array' の最初の引数を
受け付ける拡張メソッドが見つかりませんでした。
using ディレクティブまたはアセンブリ参照が不足しています。

と表示されます
どこがおかしいのか分かりません
357デフォルトの名無しさん:2015/01/15(木) 20:33:57.72 ID:yTCJBhR9
目が悪いのか?
358デフォルトの名無しさん:2015/01/15(木) 20:34:03.27 ID:5kvrGtaT
C#はJava原人じゃないんで
359デフォルトの名無しさん:2015/01/15(木) 20:52:44.51 ID:r4XhfXoN
もう一度var n = list.length;って打てばVisual Studioが教えてくれるよ
360デフォルトの名無しさん:2015/01/15(木) 23:09:03.00 ID:ojV8YXVD
>>356 lengthじゃなくてLength
361デフォルトの名無しさん:2015/01/15(木) 23:46:08.32 ID:jCapVwH9
スレチだったら済まない、CsvHelper使ったことある人いる?
http://joshclose.github.io/CsvHelper/

これでCSVを自分のクラスにマッピングするときに
CsvClassMap<T>というabstractクラスを継承しろってことになってるんだけど、
いくら探してもこのパッケージ内にこのCsvClassMapがそもそも存在しないように見える。
using CsvHelperしてもサジェストに出てこないし、
オブジェクトブラウザーで中を見ても、確かに無い。

でもこれ使ってる人をググると普通にこれで使えてるみたいだし、
GitHub覗いてみたらこのクラスは存在するし、
試しに少し昔のバージョンを入れてみたけど変わらずだし、わけわかんなくなってきた…。

ちなみに私のスキルレベルは、C#をちゃんと触るのは今日が初めてレベル。
他の言語の素養はあるので、概ね理解していろいろ調べてるつもり。
362デフォルトの名無しさん:2015/01/15(木) 23:53:12.31 ID:v2twkO80
using CsvHelper.Configuration;
363デフォルトの名無しさん:2015/01/15(木) 23:58:23.24 ID:jCapVwH9
>>362
それでもダメなんだよ…

ググったりGitHubを見る限り、確かにCsvHelper.Configurationの下にいるはずなんだが
オブジェクトブラウザーで見ると、その下には
CsvHelper.Configuration
├CsvConfigration
└CsvConfigrationException
の二つの要素しか無い。

つい5日前に修正されたりしてるから、何かやらかしてるのかと疑って
半年前のバージョンを入れても同じだった。
364デフォルトの名無しさん:2015/01/16(金) 00:04:40.77 ID:zayw9HUQ
>>363
Nugetでバージョン2.10.0入れてみたけど
CsvClassMapってクラス普通にある
365デフォルトの名無しさん:2015/01/16(金) 00:16:52.72 ID:lMiMEz1x
>>364
おお、わざわざ試してくれてありがとう。
じゃあ俺の環境だけなんかおかしいんだろうな。

ちなみに、最初はVS2012のメニューにデフォで入ってるNugetから入れて(2.10.0)、
そのあと一度消して、パッケージマネージャーコンソールから2.7.0を入れてみた感じ。

ありがとう、とりあえず入れて再起動消して再起動とかいろいろ試してみることにするよ…。
366デフォルトの名無しさん:2015/01/16(金) 00:28:00.63 ID:lMiMEz1x
まだ解決してないけど、このライブラリのパスらしきものが
CsvHelper.2.10.0\lib\net20\CsvHelper.dll
ってなってるから、.NetFramework2.0用のになってて機能が少ないのかなーと疑ってる。
win7だからデフォで3.5が入ってるはずだけど、どこかの設定で2.0扱いなんだろうか…
367デフォルトの名無しさん:2015/01/16(金) 00:43:41.85 ID:lMiMEz1x
やはりnet20になっていたのが原因で、4.5用を参照してほしいのだが
参照が変わってくれる方法がわからない。

ので、このパスに4.5用を置き換えてしまうというひどいゴリ押しをしたところ、
無事CsvClassMapが見つかりました…。
根本解決してないけどいったん自己解決とします。ありがとうございました。

どなたかNugetしたライブラリのFrameworkバージョン参照の左右する要因が
わかるかたが居ましたら教えてください…。
ちなみにcsprojと同フォルダに生成されたpackages.configを覗いてみたところ、
ちゃんとtargetFramework="net45"になってました。ここを40や35にしてもダメだった。
368デフォルトの名無しさん:2015/01/16(金) 01:48:26.38 ID:dn4hhy1Q
>>360
ありがとうございます。
本当に気付きませんでした
369デフォルトの名無しさん:2015/01/17(土) 16:36:52.44 ID:dhp2WV1i
>>366,367
.NET 3.0、3.5はCLRは2.0のままだからライブラリは2.0用のを使う
.NET 4.5を入れて、VSのプロジェクトの設定を変えないと4.5用のは使われないだろ
でも、4.5って4を置換してしまうんだよね
370デフォルトの名無しさん:2015/01/18(日) 04:21:03.44 ID:LPhlZ9GX
>>369
win7はデフォで4.5までの勘違いだったので、4.5まで入ってた。

ライブラリのフォルダはnet20,net30,net40と用意されてるので
各段階で使ってくれそうなものなんだけどなぁ。

それはさておき、ひとまずその「CLR」とやらについて理解すればよさそうかな。
調べてみる、ありがとう。
371デフォルトの名無しさん:2015/01/18(日) 06:48:11.05 ID:vYre8goe
CLR≒.NET Frameworkって程度の意味しかないぞ
>>369はどっちかと言えばBCLの話のような気がする
372デフォルトの名無しさん:2015/01/18(日) 07:19:37.42 ID:MPT8mUCE
同じじゃねーだろ
ASP.NETのアプリケーションプールの「.NET」の誤表記が
混乱を招いたために「CLR」に訂正されてんのに
同じとかマジキチ
373デフォルトの名無しさん:2015/01/18(日) 08:13:19.47 ID:B8dPlRlQ
dictionaryに、stringをキーとして自作クラスを放り込んで使っています。
C++ではmapに放り込んでた自作クラスをデストラクタでdeleteしてたんですが、C#ではプロセス終了で勝手にdeleteしてくれるって認識で問題ないでしょうか?
374デフォルトの名無しさん:2015/01/18(日) 08:20:52.28 ID:sNaTaheH
そうでもない
375デフォルトの名無しさん:2015/01/18(日) 08:54:14.96 ID:YQ/T1PKN
>>373
スタックとstaticフィールドから参照を辿っていけば、オブジェクトはツリーを構成してると考えられる
そのツリーから一旦外れると、プログラムからはもうそのオブジェクトにアクセスする手段はない
そうなったオブジェクトはGCによって自動的に検出されて削除される
つまり、他のところから参照されてなければ、DictionaryがGCされるタイミングで一緒にGCされる
376デフォルトの名無しさん:2015/01/18(日) 08:59:36.09 ID:wO+wr/rb
関係ありそうで質問と関係ないクソレスする明日ぺ
377デフォルトの名無しさん:2015/01/18(日) 09:20:08.48 ID:CCXSPGR2
プロセス終了時にデストラクタは呼ばれない
従ってデストラクタが呼ばれる事を保証したい場合はusing使え
378デフォルトの名無しさん:2015/01/18(日) 09:23:01.91 ID:vYre8goe
それデストラクタとは言わないぞ
379デフォルトの名無しさん:2015/01/18(日) 09:23:53.24 ID:YQ/T1PKN
>>377
CLRが正常終了する限りは呼ばれるよ
プロセスが異常終了するときには呼ばれないことがあるけど、
その場合はusingもfinallyもファイナライザ(デストラクタ)も、
もっと言えばCriticalFinalizerObjectのファイナライザすらも呼ばれない
380デフォルトの名無しさん:2015/01/18(日) 09:40:04.01 ID:T4pSBaJb
>CLRが正常終了する限りは呼ばれるよ
>プロセスが異常終了するときには呼ばれないことがあるけど

この馬鹿はいったい何を言ってるんだろう
381デフォルトの名無しさん:2015/01/18(日) 09:51:21.86 ID:YQ/T1PKN
>>380
試してみたら?
それともCLRとプロセスの区別が理解できてないのかな?
厳密に言うともう一つのレイヤーとしてAppDomainも区別するべきなんだけど、
大抵はCLRと一対一だからあまり気にする必要はない
382デフォルトの名無しさん:2015/01/18(日) 10:12:22.18 ID:YQ/T1PKN
・AppDomainが正常終了→CLRが正常終了→プロセスが正常終了
 この場合は ○ファイナライザ、○finally(=using)、○CriticalFinalizerObject.Finalize、○C++のデストラクタ
・AppDomainが強制終了→CLRが正常終了→プロセスが正常終了
 この場合は ×ファイナライザ、×finally(=using)、○CriticalFinalizerObject.Finalize、○C++のデストラクタ
・CLRが強制終了→プロセスが正常終了
 この場合は ×ファイナライザ、×finally(=using)、×CriticalFinalizerObject.Finalize、○C++のデストラクタ
・プロセスが強制終了
 この場合は ×ファイナライザ、×finally(=using)、×CriticalFinalizerObject.Finalize、×C++のデストラクタ

まとめるとこうなる
もちろんfinallyに意味がないわけじゃなくて、すぐに解放処理を行えばそれだけ強制終了に巻き込まれる可能性が低くなるわけ
383デフォルトの名無しさん:2015/01/18(日) 10:13:45.86 ID:sNaTaheH
本当に呼ばれないと困るものは
exitで呼んでもらう
384デフォルトの名無しさん:2015/01/18(日) 16:51:33.28 ID:olpTk661
>>375
>DictionaryがGCされるタイミングで一緒にGCされる
同時にGCされる保障はないだろ

そもそも.NETではデストラクタ実行のタイミングは不定であって
自分で後処理する必要があるならIDispoable実装して正しく呼ばれるようにしろって話だ
385デフォルトの名無しさん:2015/01/18(日) 18:36:52.91 ID:wXCrDAs4
IDispoable
386デフォルトの名無しさん:2015/01/18(日) 18:41:57.93 ID:RIcPSvtC
この手の話は.NETが出始めの頃の入門書にはちゃんと書いてあるものが多かったね。
387デフォルトの名無しさん:2015/01/18(日) 19:15:13.55 ID:xTVffeg8
ただIDisposableを正しく実装しているものをあまり見た記憶がない
388デフォルトの名無しさん:2015/01/18(日) 19:32:24.03 ID:KCbWE0/4
確かに
389デフォルトの名無しさん:2015/01/18(日) 19:36:20.33 ID:k4kja4YC
えっ?LINQ以外はちゃんとDisposeしてるだろ普通
390デフォルトの名無しさん:2015/01/18(日) 19:49:14.81 ID:asVmvkSg
TaskだからDisposeしないもん!
391デフォルトの名無しさん:2015/01/18(日) 19:51:06.35 ID:xTVffeg8
完全に間違ってるわけではないが
太鼓判押せないような実装がググると3番目に早くも登場する・・・
http://zecl.hatenablog.com/entry/20080226/p2
392デフォルトの名無しさん:2015/01/18(日) 19:53:42.50 ID:T1+MJDlw
IDispoableはアンマネージドコードのリソース開放手段ってことになっているけどね
マネージドだけならGCに任せろってことなんだろうか?
393デフォルトの名無しさん:2015/01/18(日) 20:22:06.11 ID:+O7FMjZM
>>392
アンマネージコードじゃなくてアンマネージリソースな
この場合のアンマネージリソースというのは必ずしもウィンドウハンドルのように
プラットフォームのネイティブなリソースというわけではなく、
解放タイミングをGC任せにできないリソース的なもの一般を指す
たとえば処理開始時に一時的にstaticフィールドにオブジェクトが登録されて
それが終わったらメモリリークを防ぐためにDispose呼んで登録解除させないといけないような処理をするクラスがあったとしたら
そのインスタンスはアンマネージリソースと考えられる
394デフォルトの名無しさん:2015/01/18(日) 22:30:48.89 ID:YVtDUNQq
>>391
どんな問題があるのか教えて。
395デフォルトの名無しさん:2015/01/19(月) 01:41:36.01 ID:TxtFW98x
個人的には
・lock(this)
・Dispose内ではlockしているのに、他のObjectDisposedExceptionをスローするメソッド内ではlockしてない
の2点が気になった。

前者はlockにおけるパターンの話なので今回はどうでもいい。
後者はIDisposableをスレッドセーフにしたいなら、
ObjectDisposedExceptionをスローする全メソッドでもlockしてDisposeの実行を阻止しておかないと
メソッドの実行中に別スレッドからDisposeできてしまうので破綻する。
396デフォルトの名無しさん:2015/01/19(月) 08:27:22.41 ID:eQbtjaRR
IDisposableがロックを必要とするかは要件次第なのに、コメントもなくロックしてんのもいくない
397デフォルトの名無しさん:2015/01/19(月) 15:44:01.31 ID:skbVpfat
そもそもなんのためにlockしてるんだろうな。
クラス自身をスレッドセーフに作るなら話は別だが、無条件にやるような事じゃないし、
無条件にスレッドセーフにする気がないなら意味はない。
ファイナライザのタイミングが非同期な事から微妙に思い違いをしたのかな?
398デフォルトの名無しさん:2015/01/19(月) 20:53:34.03 ID:S6NhZW8x
ファイナライザのスレッドでデッドロックが発生したらどうなるの?
399デフォルトの名無しさん:2015/01/20(火) 00:39:13.74 ID:uh/WEfIT
C#プロジェクトに既存追加でC#フォームの.cs追加したらフォーム追加されるはずだよね?
VS2010はそれでいけたはず。
だけどVS2013はソースは追加されるけどフォームじゃなくてただのソースとしか認識しない。
マークもフォームのマークになってないし。
ダブルクリックしてもフォームは開かなくてソースが開くだけ。
同じ人いる?
400デフォルトの名無しさん:2015/01/20(火) 01:12:05.61 ID:d2Q8+WfP
>>399
System.Windows.Formsの参照を追加してないなんて間抜けなオチじゃないよね?
401デフォルトの名無しさん:2015/01/20(火) 14:36:18.13 ID:FQ6ZWpD+
黙ってトンズラかよ
みっともねえ奴だな
402デフォルトの名無しさん:2015/01/20(火) 21:46:04.87 ID:uh/WEfIT
>>400
もちろん、それはないと思う。
プロジェクトには他のフォームもあってちゃんと動いてるから。
今自宅なんで会社行かないと実際には見れないけど。

とりあえず新規でフォーム作って、追加したいcsとデザインcsの内容を丸々コピペしたら何とかいけたんで。
レスありがとう。

>>401
俺に言ってる?
君みたいに昼からネット出来るほど暇な人間じゃないから。
君、仕事もしてないプー太郎か?
こっちは汗水たらして働いてるんだから夜しかネット見れないんだよ。
くだらん書き込みでスレ汚ししないでちょっとは社会のためになる事しろ。
403デフォルトの名無しさん:2015/01/20(火) 21:58:25.49 ID:tmzshQQd
>>400-401は同一人物なんだけどねw
別にどうでもいいけど。

社会のためってw
君は社会のため(笑)に無料で勤労奉仕してるのかもしれないが、普通は人が働くのは自分の私利私欲を満たすため。
世のため人のため(笑)はポエマー系の自己陶酔か、せいぜい言ってもついでのこと。
馬鹿じゃないの。
404デフォルトの名無しさん:2015/01/20(火) 22:07:24.49 ID:pE35F5iH
Formとして開かれるかどうかは.csprojに書かれてるから消して再作成で正解
405デフォルトの名無しさん:2015/01/20(火) 22:11:04.31 ID:tmzshQQd
っていうか気に障ったなら悪かったけど、>>401みたいに書いたのは
俺なら掲示板、特に2chみたいな人が多いところに質問を書いたら
最低1時間ぐらいはレスがないか確認するから。

そのぐらい煮詰まった状況だから質問してるし、そうなら一刻も早く問題を解決したいと思うから。
それが仕事ならなおさら。
406デフォルトの名無しさん:2015/01/20(火) 22:39:18.57 ID:mp2703SQ
普通は一刻も早く解決したい問題を掲示板に書き込んでレス待ちしたりしません
407デフォルトの名無しさん:2015/01/20(火) 22:44:32.11 ID:xzrs5cc2
まして2chなんか・・・
408デフォルトの名無しさん:2015/01/21(水) 00:19:30.44 ID:9MeOdkdg
最近煽っていくスタイルの人増えたね
409デフォルトの名無しさん:2015/01/21(水) 04:12:59.61 ID:4WIjvzZ5
簡単なカードゲーム作る場合に知っておいた方がいいメソッドと処理を適当でいいので教えて下さい
410デフォルトの名無しさん:2015/01/21(水) 07:22:35.22 ID:e6Du7UL/
まずは本で基本的なデータ構造とアルゴリズムとAIを勉強しろ
描画とか入力に使うような.NETの機能ははっきり言ってどうでもいい
そんなものは必要になってから調べれば十分
411デフォルトの名無しさん:2015/01/21(水) 11:52:49.38 ID:4WIjvzZ5
>>410
ありがとうございます
お勧めの書籍があれば教えて下さい
分かりやすいヤツがいいです
412デフォルトの名無しさん:2015/01/21(水) 12:07:21.48 ID:r7KA7H6t
命令口調クンの言うことなんか聞いちゃだめw

アルゴリズムこそ必要な時(そんな時は何年に1度しかないw)に調べればそれで十分だし
今時データ構造って発想が20年ずれてる
413デフォルトの名無しさん:2015/01/21(水) 12:10:31.52 ID:r7KA7H6t
だいたい、知らない人にいきなり命令口調でああしろこうしろとのたまうような奴が
どんな人間か、ちょっと想像力を働かせればわかるでしょw
414デフォルトの名無しさん:2015/01/21(水) 12:19:43.17 ID:XB2BqeJs
丁寧口調で何の情報も出さないとかw
415デフォルトの名無しさん:2015/01/21(水) 12:20:33.08 ID:XB2BqeJs
だいたいカードゲームなんてデータ構造がほとんど全てだろうに・・・
416デフォルトの名無しさん:2015/01/21(水) 12:24:39.19 ID:n9HGlj5T
まれにUNOを言い忘れるAIつくってくれ
417デフォルトの名無しさん:2015/01/21(水) 12:25:58.20 ID:qABZ5Od3
ここまで耳を傾けるに値するレスなし
418デフォルトの名無しさん:2015/01/21(水) 12:59:03.24 ID:4WIjvzZ5
http://www.codereading.com/algo_and_ds/

ざっとググってみたのですが、データ構造とアルゴリズムって
こういう内容の事ですか?
このページ読むのって意義ありますか
419デフォルトの名無しさん:2015/01/21(水) 13:36:33.63 ID:7gG9jU5j
とにかくさっさと作り始めて、詰まったら詰まるたびに調べる、
これが全ての正しい作り方だよ

仕事ならそうじゃないけど、趣味ならこれでいい

>>418
実際使うだろう情報がごく一部と、
基礎教養として知っておいた方がよく、いつか使うだろう情報が一部と、
基礎教養ではあるいつまでも使わない可能性の高い情報が大部分
420デフォルトの名無しさん:2015/01/21(水) 13:40:25.30 ID:4WIjvzZ5
>>419
ありがとうございました
421デフォルトの名無しさん:2015/01/21(水) 13:41:40.93 ID:2ayQ13oI
もちろん意味はあるだろうけど
必要に迫られていないときに見てもあまり実感がわかない気がする

個人的な興味や趣味で作るんなら
調べるべき内容も見当が付かないようなものはとりあえず作り始めてみるのをおススメ
完成すればそれでいいし、つまづくならつまづいた点をググったり聞いたりして見直せばよい
完成しても動作が遅いとかの不満点がでてそれを解消するために構造見直したりアルゴリズム見直したりすればよい
422デフォルトの名無しさん:2015/01/21(水) 13:43:59.49 ID:2ayQ13oI
あらもろかぶり
423デフォルトの名無しさん:2015/01/21(水) 15:42:46.23 ID:XB2BqeJs
一般的なものじゃなくてカードゲームに関連したデータやアルゴリズムな
C#以外の解説サイト(Flashが多い)みながら移植すると早く覚えられる
424デフォルトの名無しさん:2015/01/21(水) 22:54:50.33 ID:e6Du7UL/
パズルやカード作りたがるような人って成果物よりもプログラミング自体を目的にできる人だと思うから
基礎からやってもいいんじゃない?
その手のゲームを作るのを楽しめるならアルゴリズムやデータ構造の勉強は同じくらい楽しいよ
425デフォルトの名無しさん:2015/01/21(水) 23:32:43.41 ID:vtBK6gj6
IEnumeratorの自力実装すら必要になることはあんま無いのに平衡木とか絶対に使わん
というかほとんどの場合組み込み型で十分
426デフォルトの名無しさん:2015/01/22(木) 00:07:20.71 ID:6/WUC/sn
結局、コンピュータって、人間がすることを高速且つ正確にやってくれるだけだから、
自分がコンピュータになったつもりで、プレイヤーの操作に対してどう動くかを考える
それをそのままコードに書いてみればいい。最初はそれで十分。
427デフォルトの名無しさん:2015/01/22(木) 06:25:50.52 ID:QZdxOwsq
10の40乗ぐらいパターンを手入力するだけだよね
428デフォルトの名無しさん:2015/01/22(木) 07:41:01.33 ID:6/WUC/sn
>>427
全パターンをデータで用意する実装をするのか?そうじゃないだろ?
アルゴリズムの”手続き”って、別にそれをコンピュータがやろうが人間が手作業でやろうが、
速さと正確さが違うだけ、という話。
429デフォルトの名無しさん:2015/01/22(木) 07:56:06.52 ID:CNlyFltm
以上、鳥は地虫の視界を知らず、逆もまた然りという小話でした
430デフォルトの名無しさん:2015/01/22(木) 08:01:32.39 ID:96GHEWiS
人間は手続きでものを考えないし
常にパターン認識に頼ってるからな
431デフォルトの名無しさん:2015/01/22(木) 17:36:43.75 ID:bl3HtdF9
ものを考える人が倒れたよ

パターン
432デフォルトの名無しさん:2015/01/22(木) 18:20:38.32 ID:55sdXS+Z
new StringBuilder().Insert(0, "w", 7).ToString();
433デフォルトの名無しさん:2015/01/22(木) 22:40:51.94 ID:UnI2W8j2
"w"
434デフォルトの名無しさん:2015/01/28(水) 17:16:11.87 ID:NY0MHdg2
String^ selectedEmployee = (String^)(ComboBox1->SelectedItem);

^ってどういう意味?
435デフォルトの名無しさん:2015/01/28(水) 17:26:36.94 ID:slxhZiXo
C++CLIは専用スレがある
436デフォルトの名無しさん:2015/01/28(水) 17:32:16.10 ID:969+z+pn
1123m4455566m889s
これ何切ればいいですか?
437デフォルトの名無しさん:2015/01/28(水) 17:54:21.30 ID:TGPi2B7q
日本語でお
438デフォルトの名無しさん:2015/01/28(水) 18:04:22.61 ID:52xyq1S9
何切ればいいかって麻雀かよ
439デフォルトの名無しさん:2015/01/28(水) 18:05:46.65 ID:fP6N1Ce3
日本語おかしい奴多すぎw
440デフォルトの名無しさん:2015/01/28(水) 18:10:24.11 ID:7LwetE8W
取り敢えず5を切って様子を見る
441デフォルトの名無しさん:2015/01/28(水) 18:18:11.52 ID:969+z+pn
>>440
ありがとうございます
442デフォルトの名無しさん:2015/01/28(水) 19:32:04.32 ID:kckrowtY
理牌ソート順が不親切
1 1 2 4 4 5 5 5 6 8 8 3m 6m 9s
443デフォルトの名無しさん:2015/01/28(水) 19:33:08.98 ID:kckrowtY
回答書いてなかった

漏れなら 9s 切る
444デフォルトの名無しさん:2015/01/28(水) 21:21:53.16 ID:H6HgeodE
>>442
6m分けてるけどイーペーコー無視?
9s切りは同意。
445デフォルトの名無しさん:2015/01/28(水) 21:30:05.41 ID:eMyM1i22
6m残すとどこがイーペー?
446デフォルトの名無しさん:2015/01/28(水) 21:33:32.29 ID:969+z+pn
今更言うと怒られそうですがスレ間違えました
あと4455566pのミスです
447デフォルトの名無しさん:2015/01/28(水) 23:27:16.74 ID:NY0MHdg2
FormのLoad時にComboに"Name"と"Value"を入れて、
SelectedIndexChangedの時に"Value"を保存するって書いてるんだけど、
Comboのアイテムを変えずにデフォのValueを取得すると
その型が"System.Data.DataRowView"ってのが取得できて
値が取得できないんだけど、どうすればいいの?
448デフォルトの名無しさん:2015/01/28(水) 23:36:49.56 ID:CFOgWxxn
半端に俺用語使わないで
ComboはComboBoxでいいとして、
NameとValueを入れるって具体的にどういう操作?
デフォのValueを取得って具体的にどういう操作?
アイテム変えたら望ましい値が取れるの?
449デフォルトの名無しさん:2015/01/28(水) 23:46:53.95 ID:NY0MHdg2
あーすみません。
comboBoxのselectedValueはGuid型が入るんです。
FormのLoad時に入れてます。

マウスでComboBoxの選択アイテムを変えると正しいGuid型が取得できるのですが、
FormのLoad時に、そのまま選択アイテムを変えずに、
(正確にいうと、たまたまselectedIndex=0のアイテムが選択したいアイテムだった。)
comboBox.SelectedValueを取得するとGuid型ではなく、System.Data.DataRowView型が取得される為困っているという状況です。
450デフォルトの名無しさん:2015/01/29(木) 00:23:53.49 ID:cejRXMiV
インターフェイスの使い所がイマイチよく分かりません
作ったり継承したりは出来るんですが、実際のゲーム中で
どのように使うのかが分からない・・・
なにかインターフェイスを使う練習みたいなのはありませんか?
451デフォルトの名無しさん:2015/01/29(木) 00:27:41.32 ID:y6zSBPNz
練習なんかしなくても
継承したいクラスが2つ以上になったらお前はどうするんだ
その時インターフェースに頼ることになる
嫌でも
452デフォルトの名無しさん:2015/01/29(木) 00:32:52.62 ID:cejRXMiV
>>451
つまりその辺が分かってないんです
C言語しかやった事ないんで、インターフェイスと継承がよく分からんのです
453デフォルトの名無しさん:2015/01/29(木) 00:34:01.68 ID:cejRXMiV
よく分からんってのは書けないって事ではなく

継承しろ、とかAというメソッドを持つインターフェイスを作って実装しろ
とか局所的な事言われたらできるけど、実際のゲームで使えって言われたら
どう使えばいいのか分からない感じなんでうs
454デフォルトの名無しさん:2015/01/29(木) 00:46:20.92 ID:/U+NLJDr
使わなくていいなら使わなくていいよ
455デフォルトの名無しさん:2015/01/29(木) 03:13:36.91 ID:TT2nDia1
そのうち「あれ?ここで受け取るクラスにこのメソッドが絶対あることがわかってないと困るやん?」
って思う日が来るさ、来るまで使わなくていいよ
456デフォルトの名無しさん:2015/01/29(木) 03:32:10.52 ID:1yNl5XWr
>>453
業務アプリしか作った事ないけど
武器という基底クラスを継承して剣クラスや弓クラス…
攻撃などキャラクター共通の振る舞いをインターフェイス…
みたいな感じじゃないの?

こうゆうのってデザパタも色々あるだろうし正解は無いと思うよ
アプリ毎に実装の仕方はバラバラみたいな事も聞くし
とりあえず自分の思うように作ってみれば良いじゃない
457デフォルトの名無しさん:2015/01/29(木) 09:00:08.52 ID:cejRXMiV
>>454-456
ありがとうございます。
とりあえず、分からないまま進んでみて、必要になったら再度調べてみようと思います
458デフォルトの名無しさん:2015/01/29(木) 23:15:14.72 ID:JFc1jEhn
一番分かり易いのがIEnumerable<T>じゃないか?

実装してればforeachできるよって奴
459デフォルトの名無しさん:2015/01/29(木) 23:35:43.22 ID:TT2nDia1
用意されたインターフェースを実装するだけだと、
インターフェースの本質を理解しないまま終わっちゃいそうな気がする
460デフォルトの名無しさん:2015/01/29(木) 23:46:18.20 ID:DDZscCYq
IDispose
を実装していればusing(var hair = new husahusa()){ }
できるようになる
461デフォルトの名無しさん:2015/01/29(木) 23:54:44.19 ID:D0jUH4f8
var hair = new HairMock()
462デフォルトの名無しさん:2015/01/30(金) 00:20:31.68 ID:/fUJpSUx
IEnumerableとIDispose以外に用意されているIFでよく使うものがあれば教えて下さい
463デフォルトの名無しさん:2015/01/30(金) 00:29:52.89 ID:IKGpQS3u
IComparer
ListのSortで使う。
464デフォルトの名無しさん:2015/01/30(金) 01:21:44.98 ID:/fUJpSUx
>>463
listのソートって基本的にLINQ(OrderByとかThenBy)使うのかと思ってました
465デフォルトの名無しさん:2015/01/30(金) 01:28:58.99 ID:vPM9OO6W
OrderByでもIComparer<T>使うがな

クエリ式は知らん
466デフォルトの名無しさん:2015/01/30(金) 01:40:13.86 ID:L50QtsSh
最近プログラムを覚え始めたばかりで恐縮ですが
Flot型を文字列にキャストして小数点2桁を含めて可能な限り続く桁数を表示させたいのですが
Floatに8桁以上の値を入れた時点で値が丸め込まれてしまってどうにも上手くいきません…
続く限り無限の桁を表示させるソースが公開されていれば教えてもらえませんか
467デフォルトの名無しさん:2015/01/30(金) 02:01:41.59 ID:VHV9Z44l
floatの有効桁は7桁ぐらい
それ以上の精度が必要ならdoubleで
468デフォルトの名無しさん:2015/01/30(金) 02:04:37.13 ID:VHV9Z44l
あ、範囲より精度重視ならdecimalがいいのかな
469デフォルトの名無しさん:2015/01/30(金) 06:54:15.49 ID:lTWCXrI2
ひょっとして:ToString
470デフォルトの名無しさん:2015/01/30(金) 07:36:18.05 ID:XjEPmedf
C#のクラスプログラミングで、コアな部分とUIの部分とをしっかりと分離しておけば、
UIの部分で.NETの環境がいくら変わっても、コアな部分との再連携さえしてやれば、再生可能だと思うんですが、
これって常識的な考え方でしょうか。

ASP.NET 4.5系と、ASP.NET 5(vNext)とで、大きくUI部分のフレームワークが変わってしまうらしいんで、
後々にまで使えるようにするには、しっかりと分離する構造にするしか策はないですよね。
471470:2015/01/30(金) 07:43:21.87 ID:XjEPmedf
>コアな部分とUIの部分とをしっかりと分離

しっかりと、カプセル化をやっておこうと考えています。
472デフォルトの名無しさん:2015/01/30(金) 07:59:48.58 ID:BzgyBeS/
Webのモデルなんてたいがい大して複雑なモデルではないし
ある程度UIの構造を前提にして作るもんだから、DBとORM以外全とっかえでいいよ
それよりサブシステムを丸ごと捨てて差し替えても大丈夫なようにある程度の範囲で縦割りするのが大事
473470:2015/01/30(金) 09:34:12.93 ID:XjEPmedf
>>472
ありがとうございます。

>DBとORM以外全とっかえでいいよ
アプリのコアな部分を大切にして、UIは何にでも(たとえtuiでも)とっかえが利くようにしたいと思います。


>それよりサブシステムを丸ごと捨てて差し替えても大丈夫なようにある程度の範囲で縦割りするのが大事
サブシステムって、Webのフレームワークのことでしょうか?
縦割りとは、DBとORM(クラス関係・・・私の言うところのコアな部分)と、Web UIとの切り離しのことでしょうか。
474デフォルトの名無しさん:2015/01/30(金) 13:19:46.03 ID:cv0bPviH
続く限り無限の桁を表示したいって話だからStringですら厳しいんじゃない?
ググった限りだとStringBuilderが20億バイトだって話だけど、無限には遠く及ばないし。
475デフォルトの名無しさん:2015/01/30(金) 14:51:34.28 ID:X02ag5jj
>>466
FloatなりDoubleなり浮動小数点型に数値を入れた時点で、特定の桁数以下の情報は切り捨てられてる
それをどう表示しようが、持ってる情報以上の桁数は出てこない

整数同士の割り算のひっ算をプログラムにするようにすれば
1桁ずつ続く限りの表示をしてくことは可能

public static void PrintFlaction(int num,int den,int decimal_places){
int mod;
if(den==0){
System.Console.WriteLine("INF");
return;
}
System.Console.Write("{0}.",num/den);
mod = num%den;
for(int i=0;i<decimal_places;i++){
mod *= 10;
System.Console.Write("{0}",mod/den);
mod %= den;
}
System.Console.WriteLine();
}

public static void Main(string[] args)
{
PrintFlaction(1,3,100);// 1/3 を小数点以下100桁表示
PrintFlaction(5,7,100);
PrintFlaction(2,2,100);
PrintFlaction(2,0,100);
Console.ReadKey(true);
}
476デフォルトの名無しさん:2015/01/30(金) 19:26:32.38 ID:2O05TJiO
昨日、C#で作ったexeとdllをILMERGEしたところ、コマンドは成功するのに
出力ファイルがサイズ0になってしまいます。
昨年ごろ、よくILMERGEしていて、全く問題なく出来ていたのですが。
そのC#は今年になって何も変更していません。ということは
.NET Frameworkか何かがWindowsUdateか何かで変わったのでしょうか?
みなさんILMERGE問題なく使えていますか?
477デフォルトの名無しさん:2015/01/30(金) 20:52:27.03 ID:cv0bPviH
つい最近初めてC#触って、VS2012落として、ILMERGEも初めて落としてきて使ってるけど
何も問題ないよ。
478デフォルトの名無しさん:2015/01/30(金) 20:57:01.78 ID:fa+fE2P9
.netのバージョン変えたんじゃないの?
479デフォルトの名無しさん:2015/01/30(金) 21:45:21.98 ID:mdFgRgTF
>>477
つい最近でなぜに VS2012 なの?
VS2013 Community か冒険家なら VS2015 CTP とかじゃないのか?
480デフォルトの名無しさん:2015/01/30(金) 22:09:09.35 ID:cv0bPviH
>>479
他人の作ったものを引き継ぐというクソ業務で、念のため元のと同じのにしておきたいって理由と、
2013の商用利用のセーフ範囲がよくわかんなかったから念のため2012にしておいた。
まぁ、使い道は社内のちょっとしたツールだからあまり心配してないけど。
481デフォルトの名無しさん:2015/01/30(金) 22:37:56.23 ID:mdFgRgTF
>>480
ああ、仕事ならしょうがないね
納得したわ
482デフォルトの名無しさん:2015/01/31(土) 13:43:02.03 ID:rOfMOZLe
Replaceメソッドを使用し、下記strから2,5,8と複数の文字を消したい場合
スマートな書き方はありますか?


string str = "123465789"
str= str.Replace("2", "");
str= str.Replace("5", "");
str= str.Replace("8", "");
483デフォルトの名無しさん:2015/01/31(土) 13:51:49.58 ID:Zp0atq7E
Regex.Replace(str, "[258]", "")
484デフォルトの名無しさん:2015/01/31(土) 14:14:21.40 ID:rOfMOZLe
>>483
ありがとうございます。早速やってみます!
485デフォルトの名無しさん:2015/01/31(土) 16:57:42.32 ID:pjmSNE++
複数のテキストボックスとボタンがあり
ボタンを押すと「ファイルを開く」ダイアログボックスを表示され
選択されたファイルのパスがテキストボックスに表示されます。
ボタンクリック時のイベントには同じような処理が入るため
共通化したいがテキストボックスに値をセットしてあげる部分がそれぞれで違うため
どう共通化してあげればいいのかわかりません。
どなたかご教授お願い致します。
486デフォルトの名無しさん:2015/01/31(土) 17:04:59.67 ID:Zp0atq7E
private void button1_Click(object sender, EventArgs e)
{
  OnButtonClick(textBox1);
}
private void button2_Click(object sender, EventArgs e)
{
  OnButtonClick(textBox2);
}
487デフォルトの名無しさん:2015/01/31(土) 17:15:27.37 ID:pjmSNE++
>>486
ありがとうございます
バカな質問をして失礼しました・・・
488デフォルトの名無しさん:2015/01/31(土) 18:16:43.71 ID:Aa4houZl
ん?俺はわからん
489デフォルトの名無しさん:2015/01/31(土) 18:49:34.07 ID:K0xM/bq9
クリックイベントを登録する関数を同じのにすればいいんじゃね?
490デフォルトの名無しさん:2015/02/01(日) 02:19:03.64 ID:s9ype9zZ
最後にやりたい事だけ匿名メソッドで渡すようにする手もある、初心者向けじゃないけど
491デフォルトの名無しさん:2015/02/01(日) 04:40:59.93 ID:RmYenSV2
public interface OnUpdate {
 void onUpdate();
}
というインターフェイスと
public void addWatchTarget(,OnUpdate callback) {}
というメソッドを定義して、
hoge.addWatchTarget(new OnUpdate{
 public void onUpdate(){
  /*ここにアップデートした時の処理*/
 };
});
と書こうとしたのですが、エラーが出てしまいます。
一つのインターフェイスの為だけにクラスを作りたくないし、javaで言うところの
b.setCallback(new Runnable() {
 public void run() {
  ...
 }
});
の様に書きたいのですが、c#ではどのように表記すればよろしいでしょうか。
492デフォルトの名無しさん:2015/02/01(日) 05:00:58.39 ID:82CyRnjV
>>491
イベントを使う

コールバックで値を返したいのならFuncデリゲートを使う
493デフォルトの名無しさん:2015/02/01(日) 05:10:47.88 ID:RmYenSV2
>>492
ありがとうございます。

すいません、例が悪かったです。インターフェイスにはn個のメソッドが宣言されています。
public interface OnUpdate {
 void onUpdate();
 void onFiled(int errorCode);
}
hoge.addWatchTarget(new OnUpdate{
 public void onUpdate(){};
 public void onFailed(int code){};
});

c# interface method arguments 等でググったのですが
「インターフェイスを実装したクラスを作って、それをインスタンス化すればいいよ!」という回答ばかりで、インターフェイスを直接引数に与える方法は見つかりませんでした。
494デフォルトの名無しさん:2015/02/01(日) 06:15:56.60 ID:WbEj9GF4
>493
C#にはそのような文法はありません。
addWatchTarget(new MyCallbackSet{
 Update = ()=>{},
 Fail = ()=>{}
});
としてください。
大体JAVAだって、そこはラムダで書くだろ普通
b.setCallback(() -> {
  ...
});
495デフォルトの名無しさん:2015/02/01(日) 06:17:18.46 ID:RmYenSV2
>>494
ありがとうございます。勉強になります
496デフォルトの名無しさん:2015/02/01(日) 06:48:17.57 ID:wbarHwVK
おまえらなんでこんな朝早くからこのスレにいるの?
さすがにおかしいだろ・・
497デフォルトの名無しさん:2015/02/01(日) 07:39:25.95 ID:Rluj7UaD
まだ土曜の31時じゃないか
498デフォルトの名無しさん:2015/02/01(日) 07:50:15.90 ID:OM+Gcdnk
高階関数が使える言語ならいちいち名前付けずに
addWatchTarget(() => { /* Update */ }, error => { /* Fail * });
とするのが普通だと思う
もしくは、実装に少々手間はかかるが
addWatchTarget(() => { /* Update */ }).OnFailed(error => { /* Fail * });
だね
一般的に>>494のような渡し方は格好悪いからあまりやらない
499デフォルトの名無しさん:2015/02/01(日) 08:07:40.39 ID:PJUlZZR8
2個ぐらいならそうかもね
500デフォルトの名無しさん:2015/02/01(日) 08:24:34.28 ID:sAQPzt4/
>>496
ソフトウェア従事者の多くは趣味プログラミング
もちろん俺を含むw
501デフォルトの名無しさん:2015/02/01(日) 10:20:20.00 ID:sjXjc1T+
趣味プログラマがC#スレにいるわけない
502デフォルトの名無しさん:2015/02/01(日) 14:12:41.88 ID:VQFaI0Rd
趣味ではない。
使命である。
503デフォルトの名無しさん:2015/02/01(日) 18:02:14.66 ID:s9ype9zZ
義務
宿命
運命
504デフォルトの名無しさん:2015/02/03(火) 10:15:18.44 ID:vbeiF6Sp
最近のC# 5.0あたりの紹介が充実している本って何がお薦めですか
505デフォルトの名無しさん:2015/02/03(火) 21:19:50.89 ID:eVaOlmBf
C# Language Specification Version 5.0
506デフォルトの名無しさん:2015/02/07(土) 04:24:26.14 ID:J39kTiaw
今度、ASP.NETのサーバコントロールを使うC#のプログラムをつくりたいと思っています。
Visual Studio 2010 proを持っていて、ASP.NETプログラムを作ったことがあるんですが、
無料のVS communityと、どちらを使えば良いんでしょうか。
悩みます。
507デフォルトの名無しさん:2015/02/07(土) 06:30:52.04 ID:L5zJgfED
ライセンスが許せば2013Communityでいいよ
Web Essentialsとかあるし
508デフォルトの名無しさん:2015/02/07(土) 13:55:50.70 ID:J39kTiaw
>>507
ライセンスの面では大丈夫です。やはり、新しいバージョンの方がいいですよね。
せっかく、VS 2010 PROを購入したのに、ちょっともったいなーい。
509デフォルトの名無しさん:2015/02/07(土) 14:06:21.77 ID:J39kTiaw
VS community 2013って、.NETフレームワーク 4.5.1に対応しているのですよね。(下記サイトを参考)
https://msdn.microsoft.com/ja-jp/library/bb822049%28v=vs.110%29.aspx

質問があります。

(1).NET 4.5.1をベースとしてASP.NETが動作するものだと思うのですが、(合ってますでしょうか)
そのASP.NETのバージョンは任意に選べるような仕組みなんでしょうか。
それとも、.NET 4.5.1内部にASP.NETは内包されているのでしょうか。

(2).NETフレームワーク4.5.1とIDE(VS community 2013)の関係がすっきりしません。community 2013単なるIDEだと思うので、
これをつかって.NET 2.0用のプログラムを開発することはできるのではないかと思うんですが、
どうして駄目なんでしょうか。

おねがいします。
510デフォルトの名無しさん:2015/02/07(土) 14:09:22.63 ID:L5zJgfED
両方とも2.0以降の任意のバージョンが選べる
511デフォルトの名無しさん:2015/02/07(土) 14:10:47.61 ID:eMOSZTzl
>>509
(1)IISの設定
(2)できるけどむしろなんで「どうして駄目なんでしょうか」なの?
512デフォルトの名無しさん:2015/02/07(土) 14:18:31.17 ID:M1n3dGF8
>>509
> (2).NETフレームワーク4.5.1とIDE(VS community 2013)の関係がすっきりしません。community 2013単なるIDEだと思うので、
> これをつかって.NET 2.0用のプログラムを開発することはできるのではないかと思うんですが、
> どうして駄目なんでしょうか。
勘違いしてる。VS2013自体が動くのに.NET Framework4.5.1が必要。作成するプログラムの対象フレームワークは選べる。
513デフォルトの名無しさん:2015/02/07(土) 15:36:06.44 ID:J39kTiaw
レスありがとうございました。

1、そもそも、VS community 2013(IDE)の動作に、.NET Framework4.5.1が必要であること。(>>512
2、IDEのプログラム開発では、.NET 2.0以上の任意のフレームワークを対象したプログラムを作れる。(>>510
3、ASP.NETの開発においては、(IDEというよりも)とくにIISで設定するASP.NETのヴァージョンが大事。(>>511 >>510

3については、aspxを処理するのは、IISですものね。IISで、処理できるASP.NETのバージョンを絞り込むということでしょうか。
古いバージョンのaspx(ASP.NET 2.0用)も動かしたいなとおもいまして。

2については、ASP.NETを開発する場合、IDEに内蔵されたWEBサーバ機能が複数のASP.NETのバージョンに対応しているのでしょうか。
514デフォルトの名無しさん:2015/02/07(土) 15:57:28.04 ID:o5egNras
foreach文でindexを取得するとき、
Select( (value,index)=>new{value,index})で取得できると思うんですが、
どういう処理がされているか教えていただけないでしょうか
515デフォルトの名無しさん:2015/02/07(土) 16:14:30.43 ID:ZvzmbQxk
public static IEnumerable<TResult> Select<TSource, TResult>(this IEnumerable<TSource> source, Func<TSource, int, TResult> selector) {
if (source == null) throw Error.ArgumentNull("source");
if (selector == null) throw Error.ArgumentNull("selector");
return SelectIterator<TSource, TResult>(source, selector);
}

static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector) {
int index = -1;
foreach (TSource element in source) {
checked { index++; }
yield return selector(element, index);
}
}
516デフォルトの名無しさん:2015/02/07(土) 17:06:07.21 ID:o5egNras
>> 515
ありがとう。直感的にだけど理解できました。
517デフォルトの名無しさん:2015/02/07(土) 18:53:41.86 ID:EjCk1lJH
>>508
そのもったいない精神、命取りになるぞ。
単純に比較して良いものを使えば良い
518デフォルトの名無しさん:2015/02/07(土) 22:46:54.91 ID:j6Fd7dob
>>513
IISアプリケーションプールの設定で選択できる
大抵は最新Verのにしときゃ動くがな
519デフォルトの名無しさん:2015/02/08(日) 05:09:40.91 ID:kndmEONy
>>517
レスありがとう。
VS communityをインストールします!

>>518
アプリケーションプールってありましたね。
変わった概念だなと思いました。
しばらく触っていないんで、すっかり遠い記憶になっていました。
520デフォルトの名無しさん:2015/02/08(日) 17:29:33.54 ID:s109R4ug
インスタンスを自分自身で破壊することはできますか?
変数にnullを設定するのでなく、
特定のメソッドを呼び出したら自動的に参照を外すようにしたいのですが。

var obj = new Hoge();
obj.Destroy();
print(obj); //null
521デフォルトの名無しさん:2015/02/08(日) 17:35:45.48 ID:5CTZvvRC
無理
522デフォルトの名無しさん:2015/02/08(日) 17:40:56.82 ID:4MKIaqhP
意味わかんないw
523デフォルトの名無しさん:2015/02/08(日) 17:41:00.54 ID:N2lxbw9z
>>520
何のためにそんなことするの?
たぶん、IDisposable実装してDispose()を呼び出すのがやりたいことに近いと思うけど。
524デフォルトの名無しさん:2015/02/08(日) 17:47:37.15 ID:/5XFyazc
>>523
それやったとしてもマネージド部分はGC任せなんでは?
525デフォルトの名無しさん:2015/02/08(日) 17:54:36.05 ID:N2lxbw9z
>>524
まぁ、そうなんだけどね。
526デフォルトの名無しさん:2015/02/08(日) 17:57:49.48 ID:5CTZvvRC
ローカルスコープではそんなこと気にしなくてもJIT/インタープリターが不要と判断した時点で参照は切れる
527デフォルトの名無しさん:2015/02/08(日) 18:07:44.64 ID:4RGx9zBt
>特定のメソッドを呼び出したら自動的に参照を外すようにしたいのですが。

デリゲートの話だとばっかり思っていた。
528デフォルトの名無しさん:2015/02/08(日) 18:21:32.57 ID:Wac/ZBhZ
無理。事情を話してくれないなら以上。
529デフォルトの名無しさん:2015/02/08(日) 18:34:03.57 ID:w6gtl+gB
>>520
var obj = new Hoge(&obj);
みたいにしとけばできると思う
530デフォルトの名無しさん:2015/02/08(日) 18:35:29.59 ID:w6gtl+gB
>>529
C++ と勘違いした、忘れてくれ
531デフォルトの名無しさん:2015/02/08(日) 18:57:37.53 ID:s109R4ug
520です。
Destroyを呼び出すとアプリケーション内で
そのオブジェクトが消滅することを確定させたいです。

nullのセットし忘れとか防ぎたいんです。
532デフォルトの名無しさん:2015/02/08(日) 19:00:51.80 ID:P0HWFm4I
533デフォルトの名無しさん:2015/02/08(日) 19:01:37.12 ID:P0HWFm4I
間違えたw
>>531
>>528
534デフォルトの名無しさん:2015/02/08(日) 19:03:01.86 ID:s109R4ug
複数のオブジェクトがそれを参照しているわけで、
それらすべてにnullを設定していかないといけないんでしょうか?
535デフォルトの名無しさん:2015/02/08(日) 19:23:48.94 ID:JJBPIwXc
参照があれば生きてるしなければそのうち死ぬから大丈夫
536デフォルトの名無しさん:2015/02/08(日) 19:23:52.99 ID:BaY7N69f
>>531
なんか根本的に考え違いをしてるようにしか思えんけど...
まあ、

pubic event EventHandler SetMeFree = () => {};
....
public void Destroy() { SetMeFree(); }

とかしておいて、

private Destroyable _hoge;
....
void Hoge()
{
....
  _hoge = new Destroyable();
  _hoge.SetMeFree += () => { _hoge = null; };
....
}

とか(笑)
537デフォルトの名無しさん:2015/02/08(日) 19:28:22.42 ID:orDJkmnf
スコープから抜ける前にobjにnull代入しないと
消えないと勘違いしてるのか?
538デフォルトの名無しさん:2015/02/08(日) 19:30:22.43 ID:8Z+tyYct
>>534
当然
だって、その参照している人はまだそのオブジェクトにアクセスするかもしれんでしょ?終了処理だとかで。

だから、あくまでも参照している所の、不要となったタイミングでnullを設定するようにすべき
539デフォルトの名無しさん:2015/02/08(日) 19:33:07.31 ID:Pwx84Qtq
Twitter乗っ取られたんだが奪い返すことは可能?
540デフォルトの名無しさん:2015/02/08(日) 19:34:46.24 ID:Pwx84Qtq
Twitter乗っ取られたんだが奪い返すことは可能?
541デフォルトの名無しさん:2015/02/08(日) 19:38:02.11 ID:WC6wMHS0
>>534
Hogeインスタンスを参照してるオブジェクトが自作クラスなら可能
そうでないなら無理
542デフォルトの名無しさん:2015/02/08(日) 19:42:35.35 ID:N2lxbw9z
null代入よりも、出来るだけローカルスコープでオブジェクトを保持するようにしようよ。
いちいちnull代入するコードは例外とかに弱いし。
543デフォルトの名無しさん:2015/02/08(日) 20:05:43.65 ID:s109R4ug
ローカルで処理できたら聞いていません。

オブジェクトの参照は勝手に破棄できないから、
マネージャークラスを作って監視しないといけないんですね。
544デフォルトの名無しさん:2015/02/08(日) 20:09:01.54 ID:/5XFyazc
>>531
IDisposable実装してないクラスだったら放置プレーで良いんじゃないの?
IDisposableならusing使えばエエだよ
545デフォルトの名無しさん:2015/02/08(日) 20:10:13.49 ID:/5XFyazc
>>543
じゃ、放置プレーで。
.NETオブジェクトはどMだから大丈夫だよw
546デフォルトの名無しさん:2015/02/08(日) 20:11:21.97 ID:TwaU4H9o
そうじゃなくて、そもそも同じインスタンスを、プログラマが管理できなくなるぐらい多くの変数で
参照してるのが間違ってるんだよたぶんw
547デフォルトの名無しさん:2015/02/08(日) 20:18:08.90 ID:/Wbs4GAm
>>546
それなw
GCの無い言語をやったことがないか
やってはいるが中途半端にしか修めて来なかった者の末路だな
548デフォルトの名無しさん:2015/02/08(日) 20:26:17.79 ID:s109R4ug
分かった。
Nullっぽい挙動させればいいんだ。
そうすればマネージャー作らなくていいし。
549デフォルトの名無しさん:2015/02/08(日) 20:30:50.26 ID:i1ECf4Ro
単なるObjectDisposedExceptionの予感
初めから見えた答えだったのにずいぶん遠まわしでしたね
550デフォルトの名無しさん:2015/02/08(日) 20:32:26.32 ID:5CTZvvRC
WeakReferenceというのもある
551デフォルトの名無しさん:2015/02/08(日) 20:56:06.86 ID:/5XFyazc
低レベルなオイラは話についていけん orz
552デフォルトの名無しさん:2015/02/08(日) 21:18:45.13 ID:3dFU6zTj
>>548
nullっぽい挙動って何?
IDisposableを実装するのか、もしくは単にIsValidプロパティみたいなフラグを作るとか?
553デフォルトの名無しさん:2015/02/08(日) 21:27:52.36 ID:/WGb+9gP
結局>>549 ってことだよな
Streamとかといっしょ
554デフォルトの名無しさん:2015/02/08(日) 21:53:59.43 ID:s109R4ug
>>549
ObjectDisposedExceptionとかそういうんじゃないです。
>>552
単にプロパティつけるか、
自分自身をラップするかとか考え中です。
555デフォルトの名無しさん:2015/02/08(日) 22:14:38.72 ID:i1ECf4Ro
ああ、分かってますよ
初心者には違うように思えるんでしょうね
556デフォルトの名無しさん:2015/02/08(日) 22:22:41.25 ID:/WGb+9gP
>>554
もっと具体的な状況がわからないと
他のクラスも参照持ってるのに勝手に破棄して良くて、破棄後のアクセスはバグとしない状況がわからん
開放時にDisposedイベントが起こるやつはあるけど

単にプロパティをつけるって結局IDisposableにのフラグを公開してるだけだし
557デフォルトの名無しさん:2015/02/08(日) 22:52:52.09 ID:s109R4ug
あるターゲットを引数に取ったアクション?イベント?クラスを登録していき、
あるタイミングでターゲットにダメージを与えたりする。

ダメージが致死量になると、destroyが発生する。
後続が同じターゲットをとっていた場合は、
すでに破壊されているのでそのターゲットはnullになっていて欲しいです。

じゃあ、IDisposableというの勉強してみます。
558デフォルトの名無しさん:2015/02/08(日) 23:03:15.93 ID:/5XFyazc
>>557
その用途だとIDisposableは関係無いな。
何したいのか分からんがオブジェクトの破棄じゃなくオブジェクトのプロパティで良い気がする。

それ以前にオブジェクト指向に毒され杉だねw
559デフォルトの名無しさん:2015/02/08(日) 23:25:17.70 ID:Wac/ZBhZ
>>557
破壊された状況=nullという設計をした時点で詰んでる
蓄積ダメージを元にIsDestroyedプロパティを実装するんだな
>>558毒され過ぎ同意見w
560デフォルトの名無しさん:2015/02/08(日) 23:30:30.06 ID:/WGb+9gP
>>557
ゲームみたいなものか

nullにしなくてもターゲットに破壊フラグをつけて、攻撃時に判定すればいい
むしろ、破壊時にそのターゲットを対象にしているアクションをすべて消すほうがわかりやすい

どれにせよ、ゲームに不慣れなオブジェクト思考持ち込みすぎると破綻するぞ
561デフォルトの名無しさん:2015/02/08(日) 23:35:17.71 ID:/5XFyazc
個別のインスタンス作らなくても、何らかのデータ構造で管理出来そうだが。
562デフォルトの名無しさん:2015/02/08(日) 23:35:36.87 ID:4RGx9zBt
大昔に有った”インベーダーゲーム”みたいに、数が少なくなると処理を早くしたいのかな
563デフォルトの名無しさん:2015/02/08(日) 23:36:14.84 ID:rZV+tnJ8
Reactive Extensions使えよ
564デフォルトの名無しさん:2015/02/08(日) 23:41:40.30 ID:/5XFyazc
良くわかってないのに非同期処理を使うとデッドロックしまくりになりそうw
565デフォルトの名無しさん:2015/02/08(日) 23:56:50.95 ID:s109R4ug
ゲーム作ってみて分かったんですが、
オブジェクト指向を変に意識すると
基礎から先が複雑になってきて、わけわからなくなってきちゃいますね。

オブジェクトが気を効かせてやるべき処理をやってくれんだけど、
手続き的な記述を減らすと逆に分かりにくくなったり。

プログラムって難しいですね。
566デフォルトの名無しさん:2015/02/09(月) 00:10:34.20 ID:h/1LxHEV
ゲームだと全く関係ないオブジェクトの数値が計算式に絡んできたりするからきれいに作るのは難しい
567デフォルトの名無しさん:2015/02/09(月) 00:13:21.53 ID:AazwEOnB
全てをオブジェクト指向で作る必要はないし、向いてるところは使ったらいい
臨機応変て言葉知らないか
568デフォルトの名無しさん:2015/02/09(月) 00:22:02.87 ID:Ntbz6K3q
だーからオブジェクト指向の是非なんて大層は話じゃないってw
単に質問者がまともな設計ができないだけ。

だから何で同じインスタンスをプログラマが管理できないような数の変数で参照する必要があるんだってw
そんなの間違いなく質問者がそれが必用だと思い込んでるだけだと断言できる。
569デフォルトの名無しさん:2015/02/09(月) 00:25:23.82 ID:mz/setD5
趣味グラマなんで勘弁してください
570デフォルトの名無しさん:2015/02/09(月) 00:25:24.86 ID:AGlUXWbh
神様クラス
571デフォルトの名無しさん:2015/02/09(月) 00:42:15.74 ID:xxoZlwvR
(神クラス作っちゃ)いかんのか?
572デフォルトの名無しさん:2015/02/09(月) 01:12:20.86 ID:p5G7+fMc
八百万の神クラスとして責務を分割しよう
573デフォルトの名無しさん:2015/02/09(月) 06:30:28.87 ID:5xuX5Rg+
八百万の神クラスは
基底に神クラスを作って派生、じゃなくて完全に別々の神クラスにしたほうがいいのだろうか?
574デフォルトの名無しさん:2015/02/09(月) 06:53:51.77 ID:qcjAyEz2
みんなWeakReference使ってる?
575デフォルトの名無しさん:2015/02/09(月) 07:00:25.27 ID:7lZ37zN3
フレームワーク的なライブラリ作ってるんならともかく
アプリでWeakReference使うのは設計が破綻してる証拠
576デフォルトの名無しさん:2015/02/09(月) 07:02:07.62 ID:KnnpIsQe
>>572
8,000,000万のメソッドを持ったクラス?
577デフォルトの名無しさん:2015/02/09(月) 07:02:49.66 ID:s0dg7c6g
>>574
イベントハンドラに寿命短めのオブジェクトを追加しまくるときくらいしか使わない
GCは相互参照になってても効くし
578デフォルトの名無しさん:2015/02/09(月) 07:03:19.67 ID:KnnpIsQe
桁間違えたw
579デフォルトの名無しさん:2015/02/09(月) 08:07:57.32 ID:knlwFUV0
>>578
100億万円とか言っちゃう小学生いるよなw
580デフォルトの名無しさん:2015/02/09(月) 08:24:17.80 ID:iJdyGTL3
Microsoft、オープンソースの.NET実行エンジン「CoreCLR」を公開 | スラッシュドット・ジャパン オープンソース
http://opensource.slashdot.jp/story/15/02/08/0721252/
581デフォルトの名無しさん:2015/02/09(月) 10:13:18.20 ID:LQhyRrVo
>>576
やおよろずの神って知らんのか?
教養がないとそのようか反応になるのだな
582デフォルトの名無しさん:2015/02/09(月) 11:01:53.47 ID:41/w1wVG
いやいやw
この場合>>581のレスこそが一番教養が無いw
583デフォルトの名無しさん:2015/02/09(月) 12:04:48.04 ID:LQhyRrVo
>>582
おめー短大卒なめてんのか
584デフォルトの名無しさん:2015/02/09(月) 12:12:46.97 ID:cxy5oANg
馬鹿の代表だな
585デフォルトの名無しさん:2015/02/09(月) 12:20:39.02 ID:9fKE6Mq7
>>581
ネタジョークにマジレスすんなヨ
586デフォルトの名無しさん:2015/02/09(月) 12:43:01.03 ID:58HS4m5W
>>581
神クラスって知らんのか?
教養がないとそのような反応になるのだな
587デフォルトの名無しさん:2015/02/09(月) 12:48:28.24 ID:U/1UCdd/
まあ、教養ある奴はむやみに学歴持ち出さないしな
588デフォルトの名無しさん:2015/02/09(月) 13:47:23.34 ID:jsF3Jw1x
同級生も高学歴だからな
589デフォルトの名無しさん:2015/02/09(月) 14:19:43.51 ID:9fKE6Mq7
>>586
全知全能の神クラスだね。
八百万の神じゃ全てのものが神になってしまうので意味が違う。
590デフォルトの名無しさん:2015/02/09(月) 14:42:29.63 ID:jsF3Jw1x
IPv6対応が必要
591デフォルトの名無しさん:2015/02/09(月) 19:21:31.66 ID:1J4Ibh0j
唯一神はシングルトンにしとけよ
592デフォルトの名無しさん:2015/02/09(月) 19:40:41.41 ID:sBN76GX2
移民族
593デフォルトの名無しさん:2015/02/09(月) 20:59:58.55 ID:KnnpIsQe
>>591
abstractクラスになってるんで色々面倒な事が中東で起きてるんだが。
594デフォルトの名無しさん:2015/02/09(月) 23:10:46.63 ID:ImhpazP+
ばっか、あれはabstractじゃなくて仕様が既にバグだろ。無能営業の三枚舌。
595デフォルトの名無しさん:2015/02/09(月) 23:57:25.96 ID:bwEZbR4B
596デフォルトの名無しさん:2015/02/10(火) 07:00:29.60 ID:nFpM6d20
だから八百万の神クラスは基本クラスを作って派生させるか
完全に別個のクラスを作るのかが問題なんだって。
仮に基本クラス派生だとするとメンバーやIFは何を持たせるのかが問題。
597デフォルトの名無しさん:2015/02/10(火) 08:52:13.39 ID:Hs3TdF+4
カンブリア爆発
598デフォルトの名無しさん:2015/02/10(火) 10:08:25.50 ID:SW06GOy5
八百万の神はインスタンスが別なだけで同じクラスだったり
599デフォルトの名無しさん:2015/02/10(火) 10:11:41.31 ID:2yjbLZwe
すべてのクラスには神が宿っているから
それぞれのクラスを大切にしてあげてねみたいなフワフワした話じゃないのか
600デフォルトの名無しさん:2015/02/10(火) 11:15:02.50 ID:xEK50zds
神も人間も草木も虫も、基底クラスはObjectなのである
601デフォルトの名無しさん:2015/02/10(火) 12:00:06.44 ID:SW06GOy5
神はObjectなのかなあw
602デフォルトの名無しさん:2015/02/10(火) 12:02:55.08 ID:U2zkTKp9
神は、霊です。宇宙全体におよぶ
603デフォルトの名無しさん:2015/02/10(火) 13:05:13.45 ID:sO94tH0V
面白いと思って書いてんのかこれ?
八百万の最初のあたりで終わった冗談をなにぐだぐだやってんだか
604デフォルトの名無しさん:2015/02/10(火) 13:14:12.29 ID:2S9bXvZz
お、おう
605デフォルトの名無しさん:2015/02/10(火) 13:32:22.10 ID:I3Nqh774
(もともとの意味の)ヲタっていうか、コミュニケーション能力が欠如してる奴独特のノリだね。
きっとモニターの前で自分のレスに例の独特の引き笑いをしてると思うよw
気色悪い。
606デフォルトの名無しさん:2015/02/10(火) 13:44:51.87 ID:foI8NMh4
おっとそれ鏡だぜお兄さんw
607デフォルトの名無しさん:2015/02/10(火) 17:57:22.45 ID:QtCdRKur
>>605
ステレオタイプ馬鹿の典型だな
608デフォルトの名無しさん:2015/02/10(火) 17:59:05.02 ID:AMEUt00J
既に派生クラスに分化したオブジェクトに、簡単な刺激を加えるだけで基底クラスに!
609デフォルトの名無しさん:2015/02/10(火) 22:51:13.03 ID:etTOQNm8
Objectが自分で分化して勝手に育ってくれたらいいのに
610デフォルトの名無しさん:2015/02/10(火) 23:41:17.65 ID:Dn84JQPS
STAPオブジェクト
611デフォルトの名無しさん:2015/02/11(水) 11:10:33.06 ID:WZeVYUoD
>>610
var aStap = new STAP();
return aStap.Exist;

は、以下のプログラムと等価

return false;
612デフォルトの名無しさん:2015/02/11(水) 11:22:01.61 ID:uxm1HOmW
STAPはあります!
613デフォルトの名無しさん:2015/02/11(水) 11:22:56.46 ID:HV6QGBu9
もう休め
614デフォルトの名無しさん:2015/02/11(水) 12:23:52.58 ID:WZeVYUoD
c#のオブジェクト指向は、あくまでも型定義の拡張だから、Smalltalkのようなメッセージ指向の
使い方をしようとすると破綻する。

それ以前に底辺デジタル土方にオブジェクト指向は要らない。
615デフォルトの名無しさん:2015/02/11(水) 13:13:27.60 ID:nrJCL00/
いるだろ

なんぼ底辺でも
今のシステムVB6に置き換えろとか言われたら死ぬ
616デフォルトの名無しさん:2015/02/11(水) 13:17:28.95 ID:WZeVYUoD
>>615
VB6のIDEがVisual Studio並みの機能を持てば要らないのでは?

底辺デジドカの作る難解なオレオレOOスパゲティコードをメンテするよりVB6のが遥にマシ。
617デフォルトの名無しさん:2015/02/11(水) 13:17:46.71 ID:HV6QGBu9
理想的な結末じゃん
618デフォルトの名無しさん:2015/02/11(水) 13:35:21.06 ID:nrJCL00/
ハンドルの山に埋もれて死ね
619デフォルトの名無しさん:2015/02/11(水) 14:00:00.51 ID:XzdqNrda
C#が向かってるのはSmalltalk的なOOではなくイミュータブルなオブジェクト+関数だろ
ある意味COBOL的なスタイルだから「賢いオブジェクト」よりはドカタ向きだよ
620デフォルトの名無しさん:2015/02/11(水) 15:42:20.05 ID:+zb7i42P
>>616
そのまま底辺デジドカに埋もれてろよ
621デフォルトの名無しさん:2015/02/11(水) 16:08:48.33 ID:sK01Ui9b
オブジェクト指向って機能じゃなくて設計の考え方でしょ
別にVB6でもオブジェクト指向で設計してコード書くことはできる

メンテがつらいのはそもそも設計がおかしいか設計書が残ってないか設計と実装が合ってないかのどれか
622デフォルトの名無しさん:2015/02/11(水) 16:38:03.88 ID:CW8IIrT0
設計が学べるおすすめの書籍ってないかな
出来れば電子書籍化されてるもので
623デフォルトの名無しさん:2015/02/11(水) 18:38:32.87 ID:INE2YLdo
624デフォルトの名無しさん:2015/02/12(木) 23:37:57.90 ID:rbj/z20K
とりあえず、1ファイル1000行越えず構造化できてれば、なんでもいい
625デフォルトの名無しさん:2015/02/14(土) 11:56:10.36 ID:G8GjWWhK
wikiか何かによると、バッファオーバーラン問題で、Cプログラマをサイズ判定付きの言語に移行させるためにC#を作った部分もあると
でもサイズ判定→タイプセーフ→タイプセーフなのだ→intとint?は違うのだって、当初の目的忘れてやり過ぎじゃないの?

void OpenGate( int gatekey ) { }

int? mykey = null;
OpenGate( (int)mykey );

こんなことしてコンパイラ黙らせてもnullで実行時エラーが起きるのは同じだし、開発効率悪いだけで何の役にも立ってない
OpenGate( mykey ); これで実行時エラーが起きれば十分

mykeyのnullはRPGの旅人がまだ鍵を入手してない状態に相当し、鍵がなくとも旅人は存在しうる
OpenGateは鍵が必要な門で、gatekeyが必須という性質
鍵がなければ門を開けようとしてエラーになるのは正しい現象で、その現象は門の性質に由来するもの
(int)で旅人が自分でチェックするのは性質の所在がおかしい
626デフォルトの名無しさん:2015/02/14(土) 12:00:12.28 ID:pzGXmezT
・黙らせ方が間違ってる
・DB用に作った機能なので

お引取りを。
627デフォルトの名無しさん:2015/02/14(土) 12:02:08.71 ID:O6svWQnE
初心者あるある

自己批判の欠如
釈迦に説法
628デフォルトの名無しさん:2015/02/14(土) 12:07:28.56 ID:ISQup94G
必ずしも安全でない操作であることをプログラマに意識させることに役立ってるじゃないか
お前がそこでイラッとしたのがまさにその証拠だろ?
nullがタイプセーフじゃないのは典型的な普通の静的言語の大きな欠陥として昔から言われてることで、
そもそもそこが問題だと思うならHaskellとかガチな静的型に行くと幸せになれる
629デフォルトの名無しさん:2015/02/14(土) 12:12:42.89 ID:pzGXmezT
もっと言うと、NullableはC#じゃなく.NETの機能なんで
煽るなら.NETについて煽った方がよいと思います
630デフォルトの名無しさん:2015/02/14(土) 12:13:37.07 ID:G8GjWWhK
未設定を0や-1で代替すると値として0や-1が使えなくなる
日付の未設定を何かの日付で代替すると気持ち悪いことになる
別途未設定フラグを持って分岐処理すると開発効率が悪くなる
631デフォルトの名無しさん:2015/02/14(土) 12:13:44.33 ID:ISQup94G
>>629
そりゃちょっと無理があるな
C#の構文糖衣で使う前提で#のために導入された機能だ
632デフォルトの名無しさん:2015/02/14(土) 12:19:11.45 ID:G8GjWWhK
>>628
必須エラーは正しい現象であって、エラーが起きるから安全なんだよ
まさかエラーが起きないことを安全だと勘違いしている?
633デフォルトの名無しさん:2015/02/14(土) 12:39:26.91 ID:ISQup94G
>>632
俺がこう思ってるかどうかはともかく、一つの考え方として聞いてくれ
if (x == null) return hoge((int)x); else return null;
例えばこれ、hogeを呼ぶ時点でxがnullでないことは明らかだろ? キャストは辻褄合わせでしかない。
ガチな静的型の関数型だと、このような操作を行うとき
コンパイラが強制するべきなのはif (x==null)のチェックの方だと考える。
そして条件がtrueになった文脈であればxの値はint?ではなくint型として扱うことができ(同じ変数名xを使うかどうかは別にして)、
逆にfalseの文脈ではxの値にアクセスしようとするとコンパイルエラーになるわけ。
634633:2015/02/14(土) 12:40:52.27 ID:ISQup94G
すまんx==nullじゃなくてx!=nullだな
635デフォルトの名無しさん:2015/02/14(土) 13:21:42.57 ID:atTTe3b7
C#はデフォルトNull禁止にしてほしかった…

なんでもかんでもJavaのマネしやがって
後発なんだから不味い場所も分かってただろうに
636デフォルトの名無しさん:2015/02/14(土) 13:52:15.21 ID:Uz4yE4Ox
バカでもデリゲートが理解できるサイトを教えて下さい
637デフォルトの名無しさん:2015/02/14(土) 14:50:07.87 ID:atTTe3b7
c# デリゲート

ってgoogleでやる知恵すらないんだったら
どこ見てもムダだと思うよ
638デフォルトの名無しさん:2015/02/14(土) 15:33:45.11 ID:7wkGcJdL
デリゲートよりC# Func Actionで検索した方がわかりやすいんじゃないかと思う
639デフォルトの名無しさん:2015/02/14(土) 15:39:01.44 ID:j/TRKjQz
>>635
ディフォルト値として null より適切な値があるなら提案してみたら?
640デフォルトの名無しさん:2015/02/14(土) 15:46:41.76 ID:QZdIRAT/
たぶんそれでミスを減らせると思ってるんだろうけど、
恐らく実際に起こることは、単に発見困難なバグを増やすだけ。

こんな当たり前のことが分からない人って絶望的にセンスないと思う。
641デフォルトの名無しさん:2015/02/14(土) 16:03:50.02 ID:atTTe3b7
>>639
ユーザーに設定強制すればいいじゃない。
配列は基本コレクションで。

>>640
減るよ!減らないわけがない。
コンストラクタで設定し忘れとか想像して言ってるんだったら心配ない
初期値なしで宣言して、コンストラクタが終了する時点までに初期化されてりゃいいんだよ。
パスを辿ってコンパイル時に判断するのも今時ならそんなに難しくないだろう

あとセンスとかいうな臭いスレに帰れ
642デフォルトの名無しさん:2015/02/14(土) 16:23:20.88 ID:coEfqUtE
>>641
> ユーザーに設定強制すればいいじゃない。

class X { }
class Y: X { }
class Z: X { }

X x;
if( ){
x = new Y;
} else {
x = new Z;
}

みたいな奴はどうするのさ?
643デフォルトの名無しさん:2015/02/14(土) 16:31:18.78 ID:atTTe3b7
>>642
ん?何が問題?

今だって、C#もJavaもそれで初期化されてるって判定してくれるだろ。
かたっぽ抜いたらエラーになるはず。

ようは初期化前に変数にアクセスできなきゃいいんだ
644デフォルトの名無しさん:2015/02/14(土) 16:39:52.73 ID:coEfqUtE
>>643
ごめん、お前さんが何を主張してるのかさっぱりわからんわ
645デフォルトの名無しさん:2015/02/14(土) 16:53:08.05 ID:bEUa3key
要するにローカル変数みたいに未割り当て云々って事かね

コンストラクタまでに強制されるとなぁ…
結局確保しておいても割り当てない事もあるのだし
引数が.NETにはじかれるようなオブジェクトは作れないし

C++++でunsafeが有るような言語で堅牢性を追求するのもなんだ
マネーコードとはいえコンパイラオプションが関の山かね
646デフォルトの名無しさん:2015/02/14(土) 16:56:39.89 ID:ocCjNIfb
それでnullによる問題が改善するなら安いもんだと思うがなぁ。
どうせGCだし、多少無駄なコンストラクタが呼ばれることくらい誤差のうちだろう。
647デフォルトの名無しさん:2015/02/14(土) 16:59:55.40 ID:atTTe3b7
Nullを許容するときだけMyClass? hoge; みたいに?つけて宣言するとかだったらよかった。

てかもうScalaとかKotlinとかその他もろもろ
デフォルトNull禁止の言語は山ほどあって上手くいってるのに
何を今更…
648デフォルトの名無しさん:2015/02/14(土) 17:22:46.61 ID:bEUa3key
ヘルスバーグも参照型とnull許容は独立させるべきだったとか言ってたっけ?
しかしながら前例が山ほどあっても、C#ほどには流行ってないのが全てかもね

ってかいつのまにジどっか行ったんだよ、Moneyコードじゃねーか
649デフォルトの名無しさん:2015/02/14(土) 17:44:57.24 ID:PHmS6feJ
デフォルトnull禁止の言語ってイニシャライズでコストかかるオブジェクトとかどうしてんの?
いやかけんなって話になるんだろうけどさ

3値論理の論争みたいに収束はしなさそうだな
650デフォルトの名無しさん:2015/02/14(土) 18:40:36.04 ID:PfOF9s4M
DataContract使えよ
stringの初期値が""とか気持ち悪いわ
651デフォルトの名無しさん:2015/02/14(土) 18:42:45.24 ID:PfOF9s4M
Code Contractsの間違いっす
652デフォルトの名無しさん:2015/02/14(土) 19:14:23.68 ID:Hs1Wk7so
>>635
nullを禁止するのなら元から断たねばならぬ。
NULL撲滅員会の非公認常任理事としては、データベースの実テーブルからNULLを排除するべきだと切に願う。
653デフォルトの名無しさん:2015/02/14(土) 19:19:05.29 ID:5NFDstGd
そーいうのはC#スレ以外でやってくれ
せめてRoslynで実装してからまたおいで
654デフォルトの名無しさん:2015/02/14(土) 19:31:51.69 ID:Hs1Wk7so
NullableってRDBのためじゃないの?
655デフォルトの名無しさん:2015/02/14(土) 19:38:54.98 ID:atTTe3b7
.NetがEntityFrameworkという翼を得た今
DB用でもNullableそんなにいらないかなーと思うことしきり
656デフォルトの名無しさん:2015/02/14(土) 19:38:58.97 ID:5NFDstGd
オプション引数
657デフォルトの名無しさん:2015/02/14(土) 21:23:59.15 ID:wmohZ6Di
3値論理は神の論理
658デフォルトの名無しさん:2015/02/14(土) 21:27:39.65 ID:XSOXuxtr
そんなnullが嫌いなのか・・・
659デフォルトの名無しさん:2015/02/14(土) 21:39:23.90 ID:Kyzudol/
ぬるぽ
660デフォルトの名無しさん:2015/02/14(土) 21:52:10.16 ID:3m1iUNVk
カッ
661デフォルトの名無しさん:2015/02/14(土) 22:00:51.92 ID:G8GjWWhK
DB用ならDBNull.Valueが入らないと寸法が合いませんわな
662デフォルトの名無しさん:2015/02/14(土) 22:44:29.39 ID:atTTe3b7
EntityFrameworkでもDBNullなんだっけ?
663デフォルトの名無しさん:2015/02/14(土) 23:05:58.61 ID:7wkGcJdL
int?の逆バージョンのMyClass!みたいなのくれ
664デフォルトの名無しさん:2015/02/14(土) 23:17:21.10 ID:3m1iUNVk
構造体でも使ってろ
665デフォルトの名無しさん:2015/02/14(土) 23:24:37.22 ID:hvR2TAiE
構造体型のtupleが導入されるから、何でもやり放題だよ!
666デフォルトの名無しさん:2015/02/14(土) 23:51:41.04 ID:G8GjWWhK
>>662
昔からその手のもんは検討もせずスルーすんのがプロのデフォなので…
他人が考えた自動処理はどっかで行き詰る
特にメーカー品は徹底的にプリミティヴな非連結だよ
667デフォルトの名無しさん:2015/02/15(日) 00:08:56.52 ID:Mh0LkIrH
ごめん日本語がわからん
もう寝るべき
668デフォルトの名無しさん:2015/02/15(日) 08:21:19.64 ID:n2M7TY52
>>666
DataGridViewも非連結で使うんかいな。
669デフォルトの名無しさん:2015/02/15(日) 09:29:10.77 ID:bNigTbab
>>668
それは使うだろうけど
従来の連結ものと違って非連結と変わらんシンプルなコピーだし

メーカーは今でも1個1個セットかもしれんが
下手するとグリッド使わずテキストボックス並べて単体のスクロールバーに反応して中身入れ替えたりするし
670デフォルトの名無しさん:2015/02/15(日) 09:42:02.67 ID:ABT28a22
ユーザー側の偉いおっさんが気まぐれで口走ったことを真に受けて
クソ面倒臭いだけのアホみたいな作業をして
出来上がった後で当のおっさんもなんでこうしたか忘れてる意味不明な仕様のアプリが
利用者にファックファック言われながら10年運用されるんだよな…
671デフォルトの名無しさん:2015/02/15(日) 11:38:32.24 ID:uxAoEDAd
長く使えることが果たして安く上がる方法なのかはよく分からん
10年前に考えた10年後は予想の通りだったろうか
672デフォルトの名無しさん:2015/02/15(日) 12:22:18.18 ID:n2M7TY52
>>671
システムなんて日々増改築だろう。
で、最終的にスパでメンテ不能になってスクラップ&ビルド。
673デフォルトの名無しさん:2015/02/15(日) 17:46:35.05 ID:kp5uGiP4
コンパイラーが起動しない
674デフォルトの名無しさん:2015/02/15(日) 18:33:46.27 ID:bX6frV1s
Don't mind.
675デフォルトの名無しさん:2015/02/15(日) 20:26:10.15 ID:7wjOE94w
どんマイケル
676デフォルトの名無しさん:2015/02/16(月) 11:39:56.92 ID:a73kbkcR
ハーレールーーーヤ
677デフォルトの名無しさん:2015/02/16(月) 16:25:31.51 ID:lTedmFF3
C#で動的にLinqを使うにはどのような手段があるでしょうか
678デフォルトの名無しさん:2015/02/16(月) 16:40:21.58 ID:yoAtWWbZ
>>677
LINQ 動的クエリ
ぐぐれ粕野郎
679デフォルトの名無しさん:2015/02/16(月) 16:43:05.90 ID:q1qAzibN
式木でggr?
680デフォルトの名無しさん:2015/02/16(月) 17:32:50.01 ID:lTedmFF3
すいません、言葉足らずでした。
式木で自前のクラスライブラリ作って実装は済んでいます。
他に面白い方法などないか聞いてみただけです。
681デフォルトの名無しさん:2015/02/16(月) 19:16:53.25 ID:lEWN8Yek
>>680
これの第6章とか?

http://www.amazon.co.jp/dp/toc/4048867741/ref=dp_toc?_encoding=UTF8&n=465392
>第6章 式によるコード生成
>6.1 式指向プログラミング
>6.2 LINQ式でダイナミックメソッドを作る

買ってみたけど余り読んでないww
682デフォルトの名無しさん:2015/02/18(水) 13:26:39.80 ID:zJtQK+E+
デリゲートとかいうのに関して質問があります

delegate string StringHandler();

static void Main(string[] args)
{
string user01 = "";
string user02 = "";

List<StringHandler> userList = new List<StringHandler>();
userList.Add(delegate { return user01; });
userList.Add(delegate { return user02; });

user01 = "ABC";
user02 = "DEF";

foreach (StringHandler user in userList) {
Console.WriteLine(user());
}

続く
683デフォルトの名無しさん:2015/02/18(水) 13:30:57.99 ID:zJtQK+E+
これでforeachで取り出されたList内には"ABC"と"DEF"が入ってるらしいのですが
原理が分かりません

デリゲートでぐぐると、「メソッドの実行を関節的に行う」
「C言語でいう関数ポインタである」という説明を見ました。

これってつまり

{ return user01; });

ここはuser01というフィールドの参照をリターンしているという事なんですか?

ちなみにUnityなんですが、Debug.Logで出力してもdelegate型名がログウィンドウに
表示されるだけで、中身が確認できませんでした
684デフォルトの名無しさん:2015/02/18(水) 13:38:39.43 ID:pmjO4Zhz
デリゲートとは直接関係ない
外部変数のキャプチャとか表現される機能
匿名メソッド/ラムダ式で外部の変数が使用される場合、
その変数はメソッドのローカル変数じゃなくてコンパイラが生成するクラスのフィールドになる
簡略化すればこんな感じ
class anonymous {
&nbsp; &nbsp; public string value;
}
static void Main() {
&nbsp; &nbsp; anonymous _user01 = new anonymous() { value = "" };
&nbsp; &nbsp; StringHandler handler = delegate { return _user01.value; };
&nbsp; &nbsp; _user01.value = "ABC";
&nbsp; &nbsp; handler();
}
685デフォルトの名無しさん:2015/02/18(水) 13:55:24.96 ID:zJtQK+E+
>>684
キャプチャ機能は一応、目を通しました
匿名メソッド内で上位スコープの変数が使われている場合、その変数の延命が行われる、とか

あと

string x;
x = userList[0];

とかできないのもよく分かりません
stringにキャストできませんとか言われます
userList[0]で匿名メソッド「{ return user01; }」が動いてuser01の中身(string)を返すのでは・・・?
686デフォルトの名無しさん:2015/02/18(水) 13:57:06.77 ID:zJtQK+E+
すみません
>user01の中身(string)を返すのでは・・・?

返すのはstring型ではなく、「参照」ですよね?
その中身とかどうやって見れるんでしょうか
687デフォルトの名無しさん:2015/02/18(水) 14:01:57.13 ID:pmjO4Zhz
自分で型宣言してるじゃん
> List<StringHandler> userList = new List<StringHandler>();
userList[0]が返すのはStringHandler型であってstring型じゃない
StringHandler型つまりデリゲート型は特別に()演算子で委譲されたメソッドを実行できる
StringHandler handler = userList[0];
string result = hander();
688デフォルトの名無しさん:2015/02/18(水) 14:06:25.57 ID:zJtQK+E+
>>687
アホな質問ですみませんが、delegate使ってメソッド呼ぶのと
普通にメソッド呼ぶのではキャプチャ機能以外で何が違うんでしょうか
689デフォルトの名無しさん:2015/02/18(水) 14:07:28.88 ID:zJtQK+E+
昨日から結構デリゲートについてunityで動かしたりしてるんですが
デリゲートというものについての理解が困難です・・・

参考にしているのは
ttp://ufcpp.net/study/csharp/sp_delegate.html
主にここです
690デフォルトの名無しさん:2015/02/18(水) 14:20:50.73 ID:pmjO4Zhz
>>688
そこのSelectメソッドをデリゲート無しで「普通にメソッド呼ぶ」ってどうやって?
条件毎にSelect1メソッド、Select2メソッド、って書いていく?
691デフォルトの名無しさん:2015/02/18(水) 14:40:41.80 ID:zJtQK+E+
>>690
そこもちょっとよく理解できていませんが、

>StringHandler handler = userList[0];
>string result = hander();

当初の目的としてはここが知りたかったんです

今まで
string result = userList[0];
としていましたが、delegate型が帰るので、一度その型で受けてから
hander();と書いてメソッド実行してreturn user01の型であるstringで受ける、
という認識でいいんですよね
692デフォルトの名無しさん:2015/02/18(水) 14:48:06.17 ID:pmjO4Zhz
もちろん変数を介在させなくても良いけどね
string result = userList[0]();
693デフォルトの名無しさん:2015/02/18(水) 15:07:30.27 ID:zJtQK+E+
>>692
() ←は、メソッド(匿名メソッド)をコールしているから必要、という事ですよね?
それが分かっていなかったようです。
ありがとうございました
694デフォルトの名無しさん:2015/02/18(水) 21:17:59.57 ID:TtSVwZYj
分からない内は確かに分からんよね
ただ、デリゲート自体は関数ポインタの親戚な上に、ないとマトモにプログラム組む気起きないぐらい基本的な言語仕様なので、初心者の範疇やな

ラムダ式(匿名デリゲート)、キャプチャも慣れるまでイミフだけど、他の言語でも類似機能ある頻出な言語仕様系だからしっかり理解するのオススメ。
キャプチャ理解したら、キャプチャとforeachの仕様変更も理解するとモアベター。ふぁいと
695デフォルトの名無しさん:2015/02/18(水) 22:09:55.86 ID:FJC9eT5Z
関数ポインタというよりはオブジェクト指向の移譲パターンを簡略化したものと見做すのが本来正しい
実体はオブジェクト参照+関数ポインタに他ならないけど
696デフォルトの名無しさん:2015/02/18(水) 22:13:52.34 ID:ZsWSUqlJ
マルチキャストの立場は
697デフォルトの名無しさん:2015/02/18(水) 22:22:22.31 ID:7aMv74vx
>>695
それは(自分で言ってるように)そう「見做してる」だけ。
正しいって何だよ。
698デフォルトの名無しさん:2015/02/18(水) 22:59:55.75 ID:FHXOTJ+B
delegateは、「委任する」だから移譲で良いんじゃない。
699デフォルトの名無しさん:2015/02/18(水) 23:58:48.33 ID:AVZb1Mt2
eventも含めるとさらに混乱するな
700デフォルトの名無しさん:2015/02/19(木) 05:15:50.02 ID:rPtIBISB
仕事で必要になり、visual studio 2013でC#のコンソールアプリを作りました。
期待した機能は問題ないのですが、コンパイルしたプログラムが、
起動させると数秒して再起動(閉じてまた起動する)します。
Hello Worl表示のようなソースでも同様なのですが、普通に1回で起動させるために何か必要なことがあるのでしょうか?
701デフォルトの名無しさん:2015/02/19(木) 05:32:55.00 ID:tuZVKyYz
702700:2015/02/19(木) 05:44:51.30 ID:rPtIBISB
>>700
ソースはこんなんです。
シリアルポートをチェックするだけのものです。
コンパイルしたプログラムを実行させると起動して数秒で再起動します。
703700:2015/02/19(木) 06:24:34.41 ID:rPtIBISB
自己解決しました。
セキュリティソフトの問題でしたorz
704デフォルトの名無しさん:2015/02/24(火) 22:46:18.81 ID:9av0rMIj
優秀な回答者諸君なら、8人にひとり窓タブが当たる
Microsoft Visual Studioことはじめ〜キャンペーン http://codeiq.hatenablog.com/entry/2014/12/25/150000
にはもちろん応募したよな?
誰か当たった?
705デフォルトの名無しさん:2015/02/24(火) 23:37:50.92 ID:9OYj7FQ2
フィードバックはきてたけど当選メールないな残念
706デフォルトの名無しさん:2015/02/25(水) 01:07:58.41 ID:ESAWqhks
おいC#
Withステートメント使えないじゃねーか
707デフォルトの名無しさん:2015/02/25(水) 02:58:04.28 ID:V4V4PRhf
お前の巣が呼んでるぜ?
708デフォルトの名無しさん:2015/02/25(水) 03:20:48.41 ID:ESAWqhks
オレの巣はドコ?
709デフォルトの名無しさん:2015/02/25(水) 19:58:40.79 ID:5gzTIGkn
withが必要なケースって何さ
710デフォルトの名無しさん:2015/02/25(水) 20:19:07.06 ID:9jad7y3g
COBOLみたいに代入並べるんだろ
711デフォルトの名無しさん:2015/02/25(水) 23:12:05.55 ID:uQJ7B2Wt
ブビ厨スレに帰れ
川俣先生がお呼びだぞ
712デフォルトの名無しさん:2015/02/27(金) 11:40:50.23 ID:KxU3cUcN
コンボボックスを20個並べたフォームを表示するのに1秒ぐらいかかるんだけど、遅すぎね?

なんとか早くならない?
713デフォルトの名無しさん:2015/02/27(金) 12:29:31.22 ID:EZLwV1tk
普通にデザイナで貼り付けただけならそれは遅すぎるから別のところが原因だろう
動的に追加してるならSuspendLayoutしてないとかじゃないか
714デフォルトの名無しさん:2015/02/27(金) 12:51:11.41 ID:tCo8Ph/O
>>712
中身が多いんだろ
715デフォルトの名無しさん:2015/02/27(金) 13:33:00.46 ID:u3BLeEUS
ESP能力がなきゃ答えられないような質問を投げる人はプログラマ向いてないからとっとと辞めた方が絶対にいい。
716デフォルトの名無しさん:2015/02/27(金) 13:43:27.62 ID:rH0Q6QqF
>>716
真面目に質問レス書いてたら投稿する前に解決してしまうじゃないか
717デフォルトの名無しさん:2015/02/27(金) 15:00:23.30 ID:h6tAs7eH
自己解決してやがるw
718デフォルトの名無しさん:2015/02/27(金) 16:11:11.88 ID:c9s4YfIW
項目追加に時間かかってんだろ
719デフォルトの名無しさん:2015/03/01(日) 03:24:09.11 ID:PpU9Sdop
>>712
1秒くらいなら別にいいんじゃ?
720デフォルトの名無しさん:2015/03/01(日) 03:26:28.87 ID:PpU9Sdop
コンボ20個も同時表示ってのがそもそも疑問だけど
721デフォルトの名無しさん:2015/03/01(日) 03:29:04.14 ID:PpU9Sdop
5秒かかるのを2秒にする方法はいろいろあるけどさ
722デフォルトの名無しさん:2015/03/02(月) 09:37:46.96 ID:ixY25SIK
次のプログラムがArgumentExceptionを出すのは何故でしょうか?

using (var ms = new MemoryStream())
{
using (var sw = new StreamWriter(ms))
{
sw.WriteLine("hello");
sw.WriteLine("world");
}

using (var sr = new StreamReader(ms))
{
Console.WriteLine(sr.ReadLine());
Console.WriteLine(sr.ReadLine());
}
}
723デフォルトの名無しさん:2015/03/02(月) 10:01:17.24 ID:xRfYEXVX
>>722
デフォルトではReader/Writerが破棄される時
対象のストリームも一緒に閉じるから
ついでにストリーム位置戻し忘れてない?
724デフォルトの名無しさん:2015/03/02(月) 10:12:26.14 ID:SHM5IwUA
using使わずに書いた方が、どこが悪いのかがわかって良さそうだな
725デフォルトの名無しさん:2015/03/02(月) 11:41:53.32 ID:ixY25SIK
>>723
writer閉じた後シークすらできなかったので
ストリームが閉じているというのは納得です

ありがとうございました
726デフォルトの名無しさん:2015/03/06(金) 01:21:05.48 ID:90VT0ADJ
dynamicを使いまくったプログラムに遭遇しました。
異常に保守性が悪く、バグの特定に苦労しましたが、これを使ってメリットありますか?
727デフォルトの名無しさん:2015/03/06(金) 02:12:29.20 ID:8jo4c40P
エメロンならあります
728デフォルトの名無しさん:2015/03/06(金) 09:09:56.47 ID:zWXA/UR7
>>726
動的云々くらいにしか使い道はないんじゃないか、結局実装はobjectらしいのでパフォーマンスも悪い
インターフェイス、抽象クラス、ジェネリック等で解決出来るならそれに越したことはないと思う
ダックタイピングなんてコンパイラ言語でやるこっちゃあないね、foreach?LINQ?…。
729デフォルトの名無しさん:2015/03/06(金) 14:00:42.17 ID:aMLLgYQ/
BinaryFormatterでシリアライズされたデータをもとの型にもどすとき
シリアライズしたアセンブリのバージョンにバリバリ依存するので
それをなんとか回避するためにdynamic使いまくったことはある
まあ設計ミスなんだが
730デフォルトの名無しさん:2015/03/06(金) 19:20:12.70 ID:lSxjShen
dynamicというか匿名型はローカル変数やprivateメソッドの戻り値とかならあり
731デフォルトの名無しさん:2015/03/06(金) 19:36:03.26 ID:K15TOJCY
未確認飛行の人の検証ではdynamicは(動的コード生成の中では)そこそこ速いって書いてあるけどな
732560:2015/03/06(金) 20:43:33.84 ID:n9/U+gAr
>>730
> dynamicというか匿名型は

dynamic と匿名型は全然別
頭、大丈夫か?
733デフォルトの名無しさん:2015/03/06(金) 20:49:44.76 ID:+V/z1/b/
匿名型を使いたいけど型推論できない変数や戻り値にdynamicを使うってことでしょ?
設計としては全く賛同しないけど意味不明というほどでもない
734デフォルトの名無しさん:2015/03/06(金) 20:58:43.65 ID:coWMRvsx
Dictionary<string, object>の代わりに匿名型をdynamic型として引数で受けるのはあるね
735デフォルトの名無しさん:2015/03/06(金) 22:21:58.81 ID:1OUVemxB
匿名型は禁止でいいよ
アホが糞ソース量産するの防止
736LINQer:2015/03/06(金) 22:44:07.67 ID:P4OmJ7lr
えっ
737デフォルトの名無しさん:2015/03/06(金) 22:51:30.71 ID:K15TOJCY
匿名型で糞ソースってどんなの?
738デフォルトの名無しさん:2015/03/06(金) 22:55:22.40 ID:coWMRvsx
匿名型使うような意識高い系はむしろコード綺麗だろ
var見たら脊髄反射してVariantだ〜品質が〜とか騒ぎ出す阿呆よりよほど使える
739デフォルトの名無しさん:2015/03/06(金) 22:58:24.88 ID:1OUVemxB
自分で書いておきながら俺もそんな気がしてきた
740デフォルトの名無しさん:2015/03/07(土) 11:11:58.06 ID:FoVDQD6E
匿名型をdynamicやobject使って外に出すのはたぶん設計が間違ってる
741デフォルトの名無しさん:2015/03/07(土) 11:27:44.78 ID:2KiYbMBo
実装上の都合だから設計は関係ない
742デフォルトの名無しさん:2015/03/07(土) 11:28:28.26 ID:LW8uI5XV
発端の730的には外に出してない
単に使い捨てクラス作るのが面倒ってだけっしょ
それならいっそTupleでいいじゃんとは思わないでもない
743デフォルトの名無しさん:2015/03/07(土) 11:44:17.92 ID:MlGEwDRl
Tuple使うくらいならdynamicの方がまだマシ
タプルってのは言語のサポートがある上で int age, string name = GetPerson();
みたいに都度展開して使うもんなんだよ
Item1とかアホか
744デフォルトの名無しさん:2015/03/07(土) 11:48:47.87 ID:Q9nqJq7f
匿名型をdynamicで返すなんて事をやる奴は他人のソースのメンテとかした事ない趣味プログラマだな
745デフォルトの名無しさん:2015/03/07(土) 11:54:57.96 ID:0X1gIkd6
未だにOption Strict Offとかやってる土方さんたちもいるんですよ
746デフォルトの名無しさん:2015/03/07(土) 12:12:18.95 ID:2KiYbMBo
テストをしっかり書く習慣があればdynamicに実行速度以外の問題はない
747デフォルトの名無しさん:2015/03/07(土) 12:15:11.33 ID:AaUSQvTI
C#はもともとstatic strong typingな言語でダックタイプも必要に応じて使えますよっていう言語
ダックタイプが好きな人とそうでない人が
自分の志向を押しつけ合っても無駄
748デフォルトの名無しさん:2015/03/07(土) 12:17:43.43 ID:s7kGoYdv
ダックタイピングでやれますよ、っていう点は評価したい
C#でそれをやりたがる発想もわからんが
749デフォルトの名無しさん:2015/03/07(土) 12:28:40.79 ID:AaUSQvTI
>>746
strong typingを捨てたらリファクタリング(名前変更とか)の精度が落ちるだろう
750560:2015/03/07(土) 12:46:46.51 ID:jaly8+RG
>>744
> 匿名型をdynamicで返す

そんなことをしたくなったことがないんだが、どんな状況で必要になるんだ?
751デフォルトの名無しさん:2015/03/07(土) 12:55:19.92 ID:ELHucOd4
こういう時だろ
<return>結果を格納した配列 0:◯◯の値、1:△△の値</return>
たまにやってしまう
752デフォルトの名無しさん:2015/03/07(土) 13:02:43.81 ID:0X1gIkd6
プロジェクト作ったら真っ先にMicrosoft.CSharp.dllを含む不要な参照を削るからdynamicで手を抜くという発想自体が無い
753デフォルトの名無しさん:2015/03/07(土) 13:25:14.62 ID:shYh0yxP
メタプログラミングやるけど書くのめんどくさいなぁって時に使うものだからな
754デフォルトの名無しさん:2015/03/07(土) 13:38:59.81 ID:0X1gIkd6
メタプログラミングと遅延バインドはあまり関係ないと思うが
Dynamic Assemblyじゃないんだから
755デフォルトの名無しさん:2015/03/07(土) 19:17:13.39 ID:N/wyHwvz
リフレクションを使うのは一種のメタプログラミングだし、
dynamicは実行時コード生成のルールを完全に自分で定義できる高度なメタプログラミングの仕組みを備えてるよ
756デフォルトの名無しさん:2015/03/07(土) 20:52:13.71 ID:0X1gIkd6
分かった分かった
Enum.HasFlagもリフレクション使ってるからメタプログラミングだし、dynamic型とDLRの区別をつける必要もないよね
757デフォルトの名無しさん:2015/03/07(土) 21:18:41.69 ID:MlGEwDRl
HasFlagの実装はリフレクションでプログラムそのものの情報を使用しているんだから
一種のメタプログラミングと言えるね
DLR? DLRなんてもう死語だし言ってもお前にしか伝わらんだろ
それに.NETに組み込まれてるのは本来のDLRのごく一部だ
ちなみにdynamicの仕組み(DynamicMetaObject/DynamicMetaObjectBinder)はコード生成にDynamicMethodを使うけどアセンブリの動的生成は使わんぞ
758デフォルトの名無しさん:2015/03/07(土) 22:03:13.63 ID:0X1gIkd6
一般PGがメタプロするときにdynamicキーワードを使うかどうか(>>753)って点について
「メンバー名が決め打ちになるからあまり役に立たない。他のダイナミック○○と混同しているんじゃないか」(>>754)つー主張をしているつもりなんだけど
メタデータは読めても文脈は無理なのかな

あとDLRを勝手に殺すな
759デフォルトの名無しさん:2015/03/07(土) 22:58:16.79 ID:On7QrDFN
メタプログラミングの定義次第だなそれは
C#に限定した話でなく広義的に見ると
コンパイル前のコード生成もメタプログラミングだし
C++テンプレート的なメタプログラミングもある
実行時に文字列やDOMなどをコンパイルするのもメタプログラミングだし
実行時にメンバのメタ情報の読み書きを行うのもメタプログラミングだし
ビルドプロセスに介入するのもメタプログラミングだし
生成物を後で書き換えるのもメタプログラミングだ
dynamicは実行時にメンバのメタ情報の読み書きを行うタイプのメタプログラミングで便利な時があるね
760デフォルトの名無しさん:2015/03/07(土) 23:32:39.43 ID:0X1gIkd6
まあ演算子の動的解決なんかはdynamic導入でMethodInfoと比べて劇的に楽になったと思う
BinaryExpressionでも一発で出来る例なのが微妙だが
761デフォルトの名無しさん:2015/03/08(日) 12:33:59.24 ID:edMAX4Mx
unityで2秒間停止後にシーン切り替えをしたいのですが

StartCoroutine(WaitFor(2.0f)); // 一時停止
Application.LoadLevel("game"); // シーン切り替え


public IEnumerator WaitFor(float waittime)
{
// ストップ実施
yield return new WaitForSeconds(waittime);
}

とすると一時停止せずシーン切り替えされます

StartCoroutine(WaitFor(2.0f)); // 一時停止


public IEnumerator WaitFor(float waittime)
{
// ストップ実施
yield return new WaitForSeconds(waittime);
Application.LoadLevel("game"); // シーン切り替え
}

とコルーチン内にシーン切り替えを持ってくると想定動作になるのですが
これはどういう事ですか?理屈か分かりません。
762デフォルトの名無しさん:2015/03/08(日) 12:54:16.39 ID:5q7l5O1i
Unityは知らんけどStartCoroutineが非同期処理なんじゃねえの
763デフォルトの名無しさん:2015/03/08(日) 13:07:44.15 ID:JlL7Zlt5
知らんがな
764デフォルトの名無しさん:2015/03/08(日) 13:11:01.08 ID:OaTBMw3l
>>761
> StartCoroutine(WaitFor(2.0f)); // 一時停止

まず自分が書いたコードで呼び出してる関数の説明ぐらい読んだらどうだ低脳
765デフォルトの名無しさん:2015/03/08(日) 13:12:00.55 ID:+/h1eClM
知らないならレスしないでくださいうざいだけです
766デフォルトの名無しさん:2015/03/08(日) 13:23:08.66 ID:5q7l5O1i
知らなくても分かる程度の事しか書いてないからなあ…
767デフォルトの名無しさん:2015/03/08(日) 13:26:25.07 ID:ygKzTSMs
>>764
低脳じゃなくて低能なw
768デフォルトの名無しさん:2015/03/08(日) 13:59:15.26 ID:zXQCQciG
Action[] actions = new Action[1]{
 new Action( () => Baka.Sleep(1000) )
};

Baka.InvoveActionsLater(actions);

Baka.StopSomething();

これと同じこと。当然だな
769デフォルトの名無しさん:2015/03/08(日) 14:06:42.65 ID:vYL3voYS
フレームワークに弄ばれてる雑魚PGってほんとダサいよね
最初っからフレームワークに頼り切らないでフレームワーク自作するぐらいの気概と学習意欲がないからそうなるんだよ
770デフォルトの名無しさん:2015/03/08(日) 14:08:38.47 ID:adF/rlPF
同意します
771デフォルトの名無しさん:2015/03/08(日) 15:08:00.17 ID:r3LxMNma
知らんがな
772デフォルトの名無しさん:2015/03/08(日) 15:08:34.71 ID:M+AHJcPP
雑魚PGですまん
773デフォルトの名無しさん:2015/03/08(日) 15:34:31.03 ID:rEcSRQEG
とりあえず、サードパーティなんだから個別スレで相談してくれよ、とは思う
774デフォルトの名無しさん:2015/03/08(日) 17:51:06.86 ID:edMAX4Mx
>>761は取り下げさせて頂きます
申し訳ございませんでした
775デフォルトの名無しさん:2015/03/08(日) 18:21:08.05 ID:428rnVgy
>>774
何かやたら煽られるてけど、>>762で言われてる非同期処理を勉強すれば分かると思うよ。
776デフォルトの名無しさん:2015/03/08(日) 18:44:33.67 ID:edMAX4Mx
>>775
ありがとうございます。調べてみます。
777デフォルトの名無しさん:2015/03/08(日) 18:51:53.31 ID:srsOwzq5
C#プログラマって比較的フレームワークに頼ってないと思うけどな
PHPやRubyみたいなWebサイトツクールに比べりゃ遥かにマシ
まあUnityは素のC#をほとんど理解してない人が結構いたりしてアレだが
778デフォルトの名無しさん:2015/03/08(日) 19:32:17.74 ID:ZUloTWyM
フレームワークに頼らないのは勉強するときだけでいいんじゃないかな。
仕事でそんな事言って作業時間アホほど延ばされたら困る。
779デフォルトの名無しさん:2015/03/08(日) 19:36:58.50 ID:srsOwzq5
仕事なら逆のケースが多い
フレームワークのほんの少しの学習コストを嫌って
直接低レベルな実装をしたりアホみたいな社内フレームワークが生み出されたりする
780デフォルトの名無しさん:2015/03/08(日) 19:42:39.99 ID:Ju4Ov5Iv
ドメインモデル構築時にフレームワークへの依存性って課題が追加されるのがネックかな
781560:2015/03/08(日) 20:53:49.52 ID:6GiElWFY
>>777
> C#プログラマって比較的フレームワークに頼ってないと思うけどな

.NETFramework
782デフォルトの名無しさん:2015/03/08(日) 21:13:15.13 ID:z3dYg3sm
c#プログラミングって.NETFrameworkの活用だよなあ
783デフォルトの名無しさん:2015/03/08(日) 21:15:33.62 ID:srsOwzq5
.NET Frameworkは特にアプリの構造を規定しないから、
一般的にいうフレームワークとはかなり違う
ASP.NETあたりはフレームワークと呼べなくもないけど
784デフォルトの名無しさん:2015/03/08(日) 21:16:18.43 ID:sc1gFCCN
言語だけでどうしろって時代じゃないしな
785デフォルトの名無しさん:2015/03/08(日) 21:17:35.12 ID:ceSNJXb/
単なるC#は「プログラムがクラスのMainから実行される」ってだけで
フレームワークへの依存は極小だな。
フレームワークの依存が大きいのはおもに
Webアプリケーションの乱立フレームワーク
786デフォルトの名無しさん:2015/03/08(日) 21:22:08.46 ID:5q7l5O1i
実装レベルだとLINQ他のライブラリ依存がヤバい
それで他言語で書けなくなるってことはないけど
787デフォルトの名無しさん:2015/03/08(日) 21:50:09.69 ID:srsOwzq5
C#のライブラリ依存は少なくとも自分が何を使っているのか把握して使っている分だけ大幅にマシ
いわゆるWebフレームワークだと、何がどこにあるのか今何を使っているのかどういう仕組みなのかよくわからないけど
なんとなくこう書くものらしいし変にさわるとおかしくなるから気にしないでおこうというのが基本だからな
788デフォルトの名無しさん:2015/03/08(日) 22:13:51.33 ID:JHTV8U6v
ところでこの馬鹿げたコードを見てくれ
ttps://ideone.com/YJ6bBz

Blittable構造体を読み出すジェネリック拡張メソッドをスレッドセーフで実装しながら
パフォーマンスを維持するにはこんな方法しか思いつかなかった
バッファが静的フィールドだとvolatile付けたってlockしないとスレッドセーフに成らんよな?

というかbyte[]インスタンスのTypeHandleはどっから来てるの?__makerefから取れるTypeHandleは
typeof(byte[]).TypeHandleともtypeof(Array).TypeHandleともtypeof(byte).TypeHandleとも異なる…
Type.GetTypeFromHandleUnsafeしてみりゃSystem.Byte[]が返ってくるArrayだけ構造違うの?
789デフォルトの名無しさん:2015/03/08(日) 22:17:41.62 ID:rJrv12ko
>>783
ひとつに限定していないというだけで普通にフレームワーク提供してるだろ、
System.Windows.Applicationとか。
790デフォルトの名無しさん:2015/03/08(日) 22:27:39.57 ID:5q7l5O1i
例外としてASP.NETを挙げてるのにWPFでツッコミを入れている人を見たときの悲しさ
791デフォルトの名無しさん:2015/03/08(日) 22:41:23.32 ID:xsLbcRsT
>>790
アプリの構造を規定しないとか嘘を言うから突っ込まれたんだろ。
言語の実行基盤としてのフレームワークはあまり規定しないかも知れんが
Webアプリ・GUIアプリ・Windowサービスのフレームワーク
としては規定しまくりだろう
792デフォルトの名無しさん:2015/03/08(日) 22:51:51.87 ID:rJrv12ko
>>790
WPFとFormsも例外だった?例外多いなw
793デフォルトの名無しさん:2015/03/08(日) 22:52:24.45 ID:srsOwzq5
794デフォルトの名無しさん:2015/03/08(日) 22:55:27.12 ID:srsOwzq5
>>791
Webフレームワーク触ったことある?
規定のレベルが違う
795デフォルトの名無しさん:2015/03/08(日) 23:16:52.36 ID:5q7l5O1i
>>792
そういうのは本人に聞いてくれ
796デフォルトの名無しさん:2015/03/08(日) 23:22:52.61 ID:5q7l5O1i
まあWPFもFormsも純粋にVしか担当してないし、デザインパターン限定しない程度には高機能だからあまりフレームワーク的じゃないと思うけど
797デフォルトの名無しさん:2015/03/08(日) 23:25:34.17 ID:JHTV8U6v
>>793
うーん済まないがThreadStatic使うとnew byteするのと大してパフォーマンス変わらないんだよね
スレッドセーフじゃない静的フィールドならReadInt32を上回る速度が出るんだけど…
inputがMemoryStreamだとInternalReadInt32呼ばれて負けますがね!もはやC++/CLIでも使えって話だけど
798デフォルトの名無しさん:2015/03/08(日) 23:38:24.38 ID:uAYzQK0s
他に最適化出来るとこ探したほうが健全だよ
799デフォルトの名無しさん:2015/03/08(日) 23:56:15.74 ID:JHTV8U6v
まぁミリ秒単位の話なんでそうなんだけどね
結局unsafeコードなら直にfixedキャスト書いた方が速いし
マネージコードならSafeBuffer使えば良いし(AlignedSizeなのが玉に瑕だが

Marshal.SizeOfTypeにもthe lack of a suitable generic constraint.なんて書かれてるし
MSILで出来る事がC#で書けないのがなんかもにょる.NETの為の言語じゃねーのかよって感じで
800デフォルトの名無しさん:2015/03/09(月) 01:49:35.21 ID:bl0YQ52k
>>781
わろたぁぁwww
801560:2015/03/09(月) 06:46:27.93 ID:R+XoG9o+
>>794
レベルが違うだけで、フレームワークとしての仕組みは同じ
仕組み理解できない奴には全然違うものに見えるのかもしれないけど w
802デフォルトの名無しさん:2015/03/09(月) 07:50:02.15 ID:ILJGwsf4
>>796
WPFもFormsも、イベントドリブンなアプリケーションの構造とその根幹であるイベントループを提供しているがな。
803デフォルトの名無しさん:2015/03/09(月) 19:39:15.43 ID:nl7+aNOJ
それはビュー層以外の仕事なの?
804デフォルトの名無しさん:2015/03/09(月) 21:31:25.39 ID:ILJGwsf4
あえてMVCのどれに分類されるかと言うなら、アプリケーションのメインイベントループを
持つクラスはCだろうな。
ただ、設計論としてのMVCはプログラマ自身が設計するクラスをどれに分類するかを
考えるだけで、フレームワーク自体はその背後に存在するとみなすのが普通じゃないかな。
たとえばMVVMでも、VとVMのバインディングを誰がやっているのかなんて考えないように。
805デフォルトの名無しさん:2015/03/10(火) 08:03:14.06 ID:hNEbsZbx
MVC厨はMVCしか知らないから
他の考えがあるという認識が無く
すべてをMVCに当てはめようとする
806デフォルトの名無しさん:2015/03/10(火) 08:18:10.49 ID:tjx9AHBm
そういう奴に限ってMVVMがWPFの事情に依存している以上に
MVCがSmalltalkのGUIフレームワーク特有の事情に依存した仕組みであることを知らない
807デフォルトの名無しさん:2015/03/10(火) 11:28:42.22 ID:zdRAHy3f
VS2013のアドイン開発ってここで聞いても大丈夫?
やってる人居ませんか?
808デフォルトの名無しさん:2015/03/10(火) 14:01:39.28 ID:zdRAHy3f
VS2013の拡張として自前で簡易的なキーマクロ作りたいんですが、
キー入力を取得するにはどうすればいいんでしょうか?
フォームアプリなら分かるんですが、DTEからはどうすればいいのか、分からない、、
809デフォルトの名無しさん:2015/03/10(火) 23:23:01.74 ID:sIC3s7FK
vsのアドインってどうやって作るの?
810デフォルトの名無しさん:2015/03/11(水) 00:00:12.86 ID:409Xxc8o
EnvDTEとかいうビチクソCOMは撤廃されて
C#でMEFのコンポーネントとして作るという超モダンな仕組みに置き換わった
811デフォルトの名無しさん:2015/03/11(水) 00:19:41.57 ID:53MZ6hm2
812デフォルトの名無しさん:2015/03/11(水) 00:26:53.74 ID:+PvNMM+7
.netにはクールなsshクライアントクラスは無いのですか?
813デフォルトの名無しさん:2015/03/11(水) 04:17:10.81 ID:s98Ts5Op
VS2013を使ってます。
windowsフォームアプリケーションで、効果音を鳴らすためにDirectSoundを
使いたいんですが、usingに何を定義してやればいいのかわからないんですが
どなたかわかりますか

VS2012以降はDirectXがWindows SDKに統合されたと聞いたので
DirectX SDKをインストールしないでDirectSoundを使いたいです。
814デフォルトの名無しさん:2015/03/11(水) 05:01:34.28 ID:rCH71uUa
System.Media.SoundPlayer
815デフォルトの名無しさん:2015/03/11(水) 07:02:55.37 ID:409Xxc8o
>>811
アドイン(COMでDTE系使うやつ)は廃止予定で非推奨になっている
今は拡張機能といって>>810のやり方で作る
覚えておけロートル
816デフォルトの名無しさん:2015/03/11(水) 07:54:42.34 ID:mbZuxei0
今はこんな便利になっているんだな。
その昔。vsじゃなくて自前アプリ用だけど、
ほとんど同じことをリフレクション使って自力実装していたよ
817デフォルトの名無しさん
>>813
VSTi