トップページ⇒tech
1001コメント281KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2008/12/17(水) 22:17:18
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
0153デフォルトの名無しさん2008/12/23(火) 14:36:25
>>152
ソースコードに戻せるという意味ならそうだよ。
0154デフォルトの名無しさん2008/12/23(火) 15:26:45
C#ビルダー使ってたからそんなことしてない
0155デフォルトの名無しさん2008/12/23(火) 15:36:23
別に逆コンパイルされて何の問題が?って感じだなあ
商用なら対策用ソフトが高価だが売ってるし
0156デフォルトの名無しさん2008/12/23(火) 18:26:53
今はEEがあるじゃん
0157デフォルトの名無しさん2008/12/23(火) 19:51:55
コメントとかも戻るの?
俺、コメントに顔文字とか使ってるんだけどw
0158デフォルトの名無しさん2008/12/23(火) 19:57:44
戻ったらコメントじゃねえ
0159デフォルトの名無しさん2008/12/23(火) 19:59:51
だよね。安心したw
0160デフォルトの名無しさん2008/12/23(火) 22:48:23
>>159
(・∀・)いや、安心している場合じゃないぞw
0161デフォルトの名無しさん2008/12/23(火) 22:50:11
C#のプログラムってLinuxでも動く?
0162デフォルトの名無しさん2008/12/23(火) 22:53:17
>>161
Mono を使えば。
0163デフォルトの名無しさん2008/12/23(火) 22:54:17
wineでおk
0164デフォルトの名無しさん2008/12/24(水) 02:29:58
久しぶりにPInvokeすると低レベルな所の使いにくさが際立つな。
0165デフォルトの名無しさん2008/12/24(水) 03:03:37
そーなのか
0166デフォルトの名無しさん2008/12/24(水) 04:49:40
VC#で作ったプログラムを公開・配布したいときは
binフォルダの中のReleaseフォルダの中の.exeファイルを配布すればいいのですか?
objフォルダじゃないですよね・・・?
0167デフォルトの名無しさん2008/12/24(水) 11:43:28
>binフォルダの中のReleaseフォルダの中の.exeファイルを配布すればいいのですか?
それでおk
0168デフォルトの名無しさん2008/12/24(水) 13:53:39
>>164
ぴん・・・ぼけだと?w
0169デフォルトの名無しさん2008/12/24(水) 14:11:16
( ´,_ゝ`)プッ
0170デフォルトの名無しさん2008/12/24(水) 14:21:05
>>167
ありがとうね
0171デフォルトの名無しさん2008/12/24(水) 19:47:04
foreachが便利とかって時々聞くんですが
forに比べてそんなに便利なんですか?
0172デフォルトの名無しさん2008/12/24(水) 19:51:00
>>171
例えば配列要素を全て合計するような単純なイテレーションなら
foreach を使ったほうが速い。
0173デフォルトの名無しさん2008/12/24(水) 19:52:21
foreachにもループ回数カウント機能あればいいのに
0174デフォルトの名無しさん2008/12/24(水) 20:01:42
>>173
どういう使い方を想定してる?
0175デフォルトの名無しさん2008/12/24(水) 20:02:14
その要素を指すインデックスにアクセスしたいんだろ。
0176デフォルトの名無しさん2008/12/24(水) 20:04:53
>>172

速いっていうのは実行速度が?
それともコーディングが?
0177デフォルトの名無しさん2008/12/24(水) 20:07:18
>>176
実行速度
0178デフォルトの名無しさん2008/12/24(水) 20:18:09
IEnumerator自分で実装したことがあればそんな愚論は絶対に吐けないと思うw
0179デフォルトの名無しさん2008/12/24(水) 20:38:40
配列に対するforeachは最適化されるよ
確かfor (int i = 0; i < array.Length; i++)も同様に最適化されるんだったとおもう
0180デフォルトの名無しさん2008/12/24(水) 21:17:31
>>173
C# 4.0 だと
public static IEnumerable<dynamic> WithIndex<TSource>(this IEnumerable<TSource> enumerable)
{
  int index = 0;
  foreach (TSource item in enumerable)
  {
    yield return new { Index = index, Item = item };
    index++;
  }
}
みたいなことができるっぽい。

今の段階だと dynamic の部分で適当にクラスを作成するしかないかな?
何かうまい抜け道がある気がするんだが。
0181デフォルトの名無しさん2008/12/24(水) 21:23:55
ArrayEnumeratorって、
普通にインデクサを使ってアクセスしているのに何故高速かと思ったら最適化されているんだ。
0182デフォルトの名無しさん2008/12/24(水) 21:29:56
>>180
とんでもなく遅そうだなそれ
わざわざdynamicにする意味がわからない
struct IndexItemPair<TSource> { public int Index { get; } public TSource Item { get; } }
とか返せばいいだろ

foreachにこだわらなくてもこういうのでいいんじゃないの
static void ForEach<TSource>(this IEnumerable<TSource> source, Action<TSource, int> action) {
 int index = 0;
 foreach (TSource item in source) action(item, index++);
}
0183デフォルトの名無しさん2008/12/24(水) 21:35:10
>>180
こうでいいじゃん

public static void ForEach<T>
(this IEnumerable<T> e, Action<TSource, int> action)
{
int index = 0;
foreach(var item in e)
{
action(item, index);
index++;
}
}
0184デフォルトの名無しさん2008/12/24(水) 21:36:54
というか 4.0 だの新しく作るだの考えんでもメソッド形式なら
確か Select, Where 辺りのオーバーロードにあった気がする
んだが
0185デフォルトの名無しさん2008/12/24(水) 21:38:44
foreachってforより遅いだろ
0186デフォルトの名無しさん2008/12/24(水) 21:41:46
>>184
そういうのを本来の用途から外れて無理に転用するのはお行儀が悪い
items.Select((item, index) => { item.Hoge(index); return null; });
とか書かれてても何がしたいのかわからんでしょ
0187デフォルトの名無しさん2008/12/24(水) 21:46:15
>>186
その例は使い方悪すぎ。書くならこう

var items =
 source
  .(略)
  .Select((value, index) => new { Index = index, Value = value });

foreach(var item in items) {
 item.Value.Hoge(item.Index);
}
0188デフォルトの名無しさん2008/12/24(水) 21:46:20
Selectは遅延評価で、ForEachは即時評価じゃないとダメだからな
0189デフォルトの名無しさん2008/12/24(水) 21:47:23
ちなみにポインタ使った最適化になる。

>IEnumerator自分で実装したことがあればそんな愚論は絶対に吐けないと思うw
あほう
0190デフォルトの名無しさん2008/12/24(水) 21:50:22
>>172

(゚д゚)ハァ?
0191デフォルトの名無しさん2008/12/24(水) 21:53:18
ファイルの書き込み完了前に、そのファイルをコピーしたいと思っています。
その場合、ファイルのサイズが書き込み完了になるまでわからないのですが、
その書き込み完了をどのようにして判定すればよいでしょうか?
FileStreamとBinaryReaderを使って成長中のファイル(書き込み完了前のファイル)を読み出したい
と思っています。周期的に更新時間をチェックし、更新時間が変わらなくなったら、という判定を
考えていたのですが、もっと適切な方法はあるのでしょうか?
助言をいただけたらと思います。
0192デフォルトの名無しさん2008/12/24(水) 21:54:33
>>182,183
戻り値を IEnumerable<dynamic> にした理由は IEnumerable を返したかったから。
enumerable.WithIndex().Hoge(...) みたいなことがしたい。
まあ>>182の言うようにインデックスと実体のペアを返すので十分良いけど。
0193デフォルトの名無しさん2008/12/24(水) 21:59:24
>>190
配列に対するforeachと,for (int i = 0; i < array.Length//Lengthプロパティを使うのが大事; i++)
の形のforはどちらも最適化されてほとんど同じ速度になる
0194デフォルトの名無しさん2008/12/24(水) 22:06:44
なんねーよ知ったか乙
0195デフォルトの名無しさん2008/12/24(水) 22:29:15
変わるとしたらJITコンパイラ側で変わるのかね?CILでは違うコードを吐くはずだから
0196デフォルトの名無しさん2008/12/24(水) 22:34:00
全く同じじゃないけどよく似たILになるよ
素直にやったらIEnumeratorを操作したりするようなコードになることを考えれば,
差はほとんどないと言っていいと思う
0197デフォルトの名無しさん2008/12/24(水) 23:45:51
>>180
それいいねー
Perlっぽくてナイス
0198デフォルトの名無しさん2008/12/24(水) 23:58:08
よくねーよ
型付けするだけで数百倍速くなるぞ
0199デフォルトの名無しさん2008/12/25(木) 00:11:56
>>198
まだ実装もされていない機能についてどうしてそんなことがいえるんだよ
0200デフォルトの名無しさん2008/12/25(木) 00:28:16
リフレクションで実装するって明言されてるから
0201デフォルトの名無しさん2008/12/25(木) 00:37:20
匿名型はIDynamicObject実装してdynamicのときはディクショナリとして振る舞うようにするとか
…まあ無いだろうな
0202デフォルトの名無しさん2008/12/25(木) 00:41:06
そんなことするくらいならメソッドの戻り値にvarを認めた方がマシだ
てか>>187で何か問題があるんか
0203デフォルトの名無しさん2008/12/25(木) 03:22:12
そんな素人じゃないんだから100倍遅くなるような設計するわけないだろう
常識的に考えて
0204デフォルトの名無しさん2008/12/25(木) 04:52:09
型自体を引数として関数に渡す方法ってあるか?
private void hoge(TYPE type)
{
 type v=new type();
}
みたいにコンストラクタを呼び出したいだけなんだが
0205デフォルトの名無しさん2008/12/25(木) 05:20:54
void Hoge<T>() where T : new()
{
T t = new T();

こんなんだっけ
0206デフォルトの名無しさん2008/12/25(木) 05:49:41
>>204
void Hoge(Type type)
{
 object o = Activator.CreateInstance(type);
}

T が既知なら>>205の方法で。
0207デフォルトの名無しさん2008/12/25(木) 06:10:15
whereとか初めて見た
どんな意味だ
0208デフォルトの名無しさん2008/12/25(木) 06:16:47
>>207
型パラメータの制約
http://msdn.microsoft.com/ja-jp/library/d5x73970.aspx
0209デフォルトの名無しさん2008/12/25(木) 06:36:29
>>208
へえこんなんあったのか
よくシリアライズ関係のクラスで引数無しのコンストラクタを
渡してコンパイルエラーになるのが謎すぎたんだけどこれのせいかよ
0210デフォルトの名無しさん2008/12/25(木) 07:10:49
それはまた別だと思うよ
0211デフォルトの名無しさん2008/12/25(木) 08:40:47
もうC#2.0でいいっていう気がしないでもない
ついてはいくけどさ
0212デフォルトの名無しさん2008/12/25(木) 08:46:27
C#2.0には戻れんわ・・バージョン上がる度に便利になりすぎ
0213デフォルトの名無しさん2008/12/25(木) 09:21:41
ラムダ式とLinqが便利すぎる
0214デフォルトの名無しさん2008/12/25(木) 09:31:38
>>211
食わず嫌い乙
0215デフォルトの名無しさん2008/12/25(木) 09:34:01
>>214

確かに3.5とかすげぇ便利でいいと思うんだよ・・・・
でもな・・・・でもな・・・・
現場にWin2000が現役ではびこってるからつかえねぇええええええええええええ!!!!!
あああああああ

まじめんどくせぇ・・・・
Linq使えば楽なのにとか思うところが多々あるから困る
0216デフォルトの名無しさん2008/12/25(木) 09:44:09
スタティックリンクとかできないんだっけ?
0217デフォルトの名無しさん2008/12/25(木) 11:29:05
System.Core.dllのローカルコピーを配れば動くかもしれないけどライセンス違反
MONOからパクってくれば
0218デフォルトの名無しさん2008/12/25(木) 15:15:29
え?そうなの?
なんでボーランドみたいにスタティックリンクライブラりないんだよ
0219デフォルトの名無しさん2008/12/25(木) 15:24:36
Silverlightではランタイムに含まれてるdllは最小限になってて
必要に応じてローカルコピーで配れということになってるな
0220デフォルトの名無しさん2008/12/25(木) 16:44:48
型に対応するMaxValue等を取得するのに

object getTypeMaxVal(Type type) {
if (type == typeof(byte)) retun byte.MaxValue;
if (type == typeof(short)) return short.MaxValue;
if (type == typeof(int)) return int.MaxValue;
//省略...
}

の様なメソッドで求めているのですが、もっと簡単な方法があれば、
ご教授願えれば有難いです。
0221デフォルトの名無しさん2008/12/25(木) 16:47:38
そのメソッドをどう使うか次第、かな
0222デフォルトの名無しさん2008/12/25(木) 16:48:14
○ご教示
×ご教授

日本語からやりなおそうな
0223デフォルトの名無しさん2008/12/25(木) 16:51:53
flexgGrid(グレープシティ)使っていて、グリッド編集時にエラーメッセージ
として最大値や最小値の範囲を表示したいのです。
それと、DELキーにより型に対応した初期値も設定したいのです。
0224デフォルトの名無しさん2008/12/25(木) 16:53:49
>>220
type.GetField("MaxValue").GetValue(null);
遅いので頻繁に必要なら結果はキャッシュしておいてね
02252202008/12/25(木) 16:55:30
>>224
有難うございます。
0226デフォルトの名無しさん2008/12/25(木) 18:43:19
TypeCodeでテーブルにしといたら?
0227デフォルトの名無しさん2008/12/25(木) 18:46:29
テーブルにするにしろ,その値を取得する方法をそもそも聞いてるんでしょ
0228デフォルトの名無しさん2008/12/25(木) 18:50:54
if で分岐するのが速いと思う。測定してないけど。
0229デフォルトの名無しさん2008/12/25(木) 18:54:25
C#では文字列の連結が演算子のオーバーロード不要だと・・・
信じられん・・・
0230デフォルトの名無しさん2008/12/25(木) 19:00:04
文字列の+は逐次2つずつ連結するんじゃなくて最適化されるからな
0231デフォルトの名無しさん2008/12/25(木) 19:12:07
変数が無いメソッドはstaticにするのが通例なんですか?
0232デフォルトの名無しさん2008/12/25(木) 19:18:14
引数と他のstaticメンバのみに結果が依存するメソッドはstaticにする
「状態に依存しない」ってこと
0233デフォルトの名無しさん2008/12/25(木) 19:24:07
インスタンスを扱うのか、クラスを扱うのか
0234デフォルトの名無しさん2008/12/25(木) 19:37:28
>>222
「ご教授」でもいいんだよ。
2chの誤用厨(ちょうどお前さんのような)が騒いでるのとは違って。
こういう恥ずかしい馬鹿が最近多くて困るまったく。
0235デフォルトの名無しさん2008/12/25(木) 19:47:23
というかstaticって必要ですか?
意味が無いような気がするんですが
0236デフォルトの名無しさん2008/12/25(木) 19:52:00
インスタンスの意味がない場合に使うんだよ
たとえばMath.Sinはいつどこでどんな状況で使っても引数の値だけで結果が決まるんだから
インスタンスがあると逆に不自然
インスタンスっていうのは「状態」を表すんだよ
0237デフォルトの名無しさん2008/12/25(木) 19:55:16
>>235
Math.Max(x, y)を実行するためにMathのインスタンスが必要と思うか?
0238デフォルトの名無しさん2008/12/25(木) 20:04:59
>>234
「ご教授」は体系的に教えることを言う
下手クソな自己擁護乙
0239デフォルトの名無しさん2008/12/25(木) 20:05:59
>>238
それは2chの誤用厨が勝手に言ってるだけだよ。
違うってのならソースある?
いわゆる「一流」の辞書にそんなこと書いてないから。
0240デフォルトの名無しさん2008/12/25(木) 20:06:10
たかがネットでそこまで言葉の定義に厳密になる理由が無い。はい次
0241デフォルトの名無しさん2008/12/25(木) 20:06:48
では、必要の無いインスタンスがあると全体的なパフォーマンスが落ちるというイメージでいいのですか?
0242デフォルトの名無しさん2008/12/25(木) 20:09:17
>>241
パフォーマンスは関係ない。
意味的に変だからやらないだけ。
つーかその変のことはコード書いてる内に自然とわかってくるから
今は深く考えなくてもいいかもしれんよ。
0243デフォルトの名無しさん2008/12/25(木) 20:15:34
(new System.Math()).Sin(pi);
0244デフォルトの名無しさん2008/12/25(木) 20:18:34
staticについては現時点で80%ほど理解できたと思います
ありがとうございます

privateの意味が無いような気がするんですが、これはコーダーがケアレスミスしないようにするためのものなんですか?
0245デフォルトの名無しさん2008/12/25(木) 20:24:58
テレビ見るときにどうして映るのかいちいち意識してるか?
ブラウン管テレビだろうとプラズマハイビジョンテレビだろうと液晶テレビだろうと
リモコンのボタン押すだけだろ?
そういうことだ
0246デフォルトの名無しさん2008/12/25(木) 20:28:58
どういうことだよw
0247デフォルトの名無しさん2008/12/25(木) 20:29:03
つかそこまで初心者なら本一冊読め。いちいち全部聞くな。
0248デフォルトの名無しさん2008/12/25(木) 20:29:28
publicにして困るようなことが思い浮かばないんです
0249デフォルトの名無しさん2008/12/25(木) 20:37:32
>>248
それは「作る側」の視点に立ってるから。
使う側の視点に立てばおのずとわかる。

もしTVの裏にピンジャックが100個付いてたら、どれが映像入力端子で
どれが音声入力端子か見分けるだけでも一苦労するだろ。
外から見えるのは必要最小限の物だけでいいってこと。
0250デフォルトの名無しさん2008/12/25(木) 20:38:53
ここは答える側が初心者ってオチ?
0251デフォルトの名無しさん2008/12/25(木) 20:42:02
不要なものが見えちゃうと融通が利かなくなる
最小限のものだけが見えているからこそ
ブラウン管テレビもプラズマハイビジョンテレビも同じように扱える
なんでもかんでも中身が見えてて触れたら,マイナーチェンジでちょっとだけ仕組みを変えただけで
使ってた人から「せっかく操作方法覚えたのになんで変えるんだよ!」と文句言われることになる
0252デフォルトの名無しさん2008/12/25(木) 20:44:34
>>239
「一流」の辞書とやらの定義を出してごらんよゴミ君
■ このスレッドは過去ログ倉庫に格納されています