ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
369:デフォルトの名無しさん
09/01/30 08:52:34
安価ミス
>>361

370:デフォルトの名無しさん
09/01/30 10:57:19
ArrayListやList<T>において、
list.Add(new T())
といった感じで配列に追加している場合、
削除系メソッド(Clear、Remove、RemoveAllなど)実行したときに配列内のクラスのインスタンスは
開放されないのでしょうか?


371:デフォルトの名無しさん
09/01/30 11:01:05
その要素を他が参照してなかったらGC対象になる

372:デフォルトの名無しさん
09/01/30 11:09:48
>>371
そういうことなのですね。ありがとうございました。

373:デフォルトの名無しさん
09/01/30 15:09:36
"バイト"や"キログラム"のような単位を表す文字列を
設定されたカルチャに応じて取得できるクラスないですか?

374:デフォルトの名無しさん
09/01/30 15:22:26
標準ライブラリには無い
複数形とか考えると多分作るのは不可能に近い

375:デフォルトの名無しさん
09/01/30 18:15:54
不可能ってこたねえだろ

376:デフォルトの名無しさん
09/01/30 18:46:52
>>375
渦中って読めますか?

377:デフォルトの名無しさん
09/01/30 18:51:34
俺もそんなクラスほしい
標準であってもいいよね

関係ないけど「OK」「キャンセル」「適用」 とかも欲しかった

378:デフォルトの名無しさん
09/01/30 19:14:29
ってか、C#おもろいけど、GUI案件がないからモチベあがんないんだよね。言語的にはいいんだけど。

しょうがないから、ASP.NETもじもじやってる。

379:デフォルトの名無しさん
09/01/30 19:47:32
C#とついでにSilverLigitもやったんだけど、案件が全然ねえ(;´д`)俺は馬鹿だったのか?

380:デフォルトの名無しさん
09/01/30 19:54:31
わざわざ.netを指定してくる企業って皆無では・・・

381:デフォルトの名無しさん
09/01/30 20:20:23
おれずっとc#でやってたよ。MSとちょっと関係ある会社だけど

382:デフォルトの名無しさん
09/01/30 20:21:56
VS2008 + .net2.0

dirフォルダ内のサブフォルダの中身も含めたファイルの個数を出したいです。

using System.IO;
string[] files = Directory.GetFiles( dir, "*", SearchOption.AllDirectories);
として、files.Length を数えてるんだけど、ファイル数が5000とかあるフォルダを
検索しなくちゃならないので、さすがに遅いです。

この段階ではファイル名のstringは使わないので、個数だけで良いのですが、
サクっと出せるような方法ありませんか?

383:デフォルトの名無しさん
09/01/30 20:48:30
ないよ
遅いのは結局IOであってファイル名とかはほぼ関係ない

384:デフォルトの名無しさん
09/01/30 20:49:49
>>383
了解しました。
我慢します。

385:デフォルトの名無しさん
09/01/30 21:01:30
Rectangle rect;
rect = null;

としたところ、Rectangle 型なのでnullは入れられないと言われました!
VB.NETだと、どんな型の変数にも Nothing を入れられるのでつい同じかと
思っていました。どうやったら同等の処置が可能でしょうか、よろしくお願いします。



386:デフォルトの名無しさん
09/01/30 21:04:19
VBでも本当にNothingを入れることはできないよ
Rectangle? rect;
rect = null;
※使うときはRectangleにキャストすること

387:デフォルトの名無しさん
09/01/30 21:05:31
>>385
Rectangleは値型だっけか。これでどうだ。
Rectangle? rect = null;


388:デフォルトの名無しさん
09/01/30 21:13:03
>>385
VB の Nothing は null じゃなくて Zero Fill な値(既定値)だからな
C# 的には null と既定値は区別される。C# 的には VB の Nothing
は default(T)。

なので VB の Nothing 代入に近いのは
var rect = default(Rectangle);
だぁね

389:デフォルトの名無しさん
09/01/30 21:15:16
>>386-387
どうもです。やってみましたところ、キャストを入れた上で一応解決かと思った
のですが、一つだけ問題がでました。Contains()メソッドを使っているところで
'System.Nullable<System.Drawing.Rectangle>' に 'Contains' の定義がありません
というエラーとなりました。これは

if ((Rectangle)rect.Contains(e.Location))
{・・・}

のように使ってみたのですが、他の書き方しないとだめでしょうか。


390:デフォルトの名無しさん
09/01/30 21:18:27
>>388
ご教示どうもです、知りませんでした。

>なので VB の Nothing 代入に近いのは
>var rect = default(Rectangle);

こういうのもあるんですか!この場合は
if (rectG != null){・・・} 
のように使えるでしょうか。そうだ、やってみます。

391:デフォルトの名無しさん
09/01/30 21:19:56
((Rectangle)rect).Contains
>>390
できません
rectG!=default(Rectangle)ならできるけど(0, 0, 0, 0)とは区別できないよ

392:デフォルトの名無しさん
09/01/30 21:23:29
defaultはgenericで使うことを前提に作られているんで若干癖がある。
Rect(0,0,0,0)に初期化することが目的なら
var rect = new Rectangle();
未初期化のRectangleが欲しいのなら
Rectangle rect;
でいい。

393:デフォルトの名無しさん
09/01/30 21:24:41
>>390
おおっと。
いや VB 使っているうちは VB の流儀でいっていいと思うんだが
C# に来たんだから C# の流儀にあわせて区別しような。
Rectangle? val = null;
のほうを使えってことだけど。

>>389 のほうは rect.Value.Contains(e.Location) な。
null だったら例外出るが。例外がいやなら

if( rect.HasValue && rect.Value.Contains(e.Location) )

かね。


394:デフォルトの名無しさん
09/01/30 21:24:56
>>391
>((Rectangle)rect).Contains
早速ありがとうございます、これで大丈夫でした、助かりました。
>rectG!=default(Rectangle)ならできる
わかりました。いろいろご教示ありがとうございました!

皆様本当にありがとうございました!またよろしくお願いします!!

395:デフォルトの名無しさん
09/01/30 21:26:18
うぽ!
(rect ?? new Rectangle()).Value.Contains(


396:デフォルトの名無しさん
09/01/30 21:26:39
っていうかVBでも値型をNothingと比較するのはダメだろ
ゼロ初期化されたものと同じとわかっててやるならいいけど,>>394はわかってなさそう

397:デフォルトの名無しさん
09/01/30 21:31:15
>>392
>>393
>>395
C#の凄い表現のバリエーションにびっくりです、またこれから勉強致します。

>>396
わかってなかったです。すみません・・・。

ではまた。

398:デフォルトの名無しさん
09/01/30 21:33:38
Rectangleをnullと初期化したあとにどう使うんだろう・・・

399:デフォルトの名無しさん
09/01/30 21:40:02
フラグ代わりだよ
Rectangle rect;
bool isRectAssigned;
みたいなのってよく出てくるだろ
これを一つにまとめたのがnullable

400:デフォルトの名無しさん
09/01/30 21:43:05
IList<T> list = new List<T>();
とかやってたら、IListの方にはForEach()がなくて涙目なんだけど、そういうもんなの?

401:デフォルトの名無しさん
09/01/30 21:55:52
ForEachぐらい自分で書けばって

402:デフォルトの名無しさん
09/01/30 22:07:07
nullable ってキモいからまだ使ったことがないな
すこし慣れてみるか……

403:デフォルトの名無しさん
09/01/30 22:09:46
拡張メソッドで自作するのは簡単
でもEnumerable.ForEachが無いことを考えると,素直にforeach書けということなんだろうと思う

404:デフォルトの名無しさん
09/01/30 22:26:01
WPFではShowDialogの戻り値がbool?になってたりするね

405:デフォルトの名無しさん
09/01/30 22:48:24
正確に20msで処理をしてFORMのPictureBoxを触りたいときは、
BackgroundWorker+System.Timers+AutoResetEventでいいですか?
他にもっといいやり方があるんなら教えて欲しいのですが…orz

406:デフォルトの名無しさん
09/01/30 22:57:49
>>405
> 正確に20ms
まずこれが難しい。timeBeginPeriod か MMCSS 使えば
ある程度いけるかもしれないけど、あくまである程度。
さらにいいやり方となると Forms 使うのが間違ってる。


407:デフォルトの名無しさん
09/01/30 22:58:20
20msは厳しいんじゃないの
更新間隔は20msよりも長くして,
そのつど経過時間を計測してそれから計算してその結果をもとにしてPictureBoxを更新したほうが

408:デフォルトの名無しさん
09/01/30 23:06:23
コールバック間隔は,Application.Idleイベント使うなり自分でメッセージループ回すなりして
その中でStopwatch使って時間計測すればある程度正確にできるけど
フォームの更新が20msでは絶対無理

409:デフォルトの名無しさん
09/01/30 23:27:55
20msってどこから来たの?
測定機械のタイミングとか?
GUIの更新は後回しにした方がいいんじゃね?

410:デフォルトの名無しさん
09/01/31 00:53:40
20msってWindowsのインターバルタイマーで拾えるの?
割り込み上がっても、処理が間にあわん気がするんだけどね
リアルタイムOSでというのなら分からんでもないけど。
#組み込み用が対象なのかな?
割り込み->データをFIFOQueueに追加->queueのデータをGUI処理
になるんだろうけど(sharedメモリ経由か)
#割り込みコンテキストってWinにはあるのかな?

411:デフォルトの名無しさん
09/01/31 02:40:33
いつも思うんだが、なんか2chって日本語として成立してない質問でも適当にESPを働かせて、
(というより、回答する側も他人の文章を正確に読解する能力がないだけ、という方が
より真相に近いと思うんだが)回答する奴が多すぎないかね。

>>405
「正確に20msで処理をして」とはどういう意味?
正確に20ms間隔でイベント処理をしたい、って意味なの?
いずれにしても、「正確」という表現はもっと定量的な表現にする必要があるだろ?

仮に20ms間隔でGUIを更新したい、って意味だとしたら、
今時のPCなら単純にSystem.Timers.Timer使っても±5ms以内の誤差で可能だと思うけど。

少なくとも、平均速度として50回/秒が実現できればいいということなら
(意味があるかどうかは別として)ほぼ確実に出来ると思う。

もちろん糞重い描画処理をしてたらあっという間に破綻するけど。

いざとなったらスレッドでThread.Sleep(0)と、Stopwatchをポーリングして
20msごとにControl.BeginInvoke()を実行する無限ループで実装したっていいし。

412:デフォルトの名無しさん
09/01/31 04:51:35
えらい自信だからためしに作ってみたけど
System.Timers.Timerなんて無茶苦茶ばらつくじゃないか


413:デフォルトの名無しさん
09/01/31 09:07:32
エスパーで解釈すると、
20msecでコントロールのアップデートはありえないから、
CreateGraphics()で得たGraphicsで直接描こうとしている。
CreateGraphics() + GDI+メソッドは別スレッドからでも使える。
こういう用途にはFormかPanelが適当なのだけどVB6以来の伝統かPictureBoxを使いたがる人が多い。
Timers.Timerはタイマーイベントの処理時間分、間隔がずれてゆくはずだからその分の解消をしたい。
そんなとこだろ。

414:デフォルトの名無しさん
09/01/31 11:17:09
>20msecでコントロールのアップデートはありえないから、
>CreateGraphics()で得たGraphicsで直接描こうとしている。

じゃあオフスクリーンにも20msecで描画する必要ないじゃん

415:デフォルトの名無しさん
09/01/31 11:41:59
へっぽこエスパーばっかりだな
とくに>>411

416:デフォルトの名無しさん
09/01/31 11:52:58
>>414
オフスクリーン
というのはどこから出てきたんだ?

417:デフォルトの名無しさん
09/01/31 11:58:29
まあ>>405が来るのを待とうじゃないか


418:デフォルトの名無しさん
09/01/31 11:58:36
どうやってもGDI+で20msは厳しいでしょ

419:デフォルトの名無しさん
09/01/31 11:59:47
オンでもオフでも問題の本質は一緒でしょ
>20msecでコントロールのアップデートはありえない
のなら20msec間隔で描画する必要がない

420:デフォルトの名無しさん
09/01/31 12:01:13
そのオン、オフというのを説明してもらいたいのだが・・・

421:デフォルトの名無しさん
09/01/31 12:02:12
ダブルバッファリングじゃないの

422:デフォルトの名無しさん
09/01/31 12:06:59
へっぽこエスパーダブルバッファリングも知らないのかよ

423:デフォルトの名無しさん
09/01/31 12:09:33
やっぱりダブルバッファのことね。それを使うとは一言も言ってない。
フォームにパネルとSystem.Timers.Timerはって、20msecに設定でこれ。

Font stockFont = new Font(FontFamily.GenericMonospace, 14);
int locs = 0;

private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
  using (Graphics g = panel1.CreateGraphics())
  {
    g.FillRectangle(Brushes.Blue, new Rectangle(8, 8 + 28 * locs, 14 * 20, 28));
    g.DrawString(Environment.TickCount.ToString(), stockFont, Brushes.Yellow, 10, 10 + 28 * locs);
    locs++; if (locs >= 5) locs = 0;
  }
}


424:デフォルトの名無しさん
09/01/31 12:24:11
Direct3Dでも使わないと描画間に合わないだろ

425:デフォルトの名無しさん
09/01/31 12:24:57
へっぽこエスパー
ありえないとか言いながら20msecでコントロール(panel)のアップデートしてんじゃねーよ



426:デフォルトの名無しさん
09/01/31 12:33:10
なんか子供だなぁ。

ありえないのは、Control.Invokeを使うこと。
他のスレッドからだからPanel1.Update()も使えない。
Timers.Timerをフォームに貼り付けてと書いたけど、実際はコードでnewしてる。
フォームに張りつけた場合は、ここだけthisからnullに変更してくれ。
this.timer1.SynchronizingObject = null;

427:デフォルトの名無しさん
09/01/31 12:36:52
WindowsXP、VisualC#2008環境で質問があります。
フォルダの[ツール]-[フォルダオプション]で表示できるフォルダオプションのウィンドウを開くには、なにを呼び出せばいいですか?
可能なら、表示オプションのタブをクリックした状態にしたいです。
どなたかご教示ください。よろしくお願いします。
この中身を編集するということは、レジストリをいじるということかと思いますが、その場合、どのような方法を取ればよいでしょう?
違っていたらご指摘いただけないでしょうか。


428:デフォルトの名無しさん
09/01/31 12:37:52
だから描画間に合わなかったらどうすんの?
>>423くらいの処理なら間に合わないこともないかもしれないけど一時的に遅れることだってあるだろ

429:デフォルトの名無しさん
09/01/31 12:46:55
>>428
それで>>405がAutoResetEventと書いてるのだと思うよ。
つまり間に合わなかった場合は、その分間隔を遅延させるか1回か数回とばすか。
実現する方法はいくつかあるが、AutoResetEventを使うのはとばす方のロジックで使える。
この辺は普通にゲームの描画のアルゴリズムだと思うんだけどな。


430:デフォルトの名無しさん
09/01/31 13:17:19
>>427
Vistaだったら
::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{6DFD7C5C-2451-11D3-A299-00C04F8EF6AF}
なんだけど。これをShellExecute。
XPはシラネ

あとはRegistryクラスで編集、WM_SETTINGCHANGEDをブロードキャストとかかのう

431:デフォルトの名無しさん
09/01/31 14:38:10
で20ms間隔で描画できたかい?そんなコードだと無理に決まってるけどw

432:デフォルトの名無しさん
09/01/31 14:41:32
Expression Treeで動的生成されたメソッドって一回作ったらそのまま解放されないの?
頻繁に式木作って評価するならインタプリタ作った方がいいのかな

433:デフォルトの名無しさん
09/01/31 14:50:43
クラスデザイナの関連付けってなにしてくれるの?
関連付けされたクラスのコンストラクタが、
関連元クラスに追加されるみたいだけど、何につかうんだべ。

434:デフォルトの名無しさん
09/01/31 14:56:27
System.Threading.Timer使ってConsoleアプリケーションで、

コールバックは、
・1000回呼ばれたら終了イベント上げる
・開始前と最後のコールバック時に時刻表示

メインは
・1秒後から20msecでコールバックするようにタイマーセット
・終了イベントが上がってきたらタイマーをdisposeして終了

という事実上タイマーが使われるだけで何もしないサンプルをためしに
作ってみたが、32秒かかるよ。最初の1秒待ち差し引いても、平均31msec
呼ばれるのにかかってる。

435:デフォルトの名無しさん
09/01/31 15:36:14
>>434
20msecといってるのは>>405でTimers.Timerにこだわる必要もないのだが。
ただ1000回で31秒かかるというのはおかしいな。
長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。

using System;
using System.Threading;
class Startup { 
 void Test() {
   using (var timer1 = new System.Timers.Timer()) {
    timer1.Interval = 20;
    int counter = 0;
    timer1.Elapsed += (o, e) => { 
      if (++counter >= 1000) lock (this) Monitor.Pulse(this);
    };
    var sw = System.Diagnostics.Stopwatch.StartNew();
    timer1.Start(); 
    lock (this) Monitor.Wait(this);
    timer1.Stop();
    sw.Stop(); Console.WriteLine(sw.Elapsed);
   }
 }
 static void Main() { new Startup().Test(); }
}


436:デフォルトの名無しさん
09/01/31 16:30:27
Directoryを外部から隠蔽したいのですが、どんな感じに実装したらいいですか?

private Directory<int,int> _dic;
public Directory<int,int> dic{
get ...
set ...
}
みたいにそのままプロパティにしちゃうと、外からdic[key]=1;って叩けないですよね?

437:デフォルトの名無しさん
09/01/31 16:37:42
>436
public int this[int key] { get { return _dic[key]; } }
みたいに隠蔽して必要な値を取得できるメソッドとかだけ公開すれば操作はしようがないので堅いよ。

438:デフォルトの名無しさん
09/01/31 16:47:53
>>436
外から叩けちゃうと隠蔽にならないんだが、そのコードなら別に外から叩けるな。


439:デフォルトの名無しさん
09/01/31 16:48:30
内部にラップしてるDictionaryをそのままの型で公開しちゃったら隠蔽にならないから

440:デフォルトの名無しさん
09/01/31 16:58:52
>>435
>ただ1000回で31秒かかるというのはおかしいな。
>長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。

ハードウェア割り込みタイマーの周期次第じゃないの?
この周期はどこかのアプリがtimeBeginPeriodを使うだけで
簡単に変わるから、単純にOSとCPUだけ並べて
おかしい/おかしくないとは言えないよ。

Windowsだとデフォルトの割り込み間隔が16msecってのはよくある値だし
20msecのタイマーを仕掛けたら32msecごとにコールバックされていた
と考えればむしろ辻褄があう。(32msec×1000で約32s)

>>434 の環境でメディアプレイヤーなんかを同時に起動してるだけで
結果は変わるんじゃないかね。

441:デフォルトの名無しさん
09/01/31 17:05:31
単に終了イベントを待つのにビジーループさせてるんとちゃう

442:デフォルトの名無しさん
09/01/31 17:12:00
C#で、書き方を迷っているんだけど、ちょっと相談に乗ってくれないか
例えば、ファイルコピーをするメソッドで、コピー元が無ければ例外を発生する場合

public bool CopyTo(string fromFileName, string toFileName)

1)
if (!this.GetIsFileExistsfromFileName,  
 throw new FileNotFoundException();
System.IO.File.Copy(fromFileName, toFileName, true);
return true;

2)
if (this.GetIsFileExists(fromFileName),  
{
 System.IO.File.Copy(fromFileName, toFileName, true);
 return true;
}
else
 throw new FileNotFoundException();

上下のどちらがいいのかな。

443:デフォルトの名無しさん
09/01/31 17:13:15
それを踏まえて、さらにコピーの上書不許可時にコピー先にファイル名存在でfalseを返すとき
public bool CopyTo(string fromFileName, string toFileName, bool canOverride)

1)
if (!this.GetIsFileExists(fromFileName))
 throw new FileNotFoundException();
if (!canOverride)
{
 if (this.GetIsFileExists(toFileName))
 return false;
}
System.IO.File.Copy(fromFileName,toFileName, false);
return true;

2)//ビルド時にエラーになるかも
if (this.GetIsFileExists(fromFileName))
{
 if (canOverride)
 {
  System.IO.File.Copy(fromFileName,toFileName, false);
  return true;
 }
 else
 {
  if (this.GetIsFileExists(toFileName))
  return false;
 }
}
else
 throw new FileNotFoundException();



444:デフォルトの名無しさん
09/01/31 17:13:52
3)
if (this.GetIsFileExists(fromFileName))
{
 if (!canOverride)
 {
  if (!this.GetIsFileExists(toFileName))
  {
   System.IO.File.Copy(fromFileName,toFileName, false);
   return true;
  }
 }
}
else
 throw new FileNotFoundException();
return false;

こんな書き方があると思うんだけど、見やすいというか、わかりやすい書き方が思いつかない。
なんかいいアイデアないかな・・

445:デフォルトの名無しさん
09/01/31 17:14:35
引数チェックは上にまとめたいから1

446:デフォルトの名無しさん
09/01/31 17:15:19
bool返す必要があるのか疑問ではある

447:デフォルトの名無しさん
09/01/31 17:18:02
説明がないとわからないようなbool値を返すな

448:434
09/01/31 17:21:02
んじゃおれも貼ってみる。ヘルプのサンプル改変だけど、どこかおかしい?
using System;
using System.Threading;
using System.Collections.Generic;
class TimerExample
{
  static void Main()
  {  AutoResetEvent autoEvent   = new AutoResetEvent(false);
    StatusChecker statusChecker = new StatusChecker(1000);
    TimerCallback timerDelegate = new TimerCallback(statusChecker.CheckStatus);
    Timer stateTimer = new Timer(timerDelegate, autoEvent, 1000, 20);
    autoEvent.WaitOne(60000, false);
    stateTimer.Dispose();
  }
}
class StatusChecker
{
  int invokeCount, maxCount;
  public StatusChecker(int count)
  {  invokeCount = 0;
    maxCount = count;
    Console.WriteLine(DateTime.Now);
  }
  public void CheckStatus(Object stateInfo)
  {  AutoResetEvent autoEvent = (AutoResetEvent)stateInfo;
    if(++invokeCount == maxCount){
      Console.WriteLine(DateTime.Now);
      autoEvent.Set();
    }
  }
}

449:デフォルトの名無しさん
09/01/31 17:27:03
>>435 のコードを実行してみた

Pentium4@2G WinXP .NET 3.5SP1
結果 00:00:31.2455778

というわけで31秒かかる環境はここにもある。

450:434
09/01/31 17:34:00
>>435のコードは31.193秒だった。同じだね。
Vista Home Premium
Core2 Duo T7300@2.00GHz

451:デフォルトの名無しさん
09/01/31 17:38:53
>>448
こちらは、21-22秒で完了。起動時の1秒待機があるから20.5秒くらい。
>>440の説が正しいなこりゃ。


452:デフォルトの名無しさん
09/01/31 17:45:43
戻り値と例外モデルが混在してるのがイライラする。

453:デフォルトの名無しさん
09/01/31 17:50:32
リアルタイムOSじゃないんだから無理ってのが出ないのはそこまでの正確さは求めていないってこと?

454:434
09/01/31 18:08:02
しつこいが、System.Windows.Forms.Timerでも試してみた。
private void timer1_Tick(object sender, EventArgs e)
{
label3.Text = (Convert.ToInt32(label3.Text) + 1).ToString();
}
というカウントアップをリアルタイム描画。
1000回回して31.24秒だった。
もういいや。

>>453
それは、(ひょっとすると元質問者以外は)百も承知でしょ。

455:デフォルトの名無しさん
09/01/31 18:47:05
>>445-447
ごめん、例が悪かったね。返り値が必要/不必要という点でなくて、
そういう返り値を出したいとき、どう書くのがいいのかなと思って。

別の例を出したほうが理解してもらいやすいのかな。
public int GetType(string word) 例えばword=="nullpo"の時0で、それ以外1を返すとき、
わかりやすいのはどれだろう。

if (word == "nullpo") ■1
 return 0;
else
 return 1;

if (word == "nullpo") ■2
 return 0;
return 1;

int type = 1;
if (word == "nullpo") ■3
 type = 0;
return type;



456:デフォルトの名無しさん
09/01/31 18:48:24
それを踏まえて、canAcceptNullpoがTrueの時には、1を返したいとすると、
public int GetType(string word, bool canAcceptNullpo)

if (word == "nullpo") ■a
 if (canAcceptNullpo)
  return 1;
 else
  return 0;
else
 return 1;

if (canAcceptNullpo) ■b
 return 1;
else
 if (word == "nullpo")
  return 0;
 else
  return 1;

if (canAcceptNullpo) ■c
 return 1;
if (word == "nullpo")
 return 0;
else
 return 1;

などあると思うけど、もしわかりやすいアイデアあったら頼みます。

457:デフォルトの名無しさん
09/01/31 19:02:09
うぽ
return (word == "nullpo") ?  ((canAcceptNullpo) ? 1: 0) : 1;
というのは冗談として、
事前条件的なものは早めにチェックして単独でreturnしたほうがいいと思いますよ。
引数の検査、つまりnullチェックのや範囲チェック的なものはそれ。


458:デフォルトの名無しさん
09/01/31 19:05:44
正直、「それを踏まえて」の人が何を主張したいのかよーわからん。
どうでもいいだろそんなの。

そもそも最初の質問者の質問意図と全然違うこと言ってるのに「それを踏まえて」
ってどういう神経?

459:デフォルトの名無しさん
09/01/31 19:11:33
戻り値と例外モデル混ぜるなってアドバイスは
素直に受け止めておいたほうがいいとおも
例外の役割のうちに一貫したエラー処理メカニズムの提供があるんだから
>>455-456よりよほど重要だ

460:デフォルトの名無しさん
09/01/31 19:12:19
エラー処理じゃないか。通知だね

461:デフォルトの名無しさん
09/01/31 21:02:03
Visual Studioで質問

デバックなしで実行。
開いたウィンドウをクリックすると
そのウィンドウが最小化されてしまう。
つまり最大化やら最小化ができない。

複雑でも何でもないんだが教えてくれ…

462:デフォルトの名無しさん
09/01/31 21:03:23
で、どこに質問があるの?

463:デフォルトの名無しさん
09/01/31 21:09:12
>>461
フォームのプロパティを確認しろ

464:デフォルトの名無しさん
09/01/31 22:13:49
みんなありがとう。なんか釈然としなくてね。

>>457
単独で、returnできるうちにしてしまうってのが正解なのかな。やっぱり。

>>458
>どうでもいいだろそんなの。
それならいいんだけどね。なら動けばなんだっていいみたいな感じが自分ではするので、
何か可読性がよく、わかりやすい方法が内かなと思って。

「それを踏まえて」の前はif文によって異なるreturn値を返す方法についての方法論を示したということ。
「それを踏まえて」の後は、その異なるreturn値に、さらに例外がでてきた場合の例なんだけど、
書いていて旨い例が見つからず、何かもっと言い例がないかなと思ったの。

>>459
了解、心にとめておきます。
ただ、手近にあってソースで例を書いたので、戻り値と例外が一緒くたの例になってしまった。
例が悪かった。すまない。よければ、>>455>>456の書き方で、
自分はこうしてるみたいな理由があったら教えてほしい。

465:デフォルトの名無しさん
09/01/31 22:25:50
だからそんなことどうでもいいって。
もう、そんな些細なことに固執して宗教論争してても飯が食えるような
牧歌的な時代じゃないんだから。

もっと他に理解したり習得したりすべきことが山ほどあるだろ。

466:デフォルトの名無しさん
09/01/31 23:21:19
>>464
そういう些細なことまで書いてあるCode Completeって本がある
複数リターンについても記述があったはずだからまずは立ち読みで

467:デフォルトの名無しさん
09/01/31 23:49:29
>>465
どうでも良くないだろ。こういうのは大事だぞ。
生産性や可視性の観点から重要。
最近はPCの性能が良くなったからか、
同じスコープでインスタンスを返すループを伴うメソッドやプロパティを、
何の資源も消費せずに、いくらでもインスタンスが出てくる
打ち出の小槌みたいに簡単に使う傾向があるしな。

468:デフォルトの名無しさん
09/02/01 00:12:10
命名規則で質問ですが

動詞に対する結果を示すbool型変数の名前はどうしてますか

IsCreated IsClosed 等、Is○○○だと英文法的におかしいので

469:デフォルトの名無しさん
09/02/01 00:14:59
おかしくないですよ。

470:デフォルトの名無しさん
09/02/01 00:15:53
IsCreated IsClosedなんて.NET Frameworkのクラスライブラリにいくらでもあるし
英文法的にも別におかしくない

471:468
09/02/01 00:25:58
そうですかありがとうございます

472:デフォルトの名無しさん
09/02/01 02:31:40
Wikipedia項目リンク

473:デフォルトの名無しさん
09/02/01 03:09:39
Process.Startで起動した外部プログラムからの
戻り値を受け取ることは出来ますか?

474:デフォルトの名無しさん
09/02/01 03:10:50
ExitCodeプロパティ


475:デフォルトの名無しさん
09/02/01 05:30:49
>>468
引数やインスタンス名まで含めて一つのセンテンスと捉えると、寧ろ自然なことが多い

476:デフォルトの名無しさん
09/02/01 10:03:38
HashSetがなぜか見つからない言われるなーと思ったら
Genericの中でこいつだけdllが違うのか
しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。

477:デフォルトの名無しさん
09/02/01 10:24:45
3.5で追加されたもんだから仕方ない
一応csc.rspには入ってるけどな

478:デフォルトの名無しさん
09/02/01 11:21:44
HashSetってなんに使うんだ?

479:デフォルトの名無しさん
09/02/01 11:30:00
>>476
>しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。

プロジェクトテンプレートの設定次第。
デフォルトで参照設定に追加されている人も結構多いはず。
LINQ用のクラスもSystem.Coreに含まれてるから。

LINQを使うのにいちいち参照設定が必要だったって人はあんまり見ないよね?
そういう人ははHashSetも最初からIntelliSenseに表示されるように見えているはず。

480:デフォルトの名無しさん
09/02/01 11:36:44
>>468
bool型のプロパティの名前をisやhasで始まるのは定番中の定番。
isなしで形容詞or過去分詞のみのパターンも、それはそれで定番。

481:デフォルトの名無しさん
09/02/01 11:55:08
過去分詞のみなのはイベントの名前にしていただきたいところだがな

482:デフォルトの名無しさん
09/02/01 12:37:39
Javascriptから来た子は、OnClickとかがイベント名じゃないことに文句言ってた

483:デフォルトの名無しさん
09/02/01 12:39:36
VBAもOnClickってあったな

484:デフォルトの名無しさん
09/02/01 13:18:35
ちなみに.NETでClickedとかClosedみたいな名前のイベントがあったら
過去分詞じゃなくて動詞の過去形(ガイドライン参照)

485:デフォルトの名無しさん
09/02/01 15:50:10
Putはどっちですか><

486:デフォルトの名無しさん
09/02/01 17:28:11
複数判定する場合はAreなんちゃらにすんの?

487:デフォルトの名無しさん
09/02/01 17:49:53
複数?コードで書いてみて。


488:デフォルトの名無しさん
09/02/01 18:15:04
C#でフォルダを開くProcessについて質問があります。
(1)
this.openProcess = new System.Diagnostics.Process();
this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\";
this.openProcess.StartInfo.FileName = @"C:\Wnidows\explorer.exe";
openProcess.Start();

(2)
System.Diagnostics.Process openProcess = System.Diagnostics.Process.Start(@"C:\略\My Documents\");

(3)
System.Diagnostics.Process.Start(@"C:\略\My Documents\");

(2)と(3)では、My Documentsを開くことができます。
(1)の場合は、引数をうまくとれず、C:\が開いてしまいます。
この理由と、引数としてフォルダを指定する方法を教えてください。


489:デフォルトの名無しさん
09/02/01 18:15:51
○ is △? → ○.Is△で○が複数になることって無いんだよね
○がコレクションの場合は一つのコレクションとみなす

490:デフォルトの名無しさん
09/02/01 18:19:21
>>488
半角空白を含む引数は" "で括る
基本だよ

491:デフォルトの名無しさん
09/02/01 18:28:18
>>490
えっ?
this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\";
と""でくくってあると思うんですけど…。
違ってたらごめんなさい。
というか、C:\Windowsとかの半角空白を含まないフォルダも開けないのです。


492:デフォルトの名無しさん
09/02/01 18:34:02
>>491
そのダブルクォーテーションはC#の文字列を作る意味しかない。
その中身の文字列にダブルクォーテーションを入れないといけない。
"\"C:\\略\\My Documents\\\""のように。

493:デフォルトの名無しさん
09/02/01 18:53:58
>>492
なるほど!
そうでしたか。できました。ありがとうございました。


494:デフォルトの名無しさん
09/02/01 20:46:31
>>484
BegunかBeganか迷った末にStartedでお茶を濁すのですね。わかります。

495:デフォルトの名無しさん
09/02/01 22:18:17
>>494
あるある

496:デフォルトの名無しさん
09/02/02 00:07:25
文字列の定義にstaticクラスを使ってるんですが

public static const Define{
public const string Type0 = "hoge0";
public const string Type1 = "hoge1";
....
}

これだと文字列と比較するときにで

string temp = "bar";
if( bar == Define.Type0){
...
}
else if( bar == Define.Type1){
...
}

といちいち書かなくちゃならんのです。
かといって
public static const Define{
public const int numofNames = 10;
public const string[numofNames] Names = { "hoge0", "hoge1", ...., "hoge9"};
}

みたいな定義はstaticクラスないでは出来ないみたいだし・・・
何か良い方法ないですかね

497:デフォルトの名無しさん
09/02/02 00:10:46
「かといって」以前と以後で話がまるでつながってないんだが?

498:デフォルトの名無しさん
09/02/02 00:11:37
constを諦めて、static readonlyにしたらだめなの?

499:デフォルトの名無しさん
09/02/02 00:11:58
配列にしたいけどなんかできないみたいだから
Type0, Type1, ... みたいにしてるけど、
何かいい方法ない? って聞いてる、
と、よく分かるけど

500:デフォルトの名無しさん
09/02/02 00:17:42
>>499
497 じゃないけどお前の説明でやっと意味がわかった。
それなら、

public static readonly ReadOnlyCollection<string> Type =
 new ReadOnlyCollection<string>(new [] {
  "hoge01",
  "hoge02",
 });

こういうことかな?ReadOnlyCollection<string> は本当は継承したクラスにしたほうがいいんだけども

501:デフォルトの名無しさん
09/02/02 00:23:04
public static const Define{
public static readonly string[] Names = { "hoge0", "hoge1", ...., "hoge9"};
}
じゃだめなのか?
これだと、文字列との比較は
if(bar == Define.Names[ "hoge0" ])
のように書くことになる。

502:デフォルトの名無しさん
09/02/02 00:29:23
>500-501
おー、どっちもできました。
constだとnewできなくて、readonlyだとnewできるんですね。



503:デフォルトの名無しさん
09/02/02 01:18:52
Visual C# 2008をインストールして使い始めたんですが、
テキストエディタでコーディング中に表示されるポップアップヘルプの中身が英語なんです。
前使ってたヴァージョンでは日本語だった気がしますが、どうやったら日本語化できますか。
ちなみにメニュー等は全て日本語です。

504:デフォルトの名無しさん
09/02/02 01:24:35
>>503
URLリンク(blogs.msdn.com)
これか?

505:デフォルトの名無しさん
09/02/02 01:56:30
Visual C# 2008環境のデバッグについて質問があります。
開発環境をインストールしていないターゲットマシン(XP)で、
エラーメッセージをファイルに落とすには、
どのようにコンパイルしたらよいのでしょう?

506:デフォルトの名無しさん
09/02/02 04:05:05
Visual Studio C# 2008で質問があります。
コンパイルをしてexeファイルが出来上がるのですが、
これの会社名や著作権の情報を変更するにはどうすれば良いのでしょうか?

507:デフォルトの名無しさん
09/02/02 04:12:29
propertiesのAssemblyInfo.csを修正

508:デフォルトの名無しさん
09/02/02 05:34:26
ありがとうございました。

509:デフォルトの名無しさん
09/02/02 05:39:50
どういたしまして。

510:デフォルトの名無しさん
09/02/02 06:53:14
DirectryクラスのGetFilesより早く一覧を取得する方法ないすか

再帰で一覧取得しようとしてるんだけど
たかだか3000ファイル程度でもAPIのFind***Fileに比べて遅くてたまらねえっす

511:デフォルトの名無しさん
09/02/02 07:06:31
ならAPI使えばー

512:デフォルトの名無しさん
09/02/02 07:27:01
身も蓋も無いこと言わないで下さい><

…最終的に解決しなきゃそうします多分

513:デフォルトの名無しさん
09/02/02 09:59:53
データベースからとってきたdatetime型の日付形式の時間部分だけを抜き取って、
XX:XXではなくXX時XX分と表示させたいのですが、簡単な方法ありますでしょうか?

514:デフォルトの名無しさん
09/02/02 10:15:19

MessageBox.Show(DateTime.Now.ToString("HH時mm分"));

ってやってみ

515:デフォルトの名無しさん
09/02/02 10:27:10
XmlsAa.AaRow B =(XmlsAa.AaRow)C.Rows[0];
って何をやっているんですかね?Rowってのはテーブル1行分使う意味らしいのですが
()とかRows、[0]がわかりません。配列?

516:デフォルトの名無しさん
09/02/02 10:33:41
(XmlsAa.AaRow)はキャスト
[0]はインデクサ

元が何型かは知らんけど
Rowsコレクションの最初の要素をXmlsAa.AaRow型にキャストしてるだけ

分からんならキャストとインデクサでググれ

517:513
09/02/02 10:34:17
普通に抜き出して置換することにしました。
無駄な書き込み申し訳なかったです。

518:デフォルトの名無しさん
09/02/02 10:35:49
ええ!? 514ガン無視!?

519:デフォルトの名無しさん
09/02/02 10:36:27
エエエエエエ(AA略)

520:514
09/02/02 10:37:15

       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \
  |     (__人__)    |  
  \     ` ⌒´     /

521:デフォルトの名無しさん
09/02/02 10:44:28
>>510
>DirectryクラスのGetFilesより早く一覧を取得する方法
>再帰で

DirectoryInfoクラスのGetFiles使ってるよね?
再帰で取得することよくあるけど、そんなに差はなかったような気がするが

522:513
09/02/02 10:45:00
MessageBoxに表示したいわけではありませんので。

523:デフォルトの名無しさん
09/02/02 10:48:40
エエエエエエエエエエエエエ(AA略)


524:デフォルトの名無しさん
09/02/02 10:50:20
何この流れ・・・

525:デフォルトの名無しさん
09/02/02 11:07:55
>>516 ぐぐったけどよくわかりませんでした。ぐぐり続けてみます。C#というかプログラムは単語が理解できなくてつまずくなぁ

526:デフォルトの名無しさん
09/02/02 11:43:29
環境
WinXP SP3
C# 2.0

今度デルファイで作られたソフトkらソケット通信(TCP)を利用してデータの受信を行うことになりました。
相手は1情報を512バイト固定で送信してくるそうです。

例えば相手が以下のようなデータを送信してきて受信完了した場合
どのように受信したデータを展開すればよいのでしょうか?

形式はなんでもかまわないので受信データをひとまず展開できれば構わないのですが・・・
一応受け取ったデータを同じような構造をもったクラスに展開して内部で処理用と考えています。

i1 integer;
i2


25回(100バイト分)

d1 double
d2


8回(72バイト分)

yobi : array[0..339] of shortint
(340バイト分)

計512バイト

こんな感じなのですが、なにかこういう展開のヒントや情報でも構わないのでお教え願えませんか?

527:デフォルトの名無しさん
09/02/02 12:07:35
構造体にしといてbyte[]からMemoryStream作ってBinaryFormatterでDeserializeとか?

528:デフォルトの名無しさん
09/02/02 12:22:27
C#でゲーム作って配布すると、
ソースコードを見られてしまうの?

529:デフォルトの名無しさん
09/02/02 12:27:34
それがなにか?

530:デフォルトの名無しさん
09/02/02 12:30:01
みんなで公開羞恥プレイですよ

さああなたも御開帳

531:デフォルトの名無しさん
09/02/02 12:55:11
>>527
そんな感じで出来るんならやってみようと思います。
ありがとうございました。 

532:デフォルトの名無しさん
09/02/02 12:58:59
>>526
形式は何でも構わないってことはDelphiで作られたソフトってのも変更可能なわけ?
その割に512バイト固定とか言ってるけど

.NET的にはバイナリの塊を処理するのは
BinaryReaderで読み取っていったり一つずつBitConverterで変換していくのが基本

533:デフォルトの名無しさん
09/02/02 13:21:48
nslookup.exeで調べた相手のSMTPサーバーに直接メールを送る事って出来なくなったのね・・・

534:デフォルトの名無しさん
09/02/02 13:27:35
何年前の話だよ

535:デフォルトの名無しさん
09/02/02 14:34:06
>>534
今日の話ですけど?w

536:デフォルトの名無しさん
09/02/02 14:43:26
さすが初心者スレだ

537:デフォルトの名無しさん
09/02/02 14:45:40
まあ取り敢えず独り言はチラシの裏に書いてろ
質問したいなら質問の体裁を取れ
みたいな

538:デフォルトの名無しさん
09/02/02 14:47:43
>>532
変更は可能と言えば可能なんですが・・・
出来るだけデルファイ側は変更しないようにとのことなので…orz

例えばa1,a2辺りを処理するのは
おとなしく受け取ったバイト配列を BitConverter.ToInt32
で一個づつ自分用にばらしていくのが妥当という感じでしょうか?


539:デフォルトの名無しさん
09/02/02 15:14:40
そうだよ
直接構造体に当てはめるなんてメモリイメージに縛られすぎ
というのがC#の方針
.NET間ならBinaryFormatterのシリアライズとかで十分だからな

540:デフォルトの名無しさん
09/02/02 15:31:15
エンディアンやバウンダリの問題もあって
テキストベースのプロトコルにすることが多くなった。
固定レコードは流行らなくなったな。

541:デフォルトの名無しさん
09/02/02 15:33:40
Visual Studioやってたら、'private'は無効です。のエラーが
毛テスタ

542:デフォルトの名無しさん
09/02/02 15:35:44
'private'を削りなさい

543:デフォルトの名無しさん
09/02/02 15:37:30
前の行の最後にセミコロンが無い

544:デフォルトの名無しさん
09/02/02 15:39:40
メソッドの中で private 宣言した

545:デフォルトの名無しさん
09/02/02 15:43:21
24時間働いているなら労働基準監督署へ

546:デフォルトの名無しさん
09/02/02 15:49:38
private 削ると、使ってる変数が全部定義がありませんってエラーきますた。
セミコロンはありまふ
メソッドの中で宣言・・・これかもです。ありがとう。
Protected voidなんちゃらの処理の中の変数宣言で、privateはダメなのですかね

547:デフォルトの名無しさん
09/02/02 15:53:37
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄



548:デフォルトの名無しさん
09/02/02 16:10:49
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

       ∧∧
        ヽ(・ω・)/   ズコー
      \(.\ ノ
     、ハ,,、  ̄
     ̄


549:デフォルトの名無しさん
09/02/02 16:59:36
ふらっとC#
503です。
ターゲットマシン(XP)でのFormアプリケーションのデバッグ方法、助言お願いします。
いまのところMessageBoxでいくつか変数を表示しようとしているます。
問題はMessageBoxさえ表示されないことで、ということはその前でエラーが起きていることはわかるのです。
かといって頭からぜんぶMessageBoxというのもなかなか途方にくれる話ですし。
デバッグのときに表示されるような情報を、一括してテキストファイルに落とせれば楽だと思うのです。
そういう方法ってあるんですか?


550:デフォルトの名無しさん
09/02/02 17:04:05
URLリンク(msdn.microsoft.com)(VS.80).aspx

551:デフォルトの名無しさん
09/02/02 18:07:36
>>539
なるほど
その方向で進めていくことにしました。

確かにマネージド同士なら楽なんですが・・・
そうでないものは初めてでちょっと色々 orz

552:デフォルトの名無しさん
09/02/02 18:26:36
1行目に#define DEBUGと追加して、Debugフォルダにexeファイルができました。
ありがとうございました。
がっ。
エラー情報やいずこ!?


553:デフォルトの名無しさん
09/02/02 18:51:48
>>552
構成ファイルのapp.configにこれをぶち込んどけ
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add name="Text" type="System.Diagnostics.TextWriterTraceListener"
                initializeData="c:\log\TraceSample.txt" />
        <!-- <add name="Text" type="System.Diagnostics.ConsoleTraceListener" /> -->
        <!-- <remove name="Default" /> -->
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

554:デフォルトの名無しさん
09/02/02 19:19:38
>>522
ワロタ

555:デフォルトの名無しさん
09/02/02 20:10:05
>>535
今日知ったんなら今日の話だよなw
>>534の負けww

556:デフォルトの名無しさん
09/02/02 20:12:09
>>552
それじゃDEBUGの意味がないだろ
TraceクラスとTRACE使え

557:デフォルトの名無しさん
09/02/02 21:59:35
C#ってクラス名に漢字使えたよね?

558:デフォルトの名無しさん
09/02/02 22:01:47
うん

559:デフォルトの名無しさん
09/02/02 23:11:00
>>557
やめろ!やめるんだ!
そ、そんなソースは認めないぞ

#define ノシ throw
calss 三旦 : System.Exception {..}

if ( this.Value < this.Min ) ノシ 三旦;

560:デフォルトの名無しさん
09/02/02 23:14:17
#define がないし。

561:デフォルトの名無しさん
09/02/02 23:14:37
>>559
C# で define は値を定義できないぞ

562:デフォルトの名無しさん
09/02/02 23:19:06
abstract class A
{
 public abstract int Hoge { get; }
}

というクラスがあり、これを継承したBでgetの実装をします。
そしてクラスB内から値をセットするのにprivate setを追加したいのですが
CS0546になりできません。
こいうことはできないのでしょうか?

class B : A
{
 public override int Hoge
 {
  get { 〜 }
  private set { 〜 } // CS0546
 }
}

563:デフォルトの名無しさん
09/02/02 23:19:48
カルス・・・



564:デフォルトの名無しさん
09/02/02 23:29:26
インターフェイスならできるけどクラスではできません

565:デフォルトの名無しさん
09/02/03 01:23:41
WindowsXP C# 2008で質問です。
ビューアーを作り、それをデフォルト起動アプリケーションにしました。

string[] args = Environment.GetCommandLineArgs();
if (args.Length != 1) {Title = System.IO.Path.GetFileName(args[1]);}

で、ファイル名をタイトルにしてウィンドウに表示しようとしています。
exeファイルにデータファイルのアイコンをドラッグするとファイル名を取得できますが、データファイルを単独でダブルクリック起動する場合には取得できません。
デフォルト起動の場合、データファイルのファイル名は、exeファイルにどのように渡されていて、exeからはどのように取得できるのですか?
ご教示願います。



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5000日前に更新/209 KB
担当:undef