09/03/01 08:45:43
C#, C♯, C#相談室 Part51
スレリンク(tech板)
WPF(XAML,XBAP,.NET3.5)GUIプログラミング
スレリンク(tech板)
初心者のためのプログラミング言語ガイド Part13
スレリンク(tech板)
3:デフォルトの名無しさん
09/03/01 08:45:53
参考サイト。まずはここで検索してから。
URLリンク(www.google.co.jp)
URLリンク(msdn.microsoft.com)
URLリンク(homepage3.nifty.com)
URLリンク(www.atmarkit.co.jp)
URLリンク(dobon.net)
URLリンク(jeanne.wankuma.com)
URLリンク(www.labasp.net)
4:デフォルトの名無しさん
09/03/01 09:26:32
>> スレリンク(tech板:989番)
> 例えばゲームなんかだとそれぞれに独立したカウンタなんかを持たせたい時に必要です。
> それすらも別クラスにわけろというなら著しく生産性が落ちまくります。
OOPL的には”それぞれ”はオブジェクトなので,「独立したカウンタ」をするオブジェクトがあればいいと思うんだけど.
あと,内部的に完全に隠蔽されている変数って,なんかとてもキモいんだがその辺はどうやって折り合いつけるの?
(外から初期化したいときとか,値を変更したいときとか)
5:デフォルトの名無しさん
09/03/01 10:55:18
フィールドと変数は同じ意味ですか?
6:デフォルトの名無しさん
09/03/01 11:00:54
>>5
変数は意味が広い。フィールドもローカル変数も変数と呼ばれることもある
7:デフォルトの名無しさん
09/03/01 11:52:55
dockの優先度がさっぱりわかりません。
優先順を設定する方法はありますか?
8:デフォルトの名無しさん
09/03/01 12:28:52
ZOrder、つまりControlsへの挿入順
右クリックから前にとか後ろにとか
あとControlsのSetChildIndex
9:デフォルトの名無しさん
09/03/01 12:43:33
前スレの>>986が言った
> メソッドの中でしか使わないけど値を保持しておきたいローカル変数ってたまにありますけど、
これは正しいよ。
なぜかC#しかやってない人は頑なに否定する傾向があるようだけど。
例えばこれが可能だと、シングルトンパターンとか、IDisposable.Disposeを実装したときありがちな
2回目以降の呼び出しはスルーする処理が綺麗に安全に書ける。
10:デフォルトの名無しさん
09/03/01 12:46:25
つまり関数の呼び出しをカウントするための変数ってことですね
インスタンスフィールドでFAじゃ・・・ないの?
綺麗?安全?だからか
11:デフォルトの名無しさん
09/03/01 12:47:10
使い道はあるかもしれないけど複雑になるのが嫌だから省いただけだろ
もともと過去の名残で残ってるだけだし
12:デフォルトの名無しさん
09/03/01 13:56:08
>9
JavaScriptみたいに匿名メソッドを返す匿名メソッドを実行する形で
メンバ変数のdelegateを初期化すれば実現できると思うけどコンパイルが通らない。
こんな感じになると思うのだけど。
public static Func<int> TestFunc = (() => {int i = 0; return (() => i++);})();
13:デフォルトの名無しさん
09/03/01 14:04:24
型推論に失敗してるだけだろ
適当にActionとかヒント与えたら通る
14:デフォルトの名無しさん
09/03/01 14:06:55
すまんActionじゃなくてFunc<int>か
public static Func<int> TestFunc = new Func<Func<int>>(() => { int i = 0; return new Func<int>(() => i++); })();
こうだな
15:デフォルトの名無しさん
09/03/01 14:25:13
>>9
あるよって言うのは半分同意せんでもないが、使っているとこに
手を入れるときにメンバに直すこともかなりの割合で経験上
発生するので実質いらんと思う。
否定する人ですが、こういったらいいですかね?C# だけしか
やっていなくて否定している人ばかりではないですよと
ちなみにお前が挙げた例で、IDisposable.Dispose の例、その
フラグを後で他から参照したくなることは多くて結局 IsDisposed
実装したりだとかな(というか ObjectDisposedException どうする
んだよそれしたら)。
つまり、乱用もよく見かけるってことか。なので初めからメンバに
持ってろと。
16:デフォルトの名無しさん
09/03/01 14:28:39
人をいきなり「お前」呼ばわりする奴ってどうして例外なく馬鹿なんだろ。
「こういう場合は」必要だ、って主張の反論に「こういう場合」と違う場面を
挙げてそれって反論として成立してると思ってるのかな。
17:デフォルトの名無しさん
09/03/01 14:33:31
何でもいいけど和やかなカンジで頼む
18:デフォルトの名無しさん
09/03/01 14:33:34
最大の理由は「Javaに無いから」なんだろうなきっと
意図的に捨てたんだから無いもんは無い
19:デフォルトの名無しさん
09/03/01 14:36:33
プログラミングC# 第5版の日本語版が出たらしいのですが、
JavaをやってたC#初心者には難しいですか?
Webの入門サイトだけじゃなく、手元に本が欲しくなってしまって
20:デフォルトの名無しさん
09/03/01 14:42:54
難しかったらJavaをやってたとは言えない
21:デフォルトの名無しさん
09/03/01 14:47:34
別に難しくはないと思う。
パラパラと見ただけなんだけど印象としては、
説明が親切なつもりなんだろうけど回りっくどいだけで全然分りやすくない。
あと冒頭で同性愛をカミングアウトするのはいらないと思った。
誰も著者の私生活になんて興味ないのに。
22:デフォルトの名無しさん
09/03/01 14:48:17
>>16
気分害した、解りにくいなら謝りますが、本旨は「挙げた例にすら乱用してる
っぽい感じのものがあるよ」って話です。
これで「たまに」のラインが変わってくるのですよ
23:デフォルトの名無しさん
09/03/01 14:58:52
>>22
過剰反応だったかなごめん。
まあ確かにそんなに有用な場面が多いわけではないのは俺も認めるところ。
あった方がいいとは思うけどなくてもそんなに困らないのは確か。
24:デフォルトの名無しさん
09/03/01 14:59:34
何でもいいけど和やかなカンジで頼む
25:デフォルトの名無しさん
09/03/01 15:05:03
IDisposable実装するときは、private bool _disposed; を
フィールドにしとくのが定石なんじゃないの?
URLリンク(msdn2.microsoft.com)
26:デフォルトの名無しさん
09/03/01 15:14:26
>>23
さらにいえばなんつーかな、C++ とかだと時間を経るごとにこういう
ので見えるところ消えていくんだよなぁってのがあり。楽する機能として
使っているところな。テンプレートライブラリやらマクロやらではどうして
も必要なときがあってそういうのは残るけども。
そして突っ込んでいくと、後から考えるに明らかに乱用だったなぁと思う
わけだが、事前にこれを予測するのは難しかったなぁってことで結局
状態単位が class スコープに絞るほうが混乱がなくていい気がするんだよ
もちろん単純に経験からくる感覚なので常に正しいとは言わないが
27:デフォルトの名無しさん
09/03/01 15:14:31
コードでタイトルの文字を変える方法がよくわかりません
プロパティで変えるのは出来ますが、起動中に変えたいのです
普通に考えてform1.text=だと思ってたんですがそれだといかんようで。。。
28:デフォルトの名無しさん
09/03/01 15:21:25
form1はクラスだろ
インスタンスじゃねえだろ
29:デフォルトの名無しさん
09/03/01 15:24:24
>>27
ヒントはthisそして省略
30:デフォルトの名無しさん
09/03/01 15:54:23
全然わかりません・・・
31:デフォルトの名無しさん
09/03/01 16:14:57
>>4
外から初期化したり変更出来ないメンバ変数なんて普通にあると思うけど。
特定のメソッドからしか参照できないメンバ変数って革命的じゃない?
宣言だけ明確にしてれば変数名に悩む必要ない!
32:デフォルトの名無しさん
09/03/01 16:19:20
言語をそういう風に拡張するのは難しくはないのだろうが、下のどっちの機能が欲しいんだ?
Sub f() ' VB クラス内の関数
Static anonimous As Integer = 0; // インスタンス変数
void f() { // c++ クラス内のメンバー関数
static int anonimous_static = 0; // クラス変数
実装は結局、匿名のメンバーまたはスタティックメンバーを追加するだけなのだろうけど。
int f_anonimous = 0;
static int f_anonimous_static = 0;
void f() {
f_anonimous++;
f_anonimous_static++;
33:デフォルトの名無しさん
09/03/01 16:22:59
>>31
クラス分けすれば済むんじゃないか。
そんな変な機能は迷惑
34:デフォルトの名無しさん
09/03/01 16:47:43
>>32
staticだとオブジェクトを複数生成した時困るよ。
>>33
糖衣構文だよ。
匿名型とかラムダ式だってクラスわけすれば済むけどもっと手軽に書けるようになったじゃん。
35:デフォルトの名無しさん
09/03/01 16:57:01
そのうちC#にも糖衣構文でmoduleが欲しいとか言い出しそうだな。
そろそろすれ違いだこの辺にしよう。
36:デフォルトの名無しさん
09/03/01 17:32:29
>14
やはり省略できないのか。
もうちょい型推論頑張ってくれと思うけど仕方がないか。
37:デフォルトの名無しさん
09/03/01 17:45:15
C#でマップエディタ作ろうと思うんだけど
marshalとか必要になってくるかな?
C#ってそんなに重くない?
38:デフォルトの名無しさん
09/03/01 17:48:48
要らない
重くない
39:デフォルトの名無しさん
09/03/01 17:54:15
ありがとうございます
40:1
09/03/01 18:01:37
どうでもいいけど俺への感謝はないのか
41:デフォルトの名無しさん
09/03/01 18:03:45
thx
42:デフォルトの名無しさん
09/03/01 18:04:01
>>1
ペッ
43:デフォルトの名無しさん
09/03/01 18:07:24
>>40
死ね
44:デフォルトの名無しさん
09/03/01 19:14:53
ジェネリッククラスのwhere節でなぜSystem.ValueTypeは指定できないんですか?
45:19
09/03/01 19:18:39
>>20
>>21
本屋でチェックしてみます
ありがとうございました
46:デフォルトの名無しさん
09/03/01 21:06:06
IDisposableを実装するのは、破棄すべきアンマネージリソースがあるからであって、
その状態をきちんとマークしておけば、わざわざフラグなんか持つには及ばないと思うんだ。
たとえば、内部的に何かのWin32ハンドルを使っているとすれば、↓こんな感じで。
if (_hProc != IntPtr.Zero)
{
bool success = CloseHandle(_hProc);
if (success)
{
_hProc = IntPtr.Zero;
}
else
{
throw new Win32Exception();
}
}
47:デフォルトの名無しさん
09/03/01 21:12:36
Disposeが例外投げちゃ駄目だろ。
ディスク容量不足の時のFileStreamみたいな悲惨なことになるぞ。
48:デフォルトの名無しさん
09/03/01 21:47:48
C#2.0でForm上に区切り線を設置したいのですが、どうすればいいですか?
Penオブジェクトやらを用意して、Form上に描画しないとならないのでしょうか。
49:デフォルトの名無しさん
09/03/01 21:55:03
>>44
where T : struct
>>48
標準の方法はありません
50:デフォルトの名無しさん
09/03/01 21:57:18
>>48
URLリンク(www.atmarkit.co.jp)
51:デフォルトの名無しさん
09/03/01 22:06:04
>>50
Win95のころからある手法なのに知らない人多いのかな
52:デフォルトの名無しさん
09/03/01 22:11:13
>>49
工エエェェ(´д`)ェェエエ工工
>>50
ありがとうございます。便利だけど関係ないtextboxがあるのは、なんかいやですね・・
>>51
不便ですね。直接描画できると良いのに。
53:デフォルトの名無しさん
09/03/01 22:18:17
Splitterコントロール使ったら?
54:デフォルトの名無しさん
09/03/01 22:19:56
>>52
直接描画したいのなら最初からそうすりゃいいじゃんw
言ってること意味不明だよ。
55:デフォルトの名無しさん
09/03/01 22:24:02
Visual Basic PowerPackにLineって無かったっけ?
56:デフォルトの名無しさん
09/03/01 22:24:17
>52
Visual Basic Power PacksにLineShapeコントロールがあるよ。
57:デフォルトの名無しさん
09/03/01 22:26:08
屈辱的な11文字だなw
58:デフォルトの名無しさん
09/03/01 22:30:32
VS2008だけじゃないの?
URLリンク(www.atmarkit.co.jp)
59:デフォルトの名無しさん
09/03/02 00:13:24
>>44
>>49 で出てるけど where T : struct。
細かい話をすると同時に new() 制約フラグとか valuetype 制約フラグ
とか必要といった話になるので直接 ValueType から継承なクラス指定は
しない。
>>46
根っこはな。Component も IEnumerator<T> も実装していたりする
ので一概に言えるものじゃない。
60:デフォルトの名無しさん
09/03/02 00:35:39
>58
2005でも追加でインストールすれば使えなかったっけ?
61:デフォルトの名無しさん
09/03/02 01:15:35
>>59
でもC++/CLIだとSystem.ValueTypeだけを指定ってのもできるんだよな
62:デフォルトの名無しさん
09/03/02 01:25:43
>>61
それ、C# だと struct 制約のことなんでは。
C# で
class GenericTest<T> where T: struct {}
をコンパイルして逆アセすると、
.class private auto ansi beforefieldinit GenericTest`1<valuetype .ctor ([mscorlib]System.ValueType) T>
になる。
63:デフォルトの名無しさん
09/03/02 03:27:02
すいません質問です。
OpenFileDialogやSaveFileDialogをフォームデザイナから追加したのですが、最後に検索したフォルダの位置を記憶しているようなのです。
もしかしてレジストリとかに最後のフォルダの位置とか記憶してたりするのでしょうか?
64:デフォルトの名無しさん
09/03/02 03:53:43
>>63
インスタンスのプロパティで設定できる。
詳しくはMSDN読め
65:デフォルトの名無しさん
09/03/02 03:56:06
記憶してるのが気味悪いって意味だと主
66:デフォルトの名無しさん
09/03/02 03:58:45
RestoreDirectoryで設定できるって意味だとおも
67:デフォルトの名無しさん
09/03/02 04:34:25
みなさんサンクス。言いたかったことは>>65です。
そしてRestoreDirectoryを少なくともデザイナからの変更した状態では、何も変わっていないような気もして凄く気味が悪いです。
68:デフォルトの名無しさん
09/03/02 04:59:21
イェーイ俺天才
>>64>>66
バーカバーカ
69:デフォルトの名無しさん
09/03/02 05:30:54
変わらないってこと自体おかしいと思うんだが
まさかfalseにして変わらないとか言ってないだろうね
70:デフォルトの名無しさん
09/03/02 07:42:26
カレントディレクトリが変わるからな
71:デフォルトの名無しさん
09/03/02 09:03:10
>>62
C++/CLIでValueType制約にすると <([mscorlib]System.ValueType) T>
これだとValueTypeを継承しただけの参照型(C#では作れない)でも可
デフォルトコンストラクタ制約もない
C++/CLIでvalue class制約にすると <valuetype .ctor T>
これだとValueTypeを継承してなくても値型ならなんでも可(C#では作れない)
C#のstruct制約と同じにするにはwhere T : ValueType, value classにする
72:デフォルトの名無しさん
09/03/02 12:42:43
>>69,70
あー理解しました、ありがとうございます。
カレントディレクトリとFileDialogが固有に保存するディレクトリ位置をごっちゃにしてました。
ただこうなるとFileDialogが固有の値がどこに保存してるかホントにわかりませんね
73:デフォルトの名無しさん
09/03/02 12:49:05
普通にレジストリだけどな
74:デフォルトの名無しさん
09/03/02 14:03:59
最後に検索したディレクトリ=CurrentDirectoryだろ?
固有の値ってなんじぇすか?
75:デフォルトの名無しさん
09/03/02 14:05:56
いいえ
76:デフォルトの名無しさん
09/03/02 14:48:38
>>56
そんなのがあるんだ。
77:デフォルトの名無しさん
09/03/02 15:21:50
>>74
System.IO.Directory.GetCurrentDirectory()静的メソッドで取得できるのがカレントディレクトリ。通常は起動したアプリの位置。
以下さっき確認した方法をば。
1、WindowsFormAppricationを新規作成
2、フォームデザイナ表示して、ツールボックス>適当にOpenFileDialogを追加。
3、フォームのクライアント領域をフォーカスして、適当にプロパティ>Clickイベントを追加。ハンドラでダイアログをShowDialogる。
4、ShowDialog()の前後をMessageBoxでカレントディレクトリ情報を表示。
5、ダイアログのRestoreDirectoryプロパティがtrueとfalseのときの挙動を見比べる。
78:デフォルトの名無しさん
09/03/02 19:15:08
XMLファイルの暗号・復号で行き詰まってしまいました。
ちょっと長くなるのでテキストファイルにして上げました。
一度見てもらえれば幸いです。よろしくお願いします。
URLリンク(uproda.2ch-library.com)
表示できない場合はしたのURLからお願いします。DLキーはそのまま「1」です。
URLリンク(uproda.2ch-library.com)
79:デフォルトの名無しさん
09/03/02 20:03:39
質問
System.Windows.Forms.WebBrowserコントロールで
Navigate("url string") でHtml表示できますが、
Proxyサーバを経由するときはどうしたらいいのですか?
Proxyプロパティを持っているWebClientを使用して
試しにyahoo.co.jpを
WebClientからDownloadData⇒byte[]をstreamに変換
DocumentStreamにセット
DownloadString⇒DocumentTextにセット
とかやってみたんですがスクリプト関係が読み込めないようです。
80:デフォルトの名無しさん
09/03/02 20:12:31
一番楽なのはインターネットオプションで設定しとくことだが
81:デフォルトの名無しさん
09/03/02 21:05:22
>>78
test1.xml
はどんな出力になっているの?
82:78
09/03/02 21:41:32
>>81
ファイルの中身でしょうか?このようになっています。
※改行規制に引っかかったので適当に改行しました。
ちなみに、暗号化されていると思われる部分は毎回内容が違っています。
<root>
<EncryptedData Id="EncryptedElement1" Type="URLリンク(www.w3.org)
c#Element" xmlns="URLリンク(www.w3.org)"><EncryptionMethod Algorith
m="URLリンク(www.w3.org)" /><CipherData><CipherValue>ZdxQ
9vVJIP9l94JL5p+Y8Wth3TZpgPnn/5Ta48lKRBdhsaL87ywnN8lVPcSZYm5emTnWChPk5IiL2iIqClD
tvxzv84ko/9XsbHtj4cv7yLYLH4MZUmX3ds3AEiDIondHwst9EPk7YK5UUERaIPx8rEksIKcOpc8dJb
vB3celcTw=</CipherValue></CipherData></EncryptedData>
</root>
83:デフォルトの名無しさん
09/03/02 21:54:06
>>82
URLリンク(msdn.microsoft.com)(VS.80).aspx
には、
><EncryptedData> 要素の <EncryptedKey> 要素に格納されたセッション キーを
>復号化します。次に、セッション キーを使用して XML 要素を復号化します。
って書いてあるけれど、<EncryptedKey> 要素がないよね?
暗号化は出来ているようだ、って書いてあったけど、その認識が多分誤り
なんじゃないかな。長いのでチェックしきりれないんだけど、多分間違いが
あるのはEncryptメソッドの方だと思う。
84:デフォルトの名無しさん
09/03/02 22:02:26
AESで暗号化しているのに、非対称キーってどういうことなんだろな→マイクロソフト
初期化ベクタと共通キーで、共有鍵暗号のはずなのに。
85:83
09/03/02 22:07:36
>>84
いや、セッションキーはAESなんだけど、それをRSAで暗号化してXMLに埋め込むって
コードのはずが、上手く行っていないって話のようです。
86:83
09/03/02 22:15:06
なんか、
edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));
の後に
edElement.KeyInfo = new KeyInfo();
なのって凄くおかしくない?
87:83
09/03/02 22:43:53
// Create a new KeyInfo element.
edElement.KeyInfo = new KeyInfo();
// Add the encrypted key to the
// EncryptedData object.
edElement.KeyInfo.AddClause(new KeyInfoEncryptedKey(ek));
この順序にしたら、出力が
<root>
<EncryptedData Id="EncryptedElement1" ほにゃらら>
<EncryptionMethod Algorithm="URLリンク(www.w3.org)" />
<KeyInfo ほにゃらら>
<EncryptedKey ほにゃらら>
<EncryptionMethod Algorithm="URLリンク(www.w3.org)" />
<KeyInfo ほにゃらら>
<KeyName>rsaKey</KeyName>
</KeyInfo>
<CipherData><CipherValue>ほにゃらら</CipherValue></CipherData>
<ReferenceList>
<DataReference URI="#EncryptedElement1" />
</ReferenceList>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>ほにゃらら</CipherValue>
</CipherData>
</EncryptedData>
</root>
ってなった。これで、キーが埋め込まれたっぽくない?
88:デフォルトの名無しさん
09/03/02 22:46:15
XMLの要素だけを暗号化してくれるのか
項目を自分で暗号化してxmlに保存するでもいいけど、
一括して暗号化してくれるなら、ライブラリ化しとけば後で便利そうだな
89:デフォルトの名無しさん
09/03/02 22:49:39
まあ、MSDNのサンプルなので間違いも多いってこった。
#MSDNのコードって、何故か、バグはあってもビルドだけはばっちり通るんだよなあ。
90:デフォルトの名無しさん
09/03/02 23:14:48
>>61>>71
そうなのか
C++/CLIでできることをC#では禁止する理由がわからんな
91:78
09/03/02 23:21:43
>>87
ありがとうございます。
お蔭さまで無事解決しました!感謝感謝です!!
それにしても公式のサンプルでも間違いはあるのか。
92:デフォルトの名無しさん
09/03/02 23:24:22
>>90
できたところで全く意味がない
混乱を生むだけ
CILではできるのにC++/CLIではできないことだって当然いくらでもある
93:87
09/03/02 23:32:05
MSDNに関する限り、「公式のサンプル"でも"」という認識は改めるべき。
バグがあるとかいう以前にそもそもヘルプに直書きしてテストしていないような
雰囲気のコードが多い。
94:デフォルトの名無しさん
09/03/02 23:35:17
>>90
一言で言うとややこしかったり仕様にあわなかったり意味が
なかったり。
C# 内の制約は何つーかすごい色々な理由が複雑に絡まり
あってさまざまに制限がかけられている。必要のないパターン
だったり、扱えないものだったり、推論上の問題だったり。
例えば、class ([mscorlib] System.ValueType) なんて制約は
実はありでこれはValueType と Enum だけ OK とか
valuetype ([mscorlib]System.ValueType) と
([mscorlib]System.ValueType) だけの違いは Nullable<T> が
入るかどうかとか。
ちなみに >>71 の説明ちょっと変?というか valuetype special
constraint は Nullable<T> 「構造体」の存在が大きい。
この special constraint で大雑把に言って Nullable<T> が
含まれるのか除外されるのかが決まる
95:デフォルトの名無しさん
09/03/02 23:43:06
SQLを発行してその結果をGridViewに突っ込んでBindしてGridを表示しているのですが
SQLの結果で例えばある列に特定の値があった場合は、その行を表示しないという事をやりたいのですが
どのようにしたら良いでしょうか?
rowdataboundイベントで値のチェックをして
e.row.cells[0].remove()とかを全部の列にやっても小さい枠が残っちゃうんですよね。
96:デフォルトの名無しさん
09/03/02 23:44:48
それをSQLのクエリに書くのが普通でしょ
もしくはDataTable.Select("", "");を使う
97:デフォルトの名無しさん
09/03/03 00:04:04
こんな質問していいかわからんのですが
普段windows認証でsql serverにつないでるのですが
今回sql server接続にチャレンジしたのですが、つながりません・・・・
「ユーザーhogeは接続できませんでした。このユーザーはsql serverの信頼関係接続と関連づけられてません」と帰ってくるのですが
hogeに問題があると思うのですが、通常hogeは何なんでしょう?
ぎ・・・ギブ 日本語・・おkだな
98:デフォルトの名無しさん
09/03/03 00:10:01
hogeに接続権限がないとか?
99:デフォルトの名無しさん
09/03/03 00:12:22
>>98
・・・ということは
SQLマネージメントスタジオで設定するんですか?^^;ひー
100:デフォルトの名無しさん
09/03/03 00:14:03
管理ツールで設定すれば大丈夫です。
101:デフォルトの名無しさん
09/03/03 00:19:45
>>100
SQL Server構成マネージャのことですか?
試行錯誤中
102:デフォルトの名無しさん
09/03/03 00:24:42
RuntimeTypeHandleをTypeを通さずにジェネリック型から直接取る方法はないの?
IL1命令だけで取れるはずなのに
ILを直接書くか,
static class RuntimeTypeHandles<T> {
public static readonly RuntimeTypeHandle Value = typeof(T).TypeHandle; }
くらい?
103:78
09/03/03 00:29:39
>>93
了解しました!
ホント思ってもみませんでしたよ…
104:デフォルトの名無しさん
09/03/03 01:00:47
saでいいじゃん
105:デフォルトの名無しさん
09/03/03 01:08:53
Lanの接続テストをしようとして
ヴァーチャルPc越しに下記コネクションを利用して開こうとしたんですけど
つながりません・・・
C:\を\\にしたり
\SQLEXPRESS;を\\SQLEXPRESS;
にしたけどダメでした
C# Express Editionじゃだめなんでしょうか?
connStr = @"
Data Source = .\SQLEXPRESS;
AttachDbFilename = C:\hoge\hoge.mdf;
Integrated Security = True;
User Instance = True;";
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open(); // コネクションのオープン
}
106:デフォルトの名無しさん
09/03/03 01:16:38
>>105
それじゃ自分自身のインスタンスになってんじゃないの?
バーチャルPCに対してならIPアドレスか、バーチャルPCのドメインとか、
PC名で指定する必要があるんじゃないか?
107:デフォルトの名無しさん
09/03/03 01:24:02
>>106
むむむ
しらべてあす報告します
ありがとうです
108:デフォルトの名無しさん
09/03/03 02:34:16
char c = 'a';
string s = Convert.ToString(c);
string s = c.Tostring();
上ができないのは何でなんだぜ?
109:デフォルトの名無しさん
09/03/03 02:37:56
2回もキャストするの?
110:デフォルトの名無しさん
09/03/03 02:52:00
>>108
エラーになるのは下だけでしょ
Convertには ToString(char) のクラスメソッドがあるけど、
Charには ToString() のインスタンスメソッドがないから
111:デフォルトの名無しさん
09/03/03 02:52:33
鳩山弟の偵蝶はすげえなというか、この情報の確度と有益さは恐ろしい
さすがアルカイダの友達の友達だ
112:108
09/03/03 02:56:20
間違えた
char c = 'a';
↓はできるけど
string s = Convert.ToString(c);
string s = c.Tostring();
↓はできない
string s = (string)c;
113:108
09/03/03 03:00:40
もしかしてstringはキャスト演算子使えない?
114:デフォルトの名無しさん
09/03/03 03:07:38
キャストはコンバートじゃありません
根本的に勘違いしてるんじゃないかなあ
115:デフォルトの名無しさん
09/03/03 03:46:32
>>110
Object.ToString()
116:デフォルトの名無しさん
09/03/03 04:03:43
>>115
ごめん、そりゃそうだ
エラーになると思い込んでたのでorz
117:デフォルトの名無しさん
09/03/03 04:06:18
>>113
ちなみに(int)cは出来る。
といった辺りから考えてみてくださいな。
118:デフォルトの名無しさん
09/03/03 04:27:16
あー、わかった
stringはcharの配列だけどcharは値型、stringは参照型だからキャストできないってこと?
charは16bitのUnicodeだし
119:デフォルトの名無しさん
09/03/03 08:03:13
変換演算子が定義されてないからキャストできないだけで
値型とか幅とか何も関係ない
120:デフォルトの名無しさん
09/03/03 09:25:56
うん
できたからといって別におかしいことはない
できるようにされてないだけ
121:デフォルトの名無しさん
09/03/03 09:58:26
ファイル読み込みについて質問なんですが、
拡張子ではなく中身でテキストファイルかバイナリファイルかを
判別する方法ってありますか?
122:デフォルトの名無しさん
09/03/03 10:01:33
テキストファイルだってバイナリだろ
123:デフォルトの名無しさん
09/03/03 10:04:09
IMultiLanguage2に食わせてみる
124:デフォルトの名無しさん
09/03/03 10:05:02
メソッド名抜けた。DetectInputCodepage
125:デフォルトの名無しさん
09/03/03 13:06:42
このへんかな?
まぁテキストかバイナリかを見分けると言われれば>>122が正しいんだが
ちょっとエスパーしてみた
URLリンク(dobon.net)
126:デフォルトの名無しさん
09/03/03 14:04:57
FindMimeFromData()じゃないの?
127:デフォルトの名無しさん
09/03/03 14:10:53
DBから指定したテーブルのIDフィールドとNAMEフィールドを取得して
NAMEフィールドをコンボボックスに表示したいと思っています。
その時にNAMEフィールドのデータに紐付くIDフィールドも保持して
コンボボックスを操作した際に、IDフィールドも同時に制御するような処理を作りたいのですが
どのように作ればいいのでしょうか?
コンボボックスを2つ用意して片方を非表示にして制御する方法しか思いつきませんでした
宜しくお願い致します
128:デフォルトの名無しさん
09/03/03 14:25:20
>>127
つコレクション
129:デフォルトの名無しさん
09/03/03 14:45:21
DataTable使ってねーの?
130:デフォルトの名無しさん
09/03/03 15:30:30
めんどくさいからバインドしちゃえよw
131:デフォルトの名無しさん
09/03/03 15:30:54
>127
DisplayMemberにName
ValueMemberにID
SelectedChanged(で合ってるのかな)イベントにハンドラ追加して
ComboBox.SelectedValueでIDが取得できるんじゃね?
データバインドのときに限るが。
それかEntityクラス作って ToStringメソッドをオーバーライドして
ToStringでNameを返すようにする。
Entityクラスのオブジェクトをコンボにセットすれば
ToString()したときの文字列がコンボに表示される。
あとはSelectedChangedで(Entity)キャストしてオブジェクトを取り出す。
132:デフォルトの名無しさん
09/03/03 20:07:59
List(要素数は50個)を
List1(0~25)とList2(25~50)に分割するにはどうやったらいいのでしょうか?
133:デフォルトの名無しさん
09/03/03 20:16:13
GetRange使えば?
134:デフォルトの名無しさん
09/03/03 20:22:03
ありがとうございます
GetRangeなら出来そうですね
やってみます
135:デフォルトの名無しさん
09/03/03 20:27:14
list.GroupBy(i => i < 25);
136:デフォルトの名無しさん
09/03/03 21:01:10
>>135
それは違うだろ。値じゃなく添え字で分けたいんだから。
137:デフォルトの名無しさん
09/03/03 21:12:14
そういえばGroupByにindexくれるFuncを使えるのが無いのは何でなんだろ
138:デフォルトの名無しさん
09/03/03 21:12:46
>>136
すまん、そのとおりだ。
長くなるけどこっちで。
list.Select((value, index) => new { value, index }).GroupBy(t => t.index <= 25, t => t.value);
139:デフォルトの名無しさん
09/03/03 22:59:25
生年月日と指定した日付を渡すと
指定した日付の時の年齢を返すようなのってどうやりますか?
140:デフォルトの名無しさん
09/03/03 23:00:25
引き算
141:デフォルトの名無しさん
09/03/03 23:08:45
DateTimeクラスなんかで年齢を返すメソッドがあってもいいような・・・
あんま需要ないのか?
142:デフォルトの名無しさん
09/03/03 23:18:03
それは需要があるとしてもTimeSpanか、あるいは年齢専用のクラス(Ageクラス?)
でやるべきじゃないのかな
143:デフォルトの名無しさん
09/03/03 23:18:56
誕生日って閏年とかあったから、単純に引き算だとへんな年齢になることなかったっけ?
正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
144:デフォルトの名無しさん
09/03/03 23:19:31
VB だったらそういうメソッドも普通に定義されてるかもな。
145:デフォルトの名無しさん
09/03/03 23:21:32
日本の法律では、誕生日の前日に年を取る
豆知識
146:デフォルトの名無しさん
09/03/03 23:23:55
>>145
法律的に年利計算は閏年の翌日?前日?
147:デフォルトの名無しさん
09/03/03 23:30:11
>閏年の翌日?前日?
?
148:デフォルトの名無しさん
09/03/03 23:35:42
TimeSpanに年数を示すプロパティはないんだな。考えてみれば、月数や年数はTicksから
一意に定まるものじゃないものな。
結局場合分けして引き算するしかなさそうだ。
ちなみに、年齢が変わるのは「誕生日の前日の午後12時」なので、誕生日が来たら年齢が変わると考えておk。
// DateTime d1 = 指定日付, d2 = 誕生日
int age;
if (d1 < d2)
{
// 何かしらエラー処理する
}
else if (d1.Month > d2.Month || (d1.Month == d2.Month && d1.Day >= d2.Day))
{
age = d1.Year - d2.Year;
}
else
{
age = d1.Year - d2.Year - 1;
}
149:デフォルトの名無しさん
09/03/03 23:36:04
税金関係は1年=365日で定数だった気が
誕生日の前日に年取るのは閏日生まれの為だし
150:デフォルトの名無しさん
09/03/03 23:42:56
>>106
詳しく!
ヘルプミー
今日で約1週間!俺はアホなのかー♪;;
151:デフォルトの名無しさん
09/03/03 23:48:42
>誕生日の前日に年取る
これじゃ不正確
民法の試験じゃ×になる
152:デフォルトの名無しさん
09/03/03 23:50:26
だからなんだよ。司法関係者にでもなるのか?
153:デフォルトの名無しさん
09/03/03 23:52:06
うん
応援してね
154:デフォルトの名無しさん
09/03/03 23:54:27
.∧__,,∧
(´・ω・`)
(つ夢と)
`u―u´
あなたの後ろに落ちてたこれを、
∧__,,∧ ∧__,,∧
(`・ω・ ) ミ (`・ω・´)
( つ ⌒ヽ と ,u、つ
`u―u' 夢 `u´夢
YY⌒Y
こうして、 こうして、
∧__,,∧
_ (ω・´ )
夢 三ニ ☆ __,( )つ
 ̄ `ー―‐u'
こうだ !
155:デフォルトの名無しさん
09/03/04 00:01:14
>>150
Data Source=***.***.***.***,????;Initial Catalog=++++;Persist Security Info=True;User ID=--;Password=\\\\
***.***.***.*** ipaddress
+++ データベース名
-- 接続するユーザ名
\\\\ 接続するユーザ名のパスワード
で接続できた。インスタンスは規定のインスタンスだから指定なし
156:デフォルトの名無しさん
09/03/04 00:02:31
>>151
んでシステム上ではどうするのが正解なんだい
157:デフォルトの名無しさん
09/03/04 00:03:39
すまん
????はポート
158:デフォルトの名無しさん
09/03/04 00:18:44
.∧__,,∧
(´・ω・`)
(つ夢と)
`u―u´
回収!!
159:デフォルトの名無しさん
09/03/04 00:20:33
ポート・・・?うーん勉強してきます・・・
ありがとう
160:デフォルトの名無しさん
09/03/04 00:20:54
∧_∧
( ・∀・)
と )シュッ
Y しノ彡 -=ニ三 夢
ヽ )
161:デフォルトの名無しさん
09/03/04 00:29:25
.∧__,,∧
(´・ω・`)
(つ夢と)
`u―u´
もう離すものか!!
だれにも渡さない!
162:デフォルトの名無しさん
09/03/04 00:31:26
∧_∧
∧_(∀゚ ; )
( ・∀・) つ
(っ夢⊂≡て ヽ よこせ
して_)_ノw (_)
∧_∧
( ・∀・)
と ) シュッ
Y しノ彡 -=ニ三 夢
ヽ )
163:デフォルトの名無しさん
09/03/04 00:35:28
いつも思うんだが、お絵かきできてうれしくなっちゃう奴って
精神年齢が幼稚園時代で止まってるのか?
本気で理解できんよ。
164:デフォルトの名無しさん
09/03/04 00:37:57
コピペネタにマジレスかよw
165:デフォルトの名無しさん
09/03/04 00:40:47
.∧__,,∧
(´・ω・`)
(つポート
`u―u´
ポートとは何ぞや!
166:デフォルトの名無しさん
09/03/04 00:41:35
コピペだろうが何だろうがマジレスしてもらえるだけありがたいだろ
167:デフォルトの名無しさん
09/03/04 00:42:42
わりい間違えた
×マジレス
○キチガイレス
だわ
168:デフォルトの名無しさん
09/03/04 00:44:22
>>132
25が重複してるが、当分割と仮定して、
var list1 = list.Take(25).ToList();
var list2 = list.Skip(25).Take(25).ToList();
>>139
int age = target.Year - birth.Year;
if(target < birth.AddYears(age)) age--;
169:デフォルトの名無しさん
09/03/04 00:45:07
>>163
お絵かき楽しいだろ。
素直になれよ。
170:デフォルトの名無しさん
09/03/04 09:49:54
>>159
特別な事情がない限りSQL Serverのポート番号はデフォルトの1433なので省略可能。
ので接続先のマシンがたとえば192.168.1.1でインスタンス名がSQLEXPRESSなら
Data Source=192.168.1.1\SQLEXPRESS
だし、既定のインスタンスに接続するならインスタンス名も省略できて
Data Source=192.168.1.1
で、特別な事情(SQL Server 2000/2005/2008を共存させてるとか)があって別のポート(たとえば11433)を使っているなら
Data Source=192.168.1.1,11433\OTHERINSTANCE
それでもつなげないなら接続先のファイアウォールが邪魔してると思われる。
171:デフォルトの名無しさん
09/03/04 10:12:34
そもそもManageMentStudioExpressとかで繋げてるのかな…・?
172:デフォルトの名無しさん
09/03/04 10:46:18
>>159
>>171も言ってるように、SSMSとかサーバーエクスプローラとかで接続してみるのが先だな。
てか、TCP接続ってデフォルトでOFFじゃなかったか?
それにしても斬新な区切り方だな>>171
173:デフォルトの名無しさん
09/03/04 11:39:32
C#でアッカーマン関数を計算させようとしていますが、スタックオーバーフローが
起きます。C#でスタック領域を広げるにはどうすればいいのですか?
174:デフォルトの名無しさん
09/03/04 11:55:25
多倍長計算させて、それでスタックが足りなくなってるの?
それとも、普通にInt32なりInt64なりを使っていて、再帰が
深くなりすぎてスタックが足りなくなってるの?
後者だとしたら、どうせ計算可能な部分はめちゃめちゃ限られているので、
アッカーマン関数の値を計算していく順序を工夫すべきだと思う。
URLリンク(www.google.co.jp)アッカーマン関数&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
これ見ると分かるけど、m=3以降に関しては、頑張っても報われないよ?
175:デフォルトの名無しさん
09/03/04 11:59:52
>>173
>>174で答えが出てるけど、どうしてもスタック領域を広げたいという話であれば
Threadクラスのコンストラクタで指定できるらしい。試してないけど。
URLリンク(msdn.microsoft.com)
176:デフォルトの名無しさん
09/03/04 12:01:22
>>174
再帰が深くなりすぎます
>>175
具体的にはどのようなコードを書けば良いのでしょうか?さっぱりわかりません
177:デフォルトの名無しさん
09/03/04 12:02:40
例えば大きな配列を確保する時など、後学のためにスタックサイズを
広げる方法を知っておきたいのです。C/C++ならリンカオプションで
簡単に出来るのですがC#では何かよくわかりません
178:デフォルトの名無しさん
09/03/04 12:06:58
Threadクラスの(ThreadStart, Int32)のコンストラクタ
179:デフォルトの名無しさん
09/03/04 12:07:08
.NETの配列はヒープに領域を取るのでスタック関係なし
再帰はスタックサイズの変更よりループに展開することを考えた方がいい
180:デフォルトの名無しさん
09/03/04 12:07:47
>>178
それはヘルプを見て確認していますが、使い方がわからないのです
短いコードで良いので具体的な使い方を教えていただきたいのです
181:デフォルトの名無しさん
09/03/04 12:09:45
別のスレッドを作ってそっちで動かすってこと
C# スレッド でググれ
182:デフォルトの名無しさん
09/03/04 12:10:34
>>181
もちろん既にぐぐっていますがよくわからないのです
183:デフォルトの名無しさん
09/03/04 12:12:09
スレッドが分からないくらいだったら
スタックサイズとか変なこと考える前に基礎をやれとしか
184:デフォルトの名無しさん
09/03/04 12:17:16
using System;
using System.Threading;
class Program
{
static void Main()
{
int maxStackSize = 1 * 1024 * 1024 * 1024;
Thread th = new Thread(DoWork, maxStackSize);
th.Start();
}
static void DoWork()
{
//...
}
}
185:デフォルトの名無しさん
09/03/04 12:27:24
>>184
ありがとうございます
助かりました
これを参考に作り直してみます
186:デフォルトの名無しさん
09/03/04 12:31:13
Stack<T>でも使って引数だけでもヒープに置くようにしたらだいぶマシなんじゃない
>このコンストラクタのオーバーロードを使用しないでください。
だし
187:デフォルトの名無しさん
09/03/04 12:53:12
遅そうだけど素直に展開したらこんな感じか
Stack<long> stack = new Stack<long>();
stack.Push(m); stack.Push(n);
while (1 < stack.Count) {
n = stack.Pop(); m = stack.Pop();
if (m == 0) { stack.Push(n + 1); }
else if (n == 0) { stack.Push(m - 1); stack.Push(1); }
else { stack.Push(m - 1); stack.Push(m); stack.Push(n - 1); }
}
return stack.Pop();
188:デフォルトの名無しさん
09/03/04 14:12:06
>>139-143
20090304 - 19870305 = 219999
これを10000で割った商が年齢になる。
別にうるう年とか全然関係ない。
このスレは算数もできない文系プログラマばっかりなのか?
189:デフォルトの名無しさん
09/03/04 14:20:49
算数や数学の問題じゃないだろうw
ともかくそれで正確な答えが出るんだったら便利だな
190:デフォルトの名無しさん
09/03/04 14:41:44
>>188
すげーw
おまえ天才だなw
191:デフォルトの名無しさん
09/03/04 15:04:33
結局、月を比較して同月なら日を比較してるだけじゃん
192:デフォルトの名無しさん
09/03/04 15:11:11
>>191
何を言っているんだ?
193:デフォルトの名無しさん
09/03/04 15:13:56
さすがC#スレ
レベルが低すぎる
日曜プログラマならぬなんちゃってぷry
194:デフォルトの名無しさん
09/03/04 15:23:20
int ydiff = dt1.Year - dt2.Year;
if (dt1.AddYears(-ydiff).CompareTo(dt2) < 0) { ydiff--; }
195:デフォルトの名無しさん
09/03/04 15:24:52
どうみても算数や数学の問題だろう。
極論を言えば、
1+2+4+8+16+32+.................+1024を求めるときに、
思考を放棄している人間はそのまま足していくか諦める。
思考する人間は、
S=1+2+..........+1024とおいて、
2*S = 2+4+........+2048との差を求めることで和を得る。
これは別に学校で等比級数の公式を習ったかどうかという問題ではない。
>>140で答えが出ているのに、>>143みたいな思考を放棄したプログラマは考えもせずただ
>正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
こんなことを言い出す始末。
これは上の問題で言えばそのまま足していく人間だと言うことだよ。
プログラマだったら便利なメソッドが用意されてなかったら自分で考えて作るくらいのアタマが欲しいところだ。
196:174
09/03/04 15:42:06
アッカーマン関数の話だけど、
・同じ行では左側(nが小さい方)しかか参照しない
・上(mが小さい方)の列程計算可能な行(n)は多い
なので、再帰を使わずに、表の参照と捉えた方が良い。
そうしないと、同じ枡を何度も無駄に計算する事になる。
List<List<int>> Ack = new List<List<int>>();
とか作って、
const int maxN = 100000;
int m = 0, n = 0;
while (true) {
Ack.Add(new List<int>());
n = 0;
while (true) {
try {
if (n > maxN) throw new Exception();
if (m == 0) {
Ack[m].Add(n + 1);
} else if (n == 0) {
Ack[m].Add(Ack[m - 1][1]);
} else {
Ack[m].Add(Ack[m - 1][Ack[m][n - 1]]);
}
n++;
197:デフォルトの名無しさん
09/03/04 15:42:47
} catch {
Console.WriteLine("for m=" + m.ToString("0")+ " calculation is terminated at n=" + n.ToString("0") + ".");
break;
}
}
if (Ack[m].Count == 0) break;
m++;
}
ってやれば、再帰は必要ない。再帰ではなく、表の参照だと考えて、
各枡の値を計算するにはどの枡の情報が必要かを考える。
環境によってmaxNを色々変えるとベンチマークにもなるかも。
198:デフォルトの名無しさん
09/03/04 16:06:39
>>192
構造上、比較の優先順構造が桁の上下に投射されているだけだという話だろ
199:デフォルトの名無しさん
09/03/04 16:14:13
ASP.NET でC#使ってます。VS2008。
Default.aspxが呼ばれたときに
それがWebClientからの要求かブラウザからの要求かを
見極める方法はありますか?
WebClientからの要求がTrueでその他はFalseと判断したいです。
ブラウザプロパティを見てみると
WebCleintの場合は"Unknown"と出るんですが、
新しいブラウザが開発されたらUnknownになるかなと思ったんです。
QueryStringによる判断は不可です。
ブラウザで直打ちされたらtrueになるので。
どなたかよろしくお願いします。
200:デフォルトの名無しさん
09/03/04 16:33:00
HTTPリクエストヘッダなんかいくらでも詐称できる
201:デフォルトの名無しさん
09/03/04 16:36:26
>>188
言ってることはわかるし、凄いとも思うんだが、C#のコードで表現すると
さほどシンプルでもないんじゃね。
int age = ((today.Year * 10000 + today.Month * 100 + today.Day)
- (birthday.Year * 10000 + birthday.Month * 100 + birthday.Day)) / 10000;
202:デフォルトの名無しさん
09/03/04 16:41:10
>>195
「引き算」と書かれてそれを鵜呑みに信じることこそが、真の思考を放棄していないプログラマなんだな。
楽だな。
203:デフォルトの名無しさん
09/03/04 16:44:54
>>201 引き算だってC#で書けるだろ。
>>188はyyyyMMddを引き算すればいいじゃんってことを言っているわけで
わざわざ>>201みたいなコード書く必要ないよ、ってことだよ。
どう考えても>>188がシンプルで >>188の勝ちであることは否めない。
君の負け。
204:デフォルトの名無しさん
09/03/04 16:46:16
>>201
年未満の線形性を切り捨てる代わり、うるう年を考えなくてもいいというのが利点
205:デフォルトの名無しさん
09/03/04 16:48:17
勝ちとか負けとかガキかよw
206:デフォルトの名無しさん
09/03/04 16:48:46
>>203
yyyyMMddをどこから持ってくるかという話でしょ。
intで定義されてるなら>201みたいな操作が必要だし、
Stringでとるならそれでもいいし。
207:デフォルトの名無しさん
09/03/04 16:53:17
>>202
そんな悪態ついてないで素直になれよ。
最も合理的な解決策を見つけるのもプログラマの仕事ってことを言ってるんだろ。
それが積もってパフォーマンスに影響してくるんだからさ。
悔しいのは分かるけど、プライドでプログラムやるもんじゃない。
208:デフォルトの名無しさん
09/03/04 16:57:00
>>206 どこから持ってくるも何も
int.Parse(DateTime.ToString("yyyyMMdd"))
とかでいいじゃん。Convert.ToInt32でもいいよ。
209:デフォルトの名無しさん
09/03/04 16:57:31
>>203
で、コードは?
210:188
09/03/04 16:57:41
>>201
なんだその糞コードは・・・
int nToday = int.Parse(today.ToString("yyyyMMdd"));
int nBirthday = int.Parse(birthday.ToString("yyyyMMdd"));
int age = nToday - nBirthday;
どうみてもシンプルだと思うが。。。
スレ住人のセンスを疑うな・・・
211:デフォルトの名無しさん
09/03/04 16:59:50
日付→文字列→数値と変換するオーバーヘッドを気にする俺は古い人間なのか?
212:デフォルトの名無しさん
09/03/04 16:59:51
>>209
そんなコードも考えられないようなお前の脳みそを疑うよ・・・
213:デフォルトの名無しさん
09/03/04 17:00:21
>>207
「引き算」と言われて何も疑わず信じることが思考停止でなくてなんなんだ?
214:デフォルトの名無しさん
09/03/04 17:01:59
>>210
完全にトドネト脳だな
215:デフォルトの名無しさん
09/03/04 17:02:07
int.Parse(DateTime.ToString("yyyyMMdd"))
これだけの操作の裏で、どれだけ複雑な操作が行われているか想像できない方が
プログラマとして不適格だろ。
216:デフォルトの名無しさん
09/03/04 17:04:18
>>213
必死だなお前w
「引き算」と言われて、>>143みたいに
「引き算だとうるう年とかあるからダメだぜ?分かってねぇなあ。俺みたいにきちんとやるのが正しいんだよ!」
というような、
自分のやり方が一番正しいとして他人の意見をくみ取りもしないことが思考停止って言ってんの。
217:デフォルトの名無しさん
09/03/04 17:06:43
>>207
>正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
と
>20090304 - 19870305 = 219999
はやり方が違うだけで言ってることは同じ。
下4桁の引き算がif (d1.Month > d2.Month || (d1.Month == d2.Month && d1.Day >= d2.Day)) にあたり、
その結果、単に引くだけか、-1するかの違いだからな。
218:デフォルトの名無しさん
09/03/04 17:07:49
雑談はよそでやれよ
219:デフォルトの名無しさん
09/03/04 17:08:04
>>211
気になったら後でリファクタリングすればいい
まあある程度の規模になるなら、線形性がないという問題を抱え込んだままにしておくのは怖いが。
220:デフォルトの名無しさん
09/03/04 17:08:10
>>213 お前プライドの塊だな。めんどくさいやつだな。
221:デフォルトの名無しさん
09/03/04 17:09:45
>>216
だからその結果が正しいかどうかを疑わず信じろというのは思考停止だろ?
本当にそれで可能かどうか検討もせず受け入れるのが思考停止でなくてなんなんだ?
222:デフォルトの名無しさん
09/03/04 17:11:12
>>216 結果が正しいかどうかはデバッグすればわかるだろ・・・
頭悪すぎるぞこいつ・・・。
223:222
09/03/04 17:12:02
間違えた
×>>216
○>>221
224:デフォルトの名無しさん
09/03/04 17:13:12
>>223
>結果が正しいかどうかはデバッグすればわかるだろ・・・
この時点で正しいかどうか疑ってるからデバッグするわけだろ?
思考停止じゃないじゃん。
225:デフォルトの名無しさん
09/03/04 17:14:51
年齢計算で、閏年はどうなるんだ?と考えるのは当然だよな。
盲目的に受け入れるほうがおかしい。
226:デフォルトの名無しさん
09/03/04 17:15:30
>>210
>>194のほうがシンプルじゃないかい?
そのままだと2月29日と2月28日を比較したときに、
2月29日の時刻が比較対象より前だと間違いになるので、
(そもそも時刻成分を考慮する必要がない気がするけど念のため)
ちょっと修正して:
int ydiff = dt1.Year - dt2.Year;
if (dt1.AddYears(-ydiff).Date.CompareTo(dt2.Date) <
0) { ydiff--; }
227:デフォルトの名無しさん
09/03/04 17:18:32
馬鹿にされた文系プログラマがわんさか湧いててワロスwww
>年齢計算で、閏年はどうなるんだ?と考えるのは当然だよな。
うん
>盲目的に受け入れるほうがおかしい。
うん、だから「閏年を考慮したら引き算ではつじつまが合わなくなる」という
自分の意見が正しいという意見を盲目的に信じるのはおかしいよな?
228:デフォルトの名無しさん
09/03/04 17:20:16
Func<DateTime, int> hoge = (x) => int.Parse(x.ToString("yyyyMMdd"));
return (hoge(to) - hoge(from)) / 10000;
Func<DateTime, int> hoge = (x) => x.Year * 1000 + x.Month * 100 + x.Day;
return (hoge(to) - hoge(from)) / 10000;
たいしてかわらん。
229:デフォルトの名無しさん
09/03/04 17:21:18
>>227
そこから検算してああ正しいんだなと理解すれば問題ないじゃんw
言われてはいそうですかじゃアホだろ
230:デフォルトの名無しさん
09/03/04 17:23:29
おいおい、なんでこんな厨臭くなってるんだw
初心者スレで言い合いすんなよガキだな
231:デフォルトの名無しさん
09/03/04 17:24:57
エレガントな解を示したつもりが、あまり賞賛されなかったので拗ねているんです。
232:デフォルトの名無しさん
09/03/04 17:27:15
結局>>217が真理
計算方法が違うだけで意味はどちらも同じ
233:デフォルトの名無しさん
09/03/04 17:34:10
意味がどちらも同じなのはみんな分かってるよ。
今話題になっているのはコードの美しさと可読性だろ?
俺は少なくとも>>148と>>228みたいなコードを見比べたら、
>>228の方がデキるプログラマって感じがするけどな。
234:デフォルトの名無しさん
09/03/04 17:36:56
>>233
>>148が文系プログラマ、>>228が理系プログラマですね、わかります。
235:デフォルトの名無しさん
09/03/04 17:38:55
ラムダ式って美しいんですか?(スマートな解という意味で)
美しいなら勉強するよ!
236:228
09/03/04 17:40:31
× x.Year * 1000
○ x.Year * 10000
プギャー(AAry
237:デフォルトの名無しさん
09/03/04 17:46:46
>>235
ぼちぼち美しい
238:デフォルトの名無しさん
09/03/04 17:54:00
動的に処理を差し替えるような必要があればラムダ式は有効だけど
>>228のケースでは意味がないな。違いはメソッドより効率が悪いこと。
長くなるのを避けてるだけだと思う。
239:デフォルトの名無しさん
09/03/04 18:06:02
>>235
まあ>228レベルならC的関数定義の別の書式に等しい。
マ的には現代的関数型言語みたいに、ラムダ計算後にインライン化とか末尾最適化が言語で保障されているなら嬉しいけど。
240:デフォルトの名無しさん
09/03/04 18:18:54
知識はあってもかしこくない
だめだこりゃ
関数がいやならC#やるな
241:デフォルトの名無しさん
09/03/04 18:31:11
どこをどう読んだら誰が関数が嫌なんて言ってるように見えるんだろう
242:デフォルトの名無しさん
09/03/04 18:48:32
ラムダ式は超美しい。
243:デフォルトの名無しさん
09/03/04 18:54:43
どうでもいいよ
244:174
09/03/04 18:56:15
みんなー、アッカーマン関数の話しようぜー。
>>174のコードだと、m=0, n=int.MaxValue-1みたいなケースが計算できない
のが嫌だ。ていうかそもそもの問題は多分アッカーマン関数の表を一気に計算する
コードじゃなくって、与えられたm,nに対してアッカーマン関数の値を計算するコード。
なので、>>187のスタック使ってヒープを使って再帰する方法と、ハッシュ使って
計算済みの値を再利用する方法を組み合わせたアプローチにしてみた。値を再利用
するので、表を生成する用途でも有効。
うちの環境(メモリ1GB)では
m=0でn=int.MaxValue-1まで
m=1でn=10000000くらいまで
m=2でn=5000000くらいまで
m=3でn=20まで
m=4でn=1まで
計算できた。
スレの空気読まずにコードアップするぜ!
static Dictionary<int, Dictionary<int, int>> Ack
= new Dictionary<int Dictionary<int, int>>();
static Stack<int> argM = new Stack<int>();
static Stack<int> argN = new Stack<int>();
static int Ackermann(int m, int n)
{
argM.Clear();
argN.Clear();
argM.Push(m);
argN.Push(n);
while (argM.Count>0) {
245:174
09/03/04 18:57:14
if (!Ack.ContainsKey(argM.Peek())) Ack[argM.Peek()] = new Dictionary<int, int>();
if (Ack[argM.Peek()].ContainsKey(argN.Peek())) {
argM.Pop();
argN.Pop();
continue;
} else {
int value;
if (argM.Peek() == 0) {
value = checked(argN.Peek() + 1);
} else if (argN.Peek() == 0) {
if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(1)) {
value = Ack[argM.Peek() - 1][1];
} else {
argM.Push(argM.Peek() - 1);
argN.Push(1);
continue;
}
} else {
246:デフォルトの名無しさん
09/03/04 18:58:25
アッカーマン関数なんて使わないし
247:174
09/03/04 19:00:46
int n_;
if (Ack.ContainsKey(argM.Peek()) && Ack[argM.Peek()].ContainsKey(argN.Peek() - 1)) {
n_ = Ack[argM.Peek()][argN.Peek() - 1];
} else {
argM.Push(argM.Peek());
argN.Push(argN.Peek() - 1);
continue;
}
if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(n_)) {
value = Ack[argM.Peek() - 1][ n_];
} else {
argM.Push(argM.Peek() - 1);
argN.Push(n_);
continue;
}
}
248:デフォルトの名無しさん
09/03/04 19:01:34
Ack[argM.Pop()][argN.Pop()] = value;
continue;
}
}
return Ack[m][n];
}
終わり。Ackermann(3,20);あたりで速さが実感できるぜ!。
あと、>>244の「>>174のコード」ってところ、アンカーミスで>>196のコードね。
>>246
>>173を思い出してあげてください。
249:デフォルトの名無しさん
09/03/04 19:08:28
Dictionary<int, Dictionary<int, int>>は効率悪いな
struct Key { public int M; public int N; public override int GetHashCode() { return M ^ N } }
こういうのをキーにしたらDictionary<Key, int>で済むのに
250:デフォルトの名無しさん
09/03/04 19:15:09
>>249
一般にはそうだろうけど、そもそも話題がアッカーマン関数だから、
mはどうせ0から5くらいまでしかとらないんだよね。だから別に
これでかまわないんじゃないかな。
あと、ハッシュ値の衝突って詳しくないんだけど、そういう衝突しまくる
ハッシュ関数って効率はどうなっているの?
251:デフォルトの名無しさん
09/03/04 20:49:39
ファイルを選択して、それを別のコンソールプログラムに読み込ませて
その結果の出力(文字列)を別ウィンドウに表示したいのですが、どうやればいいですか?
ファイル選択まではいいのですが、別のプログラムを起動してそいつに引数を
渡すにはどうすればよいですか?
252:デフォルトの名無しさん
09/03/04 20:51:32
Process
253:デフォルトの名無しさん
09/03/04 20:52:30
>>251
Process のヘルプをじっくり見る。
254:デフォルトの名無しさん
09/03/04 21:12:30
>>228はマイナスの年齢が出るから間違いだろそもそも
255:デフォルトの名無しさん
09/03/04 21:22:08
>>238
別にメソッドと比べて効率悪くならないよ。
モノホンのラムダ式であるリスト構造に基づく関数定義から
実行時に動的にメソッドを生成する、なんて事は行われていない。
匿名メソッドの名前どおり、コンパイル時にコンパイラが勝手な
メソッド名を割り当ててメソッドを作る。自分でメソッド定義する
のと何も違いはない。
256:デフォルトの名無しさん
09/03/04 21:27:19
デリゲート呼び出しが入る
最適化もできなくなるから使い方にもよるけど多かれ少なかれ確実に遅くはなる
その小さい差の意味は置いといて
257:デフォルトの名無しさん
09/03/04 21:31:18
まじ?>>228のhoge(ほにゃらら)みたいなのって、匿名メソッドの呼び出し
として最適化されるんじゃなくて.Invokeされちゃうの?
ちょっとリフレクタで確かめてみる。
258:デフォルトの名無しさん
09/03/04 21:39:14
ほんとだ。C時代のプリプロセッサマクロに代わる、スコープがあって上位スコープ
にアクセスできる素性の良いマクロとして利用する事がたびたびあったから、
ちょっとショック。
259:デフォルトの名無しさん
09/03/04 21:52:18
>>251
P/Invokeを駆使して共有メモリ経由でやりとりする。
{Tcp,Http,Ipc}Channelクラスを使って通信する。
特定の位置にファイル作って監視させる。
アプリケーション構成ファイルを動的に書き換えて起動する。
ProcessStartInfo.Argumentsを設定してProcessオブジェクトのStartを呼ぶ。
Process.Start(string,string)を呼ぶ。
260:デフォルトの名無しさん
09/03/04 23:01:02
>>259
何故難しい順に書く・・・
261:デフォルトの名無しさん
09/03/04 23:06:21
理系プログラマだからさ
262:デフォルトの名無しさん
09/03/04 23:10:49
かっこいい
263:デフォルトの名無しさん
09/03/04 23:15:38
VS2005を使っているのですが2008にすると
C#3.0とかになっちゃうの?
今まで2005で作ったプログラムって2008でも修正可能なんでしょうか?
.NET2.0用で作ってたのが.NET3.5になっても無問題?
264:デフォルトの名無しさん
09/03/04 23:18:25
>>263
> VS2005を使っているのですが2008にすると
> C#3.0とかになっちゃうの?
も、使える
> 今まで2005で作ったプログラムって2008でも修正可能なんでしょうか?
可能
> .NET2.0用で作ってたのが.NET3.5になっても無問題?
没問題
というか、.NET 3.5 って、.NET 2.0 上で動作する拡張なだけだから。
265:デフォルトの名無しさん
09/03/04 23:19:44
>>263
C# 3.0 になる。
2005 → 2008 へのプロジェクトのアップグレードで失敗したって話は見たことも聞いたこともない。
.NET 2.0 が 3.5 になっても問題ない。
266:デフォルトの名無しさん
09/03/04 23:34:30
170-172
今夜も試行錯誤:
Windows認証で
環境(Vista アルティメット) <= (ヴァーチャルPC Xp home)
Data Source=192.168.1.1\SQLEXPRESS
これでも
11433\OTHERINSTANCE
これでもダメでしたが
SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、
SQL Server の既定の設定がリモート接続を許可しないようになっていることが
エラーの原因である可能性があります。
(provider: TCP プロバイダ, error: 0 - 対象のコンピュータによって拒否されたため、接続できませんでした。)
セキュリティー構成は、サービスと接続のセキュリティ構成-リモート接続-ローカル及びリモート接続
●TCP/IP および名前付きパイプ・・・
にチェックは言っているんですけどねー
まだまだ頑張る・・・応援よろしく
267:デフォルトの名無しさん
09/03/04 23:49:24
>>263
ただ、Windows2000は.Net2.0までしか入らないから
その辺のサポートするならVS2008にしても.Net2.0で作り続ける必要がある。
プロパティ打つのがたるいし型推論も使えない。。orz
268:デフォルトの名無しさん
09/03/04 23:53:50
>>266
まず、MSSQLSMSEで、IPアドレスで接続できるかどうか試してみれよ
サーバ名にIPアドレス、認証はSQL認証で、設定したアカウントを設定しれ。
269:デフォルトの名無しさん
09/03/05 00:03:50
MSSQLSMSE<<とりあえず ぐぐってみる・・・・
まだまだ ど素人だな俺って・・・
270:デフォルトの名無しさん
09/03/05 00:06:21
やっぱりC#使う場合はDBをSQLServerにすることが多い?
271:デフォルトの名無しさん
09/03/05 00:15:47
269だけど
Accessとかもありじゃないでしょうか
おいらはAccess買えない貧乏仕様
定額給付でSqlServer2008でも買うか…
272:デフォルトの名無しさん
09/03/05 00:18:02
実行後に実行プログラム自身を削除するのってどうすればいいですか?
273:デフォルトの名無しさん
09/03/05 00:22:44
SQL Server 2008 Expressでいいんじゃないの?
無料だし、商用にも使えるし
274:デフォルトの名無しさん
09/03/05 00:23:51
実行プログラムを実行して削除するプログラムを作る
275:デフォルトの名無しさん
09/03/05 00:25:34
>>267
.NETとC#のバージョンがごっちゃになってないか?
276:デフォルトの名無しさん
09/03/05 00:29:01
>>267
varはコンパイラの機能だから.NET Framework 2.0対象でも使えるはずだよ。
277:デフォルトの名無しさん
09/03/05 00:33:50
>>268
なんかちょっとわかった!^^進展してないけど明日チャレンジします
ね・・・ねむけが
278:267
09/03/05 00:38:45
あ!そうかも。
LINQが参照できなくて色々できないあたりから
色々思考停止してる。さんくす!
279:デフォルトの名無しさん
09/03/05 00:42:06
ILのレベルでは何も代わっていないのだから、3.5で追加されたクラスライブラリを
使っているかどうかだけが問題なのだと思う。
Linq to ObjectはSystem.Linq.Enumerableクラスの拡張メソッドだから
.NET3.5専用。
でも、拡張メソッド機能自体は、.NET2.0でも使える(多分)、など。
型推論も自動プロパティも匿名メソッドも全部.NET2.0で使えるんじゃないかな(未確認)。
280:デフォルトの名無しさん
09/03/05 00:46:27
>>279
ラムちゃんは?
281:デフォルトの名無しさん
09/03/05 00:50:26
>>279
拡張メソッドは構文糖じゃないし、専用のアトリビュートが必要なのでダメでせう
282:デフォルトの名無しさん
09/03/05 00:55:11
拡張メソッドは構文糖だよ。
283:デフォルトの名無しさん
09/03/05 00:58:43
今日日何が糖衣構文とそうでないものの境界もあいまいな気もする。
糖衣というより、コンパイラが提供する機能と言った方が適切じゃないのか
284:デフォルトの名無しさん
09/03/05 00:58:56
>>252-253
ありがとうございます。出来たのですが、コマンドプロンプト内に表示される出力内容を
取得できません。どうやればいいですか?
285:デフォルトの名無しさん
09/03/05 00:59:02
>>280
delegate int delTest(int i);
static void Main(string[] args)
{
delTest a = i => i + 1;
Console.WriteLine(a(3).ToString());
}
は2.0で通った。
あと、Func<T>(というかSystem.Core.dll)は3.5だけどAction<T>は2.0かららしい。
286:267
09/03/05 01:02:19
やあ。期待に膨らんだ胸がしぼみつつあるよ。
×var
×配列の暗黙的な初期化
○自動プロパティ
○コレクションの初期化
ラムダは試すまでもなく。
それでも.Net2.0のまま短縮できる表記が増えた!感謝!
287:285
09/03/05 01:03:39
なるほど、
foo(this IEnumerable boo){
}
は
foo([System.Runtime.CompilerServices.ExtensionAttribute] IEnumerable boo){
}
と等価で、System.Runtime.CompilerServices.ExtensionAttributeは
3.5からなんだね。
288:デフォルトの名無しさん
09/03/05 01:07:03
varって何が原因でいけないの?
289:デフォルトの名無しさん
09/03/05 01:07:55
いないいない
290:285
09/03/05 01:07:58
>>286
static void Main(string[] args)
{
List<int> a=new List<int>(){1,2,3,4,5};
foreach (var i in a) {
Console.WriteLine(i.ToString());
}
}
は通ったけど。
自分、279ですが、やっぱ基本的な基準は>>279でしょう。
291:267
09/03/05 01:18:45
スマソ。今まで1度も使ったことなかったので、
そもそもvarがローカル変数のみに有効ということを知らなかった。
メンバで試してエラーが出たのでダメと判断してた。
色々勉強になった、ありがとう。
292:デフォルトの名無しさん
09/03/05 01:21:36
varはVBのvariantと違うんだ。他の変数同様に厳密な型付けはされる。
型推論によって型を明示しなくてもコンパイラがわかってくれるという
場合にだけ有効。
293:デフォルトの名無しさん
09/03/05 01:25:05
IDEが優秀であれば問題ないかもしれんが、
紙で見てる分にはvarじゃ何の変数だかわからんので困らんのかな
294:デフォルトの名無しさん
09/03/05 01:30:49
紙で見るとかw
295:デフォルトの名無しさん
09/03/05 01:31:12
>>293
まあ、var にして型が何か分かりにくくなるようならやっぱ使わない方がいいと思う。
296:デフォルトの名無しさん
09/03/05 01:35:32
少なくともwebや解説本、MSDNのサンプルプログラムで書かれてたらえらい迷惑
297:デフォルトの名無しさん
09/03/05 01:41:08
.NET2.0の範囲で使えるC#3.0
推論型、匿名型, 暗黙型付け配列
コレクションのイニシャライザ、オブジェクトのイニシャライザ
パーシャルクラス、パーシャルメソッド
自動プロパティ、ラムダ式
.NET3.xが必要になる機能
ラムダ式でFunc<>, Expression<>を使用
LINQクエリ式他
拡張メソッド
>>281
拡張メソッドが使えないのはExtensionAttributeが3.5に含まれるから。
という事で、System.Runtime.CompilerServices.ExtensionAttributeを自分で定義してやれば2.0でも使える。
インテリセンスにゃ出ないけど、まぁそのくらいは我慢できるだろう。
298:デフォルトの名無しさん
09/03/05 01:45:39
>>拡張メソッド、Func<>
ぶっちゃけSystem.Core.dllをローカルコピー=trueにして参照しちゃえば良いんじゃ・・・
299:デフォルトの名無しさん
09/03/05 02:01:05
>>297
なんで必死なのかわからない
300:デフォルトの名無しさん
09/03/05 02:10:52
>>299
なんで必死なのかわからない
301:デフォルトの名無しさん
09/03/05 02:16:06
>>299
>>300
これだから文系は
302:デフォルトの名無しさん
09/03/05 02:22:34
>>301
なんで必死なのかわからない
303:デフォルトの名無しさん
09/03/05 02:34:48
ど、ど、ど童貞ちゃうわ!
304:デフォルトの名無しさん
09/03/05 02:36:07
>299-303の話の流れがさぱりわからないんだが・・・
305:デフォルトの名無しさん
09/03/05 02:41:10
触るな危険。放っておけ
306:デフォルトの名無しさん
09/03/05 02:41:58
>>305
なんで必死なのかわからない
307:デフォルトの名無しさん
09/03/05 02:51:15
>>306
これだから文系は
308:デフォルトの名無しさん
09/03/05 02:51:58
>>307
なんで必死なのかわからない
309:デフォルトの名無しさん
09/03/05 02:53:10
>>308
↓文系
310:デフォルトの名無しさん
09/03/05 02:59:54
>>309
なんで必死なのかわからない
311:デフォルトの名無しさん
09/03/05 03:00:42
OpenFileDialogでファイルを選択して、コンソールプログラムの引数に与えて実行しようとしています。
ファイルのパス名に空白が含まれるときは、どうすればいいですか?
312:デフォルトの名無しさん
09/03/05 03:08:23
>>311
ダブルクォーテーション?
↓文系
313:デフォルトの名無しさん
09/03/05 03:09:15
>>312
なんで必死なのかわからない
314:デフォルトの名無しさん
09/03/05 03:15:02
変数に入ってるので、ダブルクォーテーションができないみたいなんですが、、
こんな感じ。
String s = OpenFileDialog.FileName;
ProcesStartInfo.Arguments = s;
こうやって、ProcessをStartすると、ファイル名のパスに空白があるとそこで引数が終わりと判断されてしまいます。
315:デフォルトの名無しさん
09/03/05 03:24:46
その変数を括ったらどうなる?
316:デフォルトの名無しさん
09/03/05 03:26:11
>>315
なんで必死なのかわからない
317:デフォルトの名無しさん
09/03/05 03:27:35
String s = "\""+OpenFileDialog.FileName+"\"";
318:デフォルトの名無しさん
09/03/05 03:28:59
えー、括ったら単なる文字列になってしまいませんか?
やってみたら、Visual Studioの作業ディレクトリ+"s"というファイル名
をオープンしようとして失敗する、という結果でした。
319:デフォルトの名無しさん
09/03/05 03:30:49
>>318
>>317のように、文字列として括れってこと
320:デフォルトの名無しさん
09/03/05 03:31:21
>>319
なんで必死なのかわからない
321:デフォルトの名無しさん
09/03/05 03:31:28
>>317
できました!
なるほど、そうやるんですか。
ありがとうございました。
322:デフォルトの名無しさん
09/03/05 03:34:04
なんで荒らしがわいてんだ?
323:デフォルトの名無しさん
09/03/05 03:35:05
>>322
なんで荒らしがわいてんのかわからない
324:デフォルトの名無しさん
09/03/05 03:36:49
>>322
自称エレガントな解法を示したつもりが、
誰にも相手にされなかった可哀想な一般人らしい
325:デフォルトの名無しさん
09/03/05 03:38:30
>>324
なんで必死なのかわからない
326:デフォルトの名無しさん
09/03/05 03:41:02
>>324
とりあえずNG登録だな
番号飛ぶけど
327:デフォルトの名無しさん
09/03/05 03:42:19
日曜プログラマ、まだ粘ってたんか
328:デフォルトの名無しさん
09/03/05 03:44:14
なんで文系という言葉に反応するんだろう?
329:デフォルトの名無しさん
09/03/05 03:45:51
>>325
>>326
>>327
>>328
これだから文系は
330:デフォルトの名無しさん
09/03/05 03:48:55
いいえ短小包茎です
331:デフォルトの名無しさん
09/03/05 03:51:50
string.Format("\"{0}\"", path);
332:デフォルトの名無しさん
09/03/05 07:26:57
ToolStripMenuItem で選択後、自動で閉じないようにしたいのですが
どうしたらいいのですか?
333:デフォルトの名無しさん
09/03/05 09:37:28
その奇抜なUIの設計思想を変える
334:デフォルトの名無しさん
09/03/05 10:08:16
自分でパネルにでもラベルとか作って完全に自作して実装すれば?
というかクリックして閉じないとか・・・どうやって閉じるんだ?
Windowsライクな実装の方が使い手も違和感ないと思うんだけど?
335:デフォルトの名無しさん
09/03/05 11:03:21
継承してWndProcをフックすればいけそうな気はする
336:デフォルトの名無しさん
09/03/05 11:23:00
DataGridViewにDataTableをバインドしています。
DataTableの更新が終わるまで描画処理を止めたいのですが、
ListBoxで言うところのBeginUpdate()のようなメソッドってありますか?
337:デフォルトの名無しさん
09/03/05 11:43:50
データソースをBindingSource使うようにして
RaiseListChangedEventsプロパティで一時的にイベント通知無効化して
最後にResetBindingsで更新
338:デフォルトの名無しさん
09/03/05 11:56:13
>>337
ありがとうございます。試してみます。
339:デフォルトの名無しさん
09/03/05 11:58:30
>>293-296
varの最強の用途は、コレクションの要素の型が分かりづらい場合だろう。
例えば、Dictionaryはキーとアイテムの型パラメタ<foo,bar>をとるけど、
要素型はKeyValuePair<foo, bar>。
そこで、まず、
foreach(var a in dic){
}
って書いてvarにマウスポインタを当てる。すると、ツールチップでaの型が
出てくる。この場合KeyValuePair<foo,bar>。それを書き写して
foreach(KeyValuePair<foo,bar> a in dic){
}
とする。これが最強。
varの存在意義を語って存在意義を否定してしまった。
340:デフォルトの名無しさん
09/03/05 12:00:30
>>339
あれって良し悪しだよな・・・・
341:デフォルトの名無しさん
09/03/05 12:02:58
varを右クリックして「実際の型名に置換」とかできたら、バリバリ使っちゃう。
342:デフォルトの名無しさん
09/03/05 12:04:14
>>341
グッドアイデア!
343:デフォルトの名無しさん
09/03/05 12:05:15
それヘジたんがC#3.0についてのインタビューで言ってたことだけどなぜか実装されなかった
344:デフォルトの名無しさん
09/03/05 12:05:53
リファクタメニューに「ソリューション内のvarを実際の型名に置換」機能があったら、バリバリ使っちゃう。
345:デフォルトの名無しさん
09/03/05 12:08:21
VSってアドイン作れるよね?しかも.NETで。誰か作ってよ。(他力本願)
346:デフォルトの名無しさん
09/03/05 12:10:28
IDEの問題で解決できるなら、入力候補の推測機能ってことで実装すればいいのに。
? total = 0m;
という入力を許可し、;を入力した段階でIDEが?を推論した型に置き換える。
上の例だと、自動的に
decimal total = 0m;
に置き換わる。駄目?
347:デフォルトの名無しさん
09/03/05 12:14:06
型を書くかvarを書くかという極端な判断が必要だから
その場に応じて使い分けるというのがどうしてもしづらいんだよな
var total : decimal = 0m;
はじめからこういうスタイルにしとけば型を省略しても誰も違和感を抱かなかった
今作り直したらこうなりそう
348:デフォルトの名無しさん
09/03/05 12:16:44
なるほど、varを変数宣言の開始句として、:の後に型を書くのか。
で、:を入力した時点でInteliSenseが働くと。
でも、そこを弄ったらもう、"C"#じゃないんじゃ。
349:デフォルトの名無しさん
09/03/05 12:20:23
よし、:はクラスやインタフェースの継承に使うし、最近は冗長でも
IDEの入力支援頼みでコードを英語の文章に近付けるのが流行だから、
var total as decimal=10m;
で行こう。あれ?どっかで見たことあるぞ。
350:デフォルトの名無しさん
09/03/05 12:23:23
varの存在で一歩またVBに近づいた!
閣下、我々の陰謀は成功を収めつつあります。
351:デフォルトの名無しさん
09/03/05 12:24:48
実際その点についてはVBのほうが自然だと思うよ
CスタイルのメリットはCやJavaと同じであることくらい
352:デフォルトの名無しさん
09/03/05 12:29:11
型名 変数名;
って、
Animal dog;
でしょ?どう考えても英文法的におかしい。やっぱり、英文との類似性
よりも構文の単純さやキーワードの短さが尊ばれた時代の名残だよね。
353:デフォルトの名無しさん
09/03/05 12:33:53
でも、VBのdimキーワードも、配列宣言からの流用だったりして
英単語的には怪しかったりする。やっぱキーワードはvarで。
354:デフォルトの名無しさん
09/03/05 12:36:43
省略は良くない
今はIDEがあるのだからvarもvariableにするべきだ
355:デフォルトの名無しさん
09/03/05 12:40:50
define a variable dog which is an Animal and let it be a new instance of Animal whose name is "dog";
356:デフォルトの名無しさん
09/03/05 12:47:22
おいおい、文末はピリオドに決まってるだろ
357:デフォルトの名無しさん
09/03/05 12:50:52
そうすると、フィールド、プロパティ参照のピリオドを取りやめないとな。
let the name of the dog be "ポチ".
358:デフォルトの名無しさん
09/03/05 12:50:54
文頭に挨拶を書くのが礼儀だろ
dear my computer
359:デフォルトの名無しさん
09/03/05 12:57:28
Animal myDog=new Animal("dog");
myDog.name="ポチ";
と以下が等価ってわけですね。こんなのの入力もIDEの支援で余裕だぜ!
Dear my computer. Can you please define a variable myDog
which is an Animal and let it be a new instance of Animal
whose speciesName is "dog". And then please let the name
of the myDog be "ポチ".
360:デフォルトの名無しさん
09/03/05 13:03:34
それじゃ面倒だから、これでいいよ
a d = n a("d")
d.n = "ポ"
361:デフォルトの名無しさん
09/03/05 16:10:12
C#ってC++の一種とかんがえていいの?
362:デフォルトの名無しさん
09/03/05 16:28:10
C++とC#は伯父と甥ぐらいの位置
とても一種とはいえない
363:デフォルトの名無しさん
09/03/05 16:36:58
.NET言語は、CLRありきだから、多言語との親戚関係とかの議論は意味が
ないと思う。とりあえず、C++のサブセットでもスーパーセットでもない。
シンタックスがC由来の別物言語と捉えるべき。
それに、Cを拡張して言語仕様を肥大化させてオブジェクト指向を取り入れる
C++的なアプローチとは違い、JAVAを意識した自由度より構造性を優先させた
言語になっている。そのために、JAVA的な、やりたい事に対して解法が唯一つ的
な部分がある。
のわりに、P/Invokeなど泥臭いアプローチをしてでも自由度を確保する貪欲さもあって、
やりたい事ができないという事態も滅多に生じないようになっている。
良い所だけ挙げるならば、こんな感じでバランスの取れた構造的な言語。
プリプロセッサで変態マクロが定義できるC++なんか、もう見たくもないやい。
364:デフォルトの名無しさん
09/03/05 16:53:35
VSのウイザードで作るCOMやらMFCの雛形はひどかった
365:デフォルトの名無しさん
09/03/05 16:55:21
たまたまwin32のAPIと自分が作った関数名が衝突したので
名前空間で分けたらそれでも衝突して、調べて見たらマクロ定義
だった時の憤りといったら・・・
366:デフォルトの名無しさん
09/03/05 16:57:39
C++でマクロを使う奴は馬鹿
367:デフォルトの名無しさん
09/03/05 18:34:26
だからと言って避けて通れないのがC++のどうしようもない点なわけで。
368:デフォルトの名無しさん
09/03/05 18:38:31
なにしろwin32APIが・・・MFCが・・・
369:デフォルトの名無しさん
09/03/05 18:39:26
過去を引きずるのは大変だねとだけ
370:デフォルトの名無しさん
09/03/05 19:01:25
10の位を切り上げる処理をするのに
y= Math.Ceiling (x / 10) * 10;
と書いてるんですが他にいい書き方とかありますか
括弧の使い方とかなんか不安なんですが・・・
371:デフォルトの名無しさん
09/03/05 19:29:09
>>370
>>210をリスペクトして
y = Int32.Parse(String.Format("{0:d}0", (x + 9) / 10));
とか。
(ごめん、冗談だ、念のため。別に>>370の通りで問題ないよ)
372:デフォルトの名無しさん
09/03/05 19:35:17
xが整数以外なら問題あるでしょ。
っていうか整数なら9足すだけなんだけど。。
さて質問。
Windows Form のOnLoadとか適当な場所に
DayOfWeek[] ar = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));
listBox1.DataSource = ar;
comboBox1.DataSource = ar;
のようなコードを書くと、コンボボックスとリストボックスの選択が相互に
連動するんだけど、この仕組みと、こういう仕様の意図が知りたい。
373:デフォルトの名無しさん
09/03/05 19:46:27
データバインディング
GUIなんてデータ表示するだけなんだからわざわざTextだのItemsだの使うより
データを汎用的な形で関連付けられた方がいいよねという考え
カレント行の共有はCurrencyManager使ってコントロールの親子関係に基づいて行われる
374:デフォルトの名無しさん
09/03/05 19:54:30
>>373
ごめん、その思想自体はよくわかるんだけど、知りたいのは
2つのまったく無関係のコントロールの選択されているアイテムが連動する仕組みと、
そのような仕様にしてある意図なんだ。
375:デフォルトの名無しさん
09/03/05 19:56:20
windows formsだとそうなんだ。
WPFの場合
DayOfWeek[] ar = (DayOfWeek[])Enum.GetValues(typeof(DayOfWeek));
list1.DataContext = ar;
list1.SetBinding(ListBox.ItemsSourceProperty, "");
list2.DataContext = ar;
list2.SetBinding(ListBox.ItemsSourceProperty, "");
だと選択行は共有されないね。
376:デフォルトの名無しさん
09/03/05 22:41:17
>>341
>varを右クリックして「実際の型名に置換」とかできたら、バリバリ使っちゃう。
それ似たのがReSharperにあるよ。
377:デフォルトの名無しさん
09/03/05 22:42:44
似たようなのじゃためなんだ
僕らはC#に汚染されているんだ!
378:デフォルトの名無しさん
09/03/05 22:46:21
>>377
ReSharperはVS用のアドインだよ。確か。
まあこちとら趣味プログラマのexpress edition使い。
たっかいツールなんか使う機会なんざねーんだけどね。
379:デフォルトの名無しさん
09/03/06 00:03:40
>>268
ダメポ 続きは明日・・・・
380:デフォルトの名無しさん
09/03/06 00:09:08
ちょっと最後に質問SQL serverでLanやりたい場合一般的にDBの配置は
C:\Program Files\Microsoft SQL Serverの配下ですか?
自分で作ったC:\aaaみたいなフォルダでもいいんですかね・・・・
381:デフォルトの名無しさん
09/03/06 00:21:34
>>380
SQLサーバが自分のPCとは異なるPCにある場合、
c:\とか、ファイルを直接指定することはないよ。
接続する側→(LAN)→接続されるSQLServer
という関係で接続しているとき、
接続する側は、単に接続されるSQLServerのIPアドレス(とインスタンスと接続するDB名)を指定するだけ。
実際の物理ファイルのパス指定は接続されるSQLServerのほうで指定するので、
ConnectionStringでパスを指定することはない。
少なくとも自分が経験したスタンドアロンのSQLではそんな感じ。
382:デフォルトの名無しさん
09/03/06 00:24:32
ASP.NETの話になっちゃうんだけど
Web画面上にあるボタンをクリックするとクリックイベントが走りますよね。
でもWebだとクリックイベントの前にPage_Loadイベントが実行されますよね。
ちょくせつクリックイベントに飛ばす方法はないのでしょうか?
またPage_Loadイベントの処理の中で、Page_Loadイベントを抜けたら
次はクリックイベントが走るよというのを知る方法はありますか?
383:デフォルトの名無しさん
09/03/06 00:52:34
>>382
初期化したいのに、PostBackしたときもPage_Loadが呼ばれるから、
ボタンを押した時はPage_Loadは呼んで欲しくないということだろうけど、
そのためのIsPostBackだから、それで判断すればいいのでは?
ASP.NETの場合は、表示するたびに、そのページの新しいインスタンスが生成される。
これはwebという仕組み上仕方のないことなので、Page_Loadを実行せずに
インスタンスが生成する方法は基本的にはない。
クリックイベントが発生するということは、IsPostBackが必ずTrueだから、
それで判断すれば?
・・という意味でなかったら、contextとかみれば、イベントがあるかどうか
わかったほうほうがあるはず・・
384:デフォルトの名無しさん
09/03/06 10:01:27
>>374
無関係じゃないよ。同じ親コントロールに属して同じデータソースを参照してるじゃん。
無関係だと主張したいなら明示的にしないとだめ(Control.BindingContextプロパティ)。
仕組みはCurrencyManagerとかBindingManagerBaseとか調べれ。
意図? MSの人じゃないから答えられん。
まあ親とデータソースが同じなら現在行共有できた方が便利じゃねと思ったんじゃない?
.NET 2.0になってBindingSourceが追加されてデータソース主導になったけどな。
385:デフォルトの名無しさん
09/03/06 11:57:01
web上にあるファイルのサイズを簡単に取得する方法はありますか。
ダウンロードする前に知りたいのです。
386:デフォルトの名無しさん
09/03/06 12:00:40
簡単かどうかはその人次第だからなんとも
取得方法はそのファイルがどういうプロトコルで公開されているのかによるからなんとも
サイズ情報が公開されているかどうかはサーバ次第だからなんとも
387:デフォルトの名無しさん
09/03/06 12:04:25
HTTPならHEADで返してくれればいいけどな
388:デフォルトの名無しさん
09/03/06 15:00:26
HttpWebResponseのContent-Length
駄目な場合もあるけど
389:デフォルトの名無しさん
09/03/06 17:33:22
匿名メソッドと、ジェネリクス(Listなどのコレクション以外)で
うまいこと使用している例や、より利点がわかりやすく紹介されている
サイトがあったら教えてください教えてください。
390:デフォルトの名無しさん
09/03/06 17:43:46
>389
宿題?
391:デフォルトの名無しさん
09/03/06 17:49:54
MSDNでいいんじゃね?
392:デフォルトの名無しさん
09/03/06 18:06:45
匿名メソッドは自分だけが見るソースなら短いイベントハンドラの
定義に使うけど、推奨はできないなあ。
Button1.Click+=delegate{MessageBox.Show("Clicked!");};
とか。
処理の一部をカスタムできるメソッドを作るために使う例を
示せれば良いんだけど、できるだけLINQとか標準機能に落とし
込むようにしているので良い例がない。
ジェネリクスはやっぱり、独自のコレクションを作るとかが
多いんじゃない?
あと、幾つかデータの種類があって、それらのデータが更新された
時に更新値を受け取るコールバックを登録するメソッドが、
データの型をパラメタにとるジェネリックメソッドになっていた
のを見た事ある。でもこの場合、データの種類毎にメソッドを
用意するのと比べた場合の利点がさっぱり分からないコードだった。
393:デフォルトの名無しさん
09/03/06 18:17:46
Regex.Replaceなんかまさに匿名メソッドとかラムダ式の出番
394:デフォルトの名無しさん
09/03/06 19:08:52
>>390
宿題ではないです。
>>391
MSDNではサンプルが少ないのと、こういう時に使うと便利というのが、
イマイチよくわからないので。イベント的なコールバック用途というのは
意味はわかります。
>>392
ありがとうございます。
なるほど。自分も匿名メソッドにあまり利点を見いだせない一人です。
そのためサンプルがみたいと思ったのですが、
いいものがないということで残念です。
ジェネリクスもやはり独自コレクションがメインですか・・
コレクション以外の便利な使い方がイマイチ思いつかないので、
サンプルをお聞きしました。
395:デフォルトの名無しさん
09/03/06 19:30:11
前に複素数のジェネリック型なんて議論されていたよね。
それは特殊でかつ有用な使い方なんじゃないかな。
396:デフォルトの名無しさん
09/03/06 20:34:37
別に無理に利点を発見する必要は無いんじゃないの
必要に迫られたら使えばいい程度のものじゃないかね
397:デフォルトの名無しさん
09/03/06 21:38:25
System.Linq.Enumerableで嫌と言うほど出てくるよ
結局はコレクション操作だから微妙だけどな
くだらない例だけどEventHandler<TEventArgs>とか
398:デフォルトの名無しさん
09/03/06 21:49:34
Hoge a = 共通の前処理();
//aを使った固有の処理
共通の後処理(a);
こういうのが各所に出てきたから
void 共通の処理(Action<Hoge> action) { Hoge a = 共通の前処理(); action(a); 共通の後処理(a); }
こんなメソッドを定義して
共通の処理(a => { /*aを使った固有の処理*/ });みたいにしたことがある