ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
192:デフォルトの名無しさん
09/01/25 21:06:29
ないよ
名前空間はそれぞれ独立してる
見易さのためにピリオドで区切ってるだけ

193:デフォルトの名無しさん
09/01/25 21:07:20
名前空間ってその名の通り名前の一部にすぎないんだよ

194:デフォルトの名無しさん
09/01/25 21:09:41
>>191
ダメ。

195:デフォルトの名無しさん
09/01/25 21:15:29
using System; だけで System.* がすべてインポートされるなら、
名前空間を分けた意味がないじゃないか。

196:デフォルトの名無しさん
09/01/25 21:18:25
そもそもグローバル名前空間はすべての名前空間を含んでるんだから
何も書かなくても全てインポートされるはずだな

197:デフォルトの名無しさん
09/01/25 21:20:03
>>195
ごもっとも

198:デフォルトの名無しさん
09/01/25 21:33:05
SystemだけってのはExplorerでいうマイコンピューターみたいなもの?

199:デフォルトの名無しさん
09/01/25 21:35:05
PCのCPUみたいなものでは

200:デフォルトの名無しさん
09/01/25 21:36:57
Systemで指定されるものにSystem.Windows.Formsは入ってないとするなら
Systemだけで指定されてるのって何だとなるわな。

201:デフォルトの名無しさん
09/01/25 21:39:09
ためしにusing System;を抜いてみればわかるお

202:デフォルトの名無しさん
09/01/25 21:55:23
>>198
コレッ。 手元にVSない状態で、妄想で会話するな。

203:デフォルトの名無しさん
09/01/25 21:58:21
これ、自称非初心者の俺様も実はよくわかってない

204:デフォルトの名無しさん
09/01/25 22:10:43
リフレクションは遅いと聞くと
MethodInfoとかを静的フィールドにいちいち持っておきたくなるけど、
システムでキャッシュしてるそうだから効果なかったりする?
使うたびに作り直すのとどっちがいいかな?

205:デフォルトの名無しさん
09/01/25 22:12:25
そこら辺は言語によっていろんな考え方があるよね。
C++だと、using System;相当のものを書けば、Windows.Forms.Hogeと使えるという風に
入れ子の名前空間にもusingの効果が及ぶ。
C++から来た人間としてはそこにはまりそうになった。

206:デフォルトの名無しさん
09/01/25 22:12:47
>>204
CreateDelegateで取得したデリゲートをキャッシュするのが最速

207:デフォルトの名無しさん
09/01/25 22:13:18
だから、System も System.Windows.Forms も System.Collections も、
全部同じレベルなんだよ。

208:デフォルトの名無しさん
09/01/25 22:18:12
なんかフォルダみたいだね。
Systemフォルダの中にWindowsがあってその中にFormsがある。
SystemフォルダにアクセスしたからってFormsにアクセスするわけではない。

209:デフォルトの名無しさん
09/01/25 22:20:50
一応フォルダ状の構成なんだよね?
でも宣言はさらに下位のフォルダの中には及ばないってことなんだろう。

210:デフォルトの名無しさん
09/01/25 22:21:19
違う。C#ではあたかもネストしてるように見せかけてるだけ。

211:デフォルトの名無しさん
09/01/25 22:21:32
>>208
だからマイコンピューターなんだよ

212:デフォルトの名無しさん
09/01/25 22:25:00
namespace System { namespace Windows { この中ではSystemの型にアクセスできる } }
C#でこういう風に書けるのは単なるシンタックスシュガーみたいなもの。
本当に階層になってるわけではない。名前空間はあくまで型の前に付く名前。

213:デフォルトの名無しさん
09/01/25 22:26:28
だから、今、開いてるフォルダの中のファイルしか使えない。

例えば、C:\Windows\System\ を開いてるなら
その中のファイルにしかアクセスできない。
その下のC:\Windows\System\Form\ にあるファイルを開きたいならC:\Windows\System\Form\を開かないといけない。

ただ、わかりやすいようにカテゴリーに分けられているだけ。
極端に言えば
System.Windows.Forms ではなくWindowsForm という名前でも良かった。
・・・しかし、それではわかりにくく管理しにくいことからSystemのWindowsのFormsというように分類したまでの話。

214:デフォルトの名無しさん
09/01/25 22:28:13
どっちなんだよw
ネストしてるのか(フォルダ的)
別もんなのか


215:デフォルトの名無しさん
09/01/25 22:29:04
System_Windows_Forms
なら理解してくれるんじゃまいか?

216:デフォルトの名無しさん
09/01/25 22:29:54
難しく考えずに、フォルダとその中でいいんじゃない?
コンソールでパスを通したことがあるなら、イメージ的にはusingはそれと同等って感じ。

217:デフォルトの名無しさん
09/01/25 22:32:28
フォルダの中にフォルダはあるけど名前空間の中に名前空間は無いの
もっといえば,名前空間なんてものは単なる飾りなの

218:デフォルトの名無しさん
09/01/25 22:35:18
それよりギガ株を自社株買いで半値を割らせないようにしているけど
その評価でBPSを出してくるのは認められているの?。
グレーゾンも粉飾紛いに見えてしまう。

219:218
09/01/25 22:35:50
スマソ、ごばく

220:デフォルトの名無しさん
09/01/25 22:38:07
SystemとSystem.Windowsは同じ列なんだな。
Systemの下にSystem.Windowsがあるのかと思ってた。

221:191
09/01/25 22:38:53
たくさんの方に答えていただきありがとうございました。

というか、ここの人でも議論になるような疑問を持ててちょっとうれしかったです。

222:デフォルトの名無しさん
09/01/25 23:12:57
>>214
C#の概念ではネストしてる(フォルダ的)

MSILの概念(=リフレクションで扱える情報)ではネストしていない
(SystemとSystem.Windowsの間に親子関係はない)

223:デフォルトの名無しさん
09/01/25 23:14:11
usingの効果は、たとえば
using System.Text;と書いておけば毎回System.Text.StringBuilderと
書かなくて済むというだけの話でしょ。

で、using System;とだけ書いても、Text.StringBuilderと書けるようには
ならない、と。

224:デフォルトの名無しさん
09/01/25 23:23:22
>>206
おお
確かにDelegate実行は大分速いみたいですね

だけどこれMethodInfoにしか使えませんね
プロパティだって結局メソッドなのにPropertyInfoに使えないというのは

225:デフォルトの名無しさん
09/01/25 23:26:37
>>224
プロパティにも使えるよ
PropertyInfoのGetGetMethodやGetSetMethodでアクセサのMethodInfoが取れる
フィールドの場合は面倒だけどEmit使ってメソッドを動的に生成してやるしかない

226:デフォルトの名無しさん
09/01/25 23:34:12
EventInfo も同じ感じだな。少しは ILDASM あたりでメンバが
各々どうなっているか眺めてみれ
ちなみに >>225 のフィールドの場合のヒントは DynamicMethod な

227:デフォルトの名無しさん
09/01/25 23:40:36
フィールドの値の取得だけならExpression.Field使えば簡単だけどな

228:デフォルトの名無しさん
09/01/26 04:22:23
.NET製のソフトってそれ自体ではなく、JITコンパイラの起動が遅いの?

229:デフォルトの名無しさん
09/01/26 04:51:02
BinaryFormatterでシリアライズしたデータをデシリアライズしようとすると、
TypeLoadExceptionHolderがなんとかというエラーが出てきてデシリアライズできないのですが、
シリアライズができてデシリアライズができないというのはどんな原因が考えられるのでしょうか?

230:デフォルトの名無しさん
09/01/26 08:22:32
他で開きっぱなしで、開く権限がないとかかなぁ。

それか、テスト用として、保存直後に読み込んでて、
using とか Close とかしてなくてちゃんとフラッシュされてないか。

あとは、保存する時に、
ファイルを Create とか Truncate じゃなくて、
Append とか Open で保存しちゃってて不正なバイナリになってるとか。


231:デフォルトの名無しさん
09/01/26 09:59:07
>>230
多分そこら辺は問題ないと思います。というのも、それが起こるのがこのアセンブリで定義した
型をシリアライズした時のみで、それ以外の本体やプラグインで保存したデータについては全く問題ない
ためです。試しに、

[Serialize]
class TestData { }

というクラスをシリアライズして保存してみましたがそれでも上のエラーが飛んできます orz

BinaryFormatterを使っていてSerializeAttributeをつけ忘れてSerializationExceptionが飛ぶ
ということはありますが、ArgumentExceptionなんて飛んできたことないよ orz

232:デフォルトの名無しさん
09/01/26 10:22:23
>>231

[Serialize]→[Serializable]
でした orz

233:デフォルトの名無しさん
09/01/26 10:27:37
例外を正確に書いてみそ

234:デフォルトの名無しさん
09/01/26 11:09:20
>>233
エラーメッセージは

型 'System.Runtime.Serialization.TypeLoadExceptionHolder' のオブジェクトを
型 'PluginTest.IPluginData' に変換できません

と…
変換先の型名はちょっと変えてますが、それ以外は全く一緒で、SerializationExceptionではなく
ArgumentExceptionで飛んできます。InnerExceptionはnullでした。

235:デフォルトの名無しさん
09/01/26 12:24:02
>>234
そのコードを新しいプロジェクトとかで書いても同じ例外が投げられるの?
だったらそのコードをさらしてくれ。

236:デフォルトの名無しさん
09/01/26 16:26:58
>>235
新しくプロジェクトを作成し、すべて同一にすると同じ例外が飛んできますが、
名前空間を変えると飛ばなくなりました。
プロジェクト全体を確認してみましたが、名前空間とクラス名がダブっている訳でもなかったのですが…
なんだこれ orz

237:デフォルトの名無しさん
09/01/26 16:39:38
よく分からんけど関係するアセンブリをGACに登録してるとかない?
ローカルのアセンブリよりGACのが優先してロードされるので、
期待したのと違う動きをすることがある。

238:デフォルトの名無しさん
09/01/26 17:07:14
>>237
してないです。ngenとかも動かしてないのでキャッシュされたのがロード
されてるわけではないと思います。
.NETのインストールでもミスったんでしょうか…

239:デフォルトの名無しさん
09/01/26 17:12:49
VS2008でソースとかシンボルとか落としてきてSerializeの中追っかけてみたら何か分かるかもね

240:デフォルトの名無しさん
09/01/26 19:22:56
ある別の型(T)に変換できることを表すインターフェイスは無いの?
IConvertible<T>みたいな

241:デフォルトの名無しさん
09/01/26 19:53:38
標準ライブラリには無いな

242:デフォルトの名無しさん
09/01/26 21:12:35
is T じゃだめなのか?ダメだな。

243:デフォルトの名無しさん
09/01/26 23:19:27
クラス名にOfとか使うのってどうなんだろう。
たとえばContainerOfImage、ContainerOf3D、といった感じの名前の付け方。似た機能のクラスの頭文字が統一されて見やすいとは思うんだけど。

244:デフォルトの名無しさん
09/01/26 23:25:42
不自然
英語としてどうかは置いといて,普通は見かけないから激しく違和感を感じる
Ofのかわりにアンダーバー使ったりする方がまだ綺麗な気がする

245:デフォルトの名無しさん
09/01/26 23:25:56
それなんてVB.NET
List(Of T) URLリンク(msdn.microsoft.com)
Of キーワード URLリンク(msdn.microsoft.com)

246:デフォルトの名無しさん
09/01/26 23:31:14
○○Of(引数)の形を除けば,メンバ名にもOfってあんまり見かけないよね

247:デフォルトの名無しさん
09/01/26 23:32:15
別に Of なくてもいいと思う。
先にカテゴリを記述する命名スタイルは普通にある。
Of を名前に入れるのは、Of 込みで1つの熟語になってるようなものくらい。

248:デフォルトの名無しさん
09/01/26 23:35:22
DialogColorやStreamStringじゃ全然違う意味になっちゃうよ

249:デフォルトの名無しさん
09/01/26 23:51:31
全部そう言う命名で統一されていれば気にならないもんさ。

250:デフォルトの名無しさん
09/01/27 00:09:30
>>240
変換出来るかどうかを知るだけなら、TypeConverter拾ってきて
CanConvertTo(), CanConvertFrom()で良いと思う

251:デフォルトの名無しさん
09/01/27 00:37:45
C#で複数ファイルを一つに暗号化した上で纏めるツールを作ろうと思っているのですが、
例えば、次の3ファイルを1ファイルに纏めるにはどうすれば良いでしょうか?

※また、一纏めにするだけではなく、パスワードを入力する事により暗号化した上で1ファイルに纏めたい
と思っています。当然複合化もしたいです。

【暗号化_前】
AAA.xls
BBB.xls
CCC.xls

【暗号化_後】
ABC.xls

【パスワード】
abc_dayo




252:デフォルトの名無しさん
09/01/27 00:43:07
7zip32.dllでも呼べば?

253:デフォルトの名無しさん
09/01/27 01:01:41
>>252
あざーす。ぐぐってみます。

254:デフォルトの名無しさん
09/01/27 01:02:41
ふぇ…

255:デフォルトの名無しさん
09/01/27 10:13:08
ふぇっくしょん!

256:デフォルトの名無しさん
09/01/27 12:26:20
if なんらかの条件
{
なんらかの処理
}

ボタン処理



のプログラムでなんらかの条件に当てはまったときにボタン実行が行えないようにするにはどうすればいいでしょう?
プログラム自体わけわかめで日本語でおkは重々承知ですが、エスパーさん助けて;;

257:デフォルトの名無しさん
09/01/27 12:40:25
if なんらかの条件
{
なんらかの処理
}
else
{
ボタン処理
}

258:デフォルトの名無しさん
09/01/27 12:59:42
まさにそのとおりのプログラムなのですが

if なんらかの条件 @

   if なんらかの条件A
   {
     なんらかの処理A
   } 
    else
    {
     なんらかの処理B
    }

ボタン処理

となっていて、なんらかの条件Aのときにボタン処理させないようにしたいので、頭ぐちゃぐちゃーとなっています。

259:デフォルトの名無しさん
09/01/27 13:02:41
なんらかの処理Aの最後でreturn;すればヨイヨイ

260:デフォルトの名無しさん
09/01/27 13:05:03
リターンよくわかってないです。調べてみます。ありがとう

261:デフォルトの名無しさん
09/01/27 13:05:44
if なんらかの条件 @

   if なんらかの条件A
   {
     なんらかの処理A
   } 
    else
    {
     なんらかの処理B
    }

else
{
   if なんらかの条件A
   {
     なんらかの処理A
   }
else
{
     ボタン処理
   }




262:デフォルトの名無しさん
09/01/27 13:20:29
なんらかのがゲシュタルト崩壊した

263:デフォルトの名無しさん
09/01/27 13:38:36
まあreturnで解決できる場合もあるし関数分ける手もあるが、
どんな場合でも対応したいのならば、

bool b = なんらかの条件 @;

if (b)
{
なんらかの処理
とかいろいろ
}

if (b)
{
ボタン処理
}

みたいに保存しておいて後で使ったりできるぞ。

264:デフォルトの名無しさん
09/01/27 13:39:14
if (!b)
{
ボタン処理
}

だった。。。

265:デフォルトの名無しさん
09/01/27 13:48:20
>>258
 bool ボタン処理するフラグ = true;
if なんらかの条件 @

   if なんらかの条件A
   {
     なんらかの処理A
      ボタン処理するフラグ = false;
   } 
    else
    {
     なんらかの処理B
    }

 
 if (ボタン処理するフラグ)
 {
 ボタン処理
 }


266:デフォルトの名無しさん
09/01/27 13:57:51
結局、>>258のやりたいことがなんなのかよく分からんかった。
単純に牡丹を押した時の処理を分岐させたいだけだったのか、
それとも一定条件下ではボタンそのものを押せないようにしたかったのか・・・


なんだっけ、MVCの類似だか発展版みたいなやつで
こういうのをスマートに解決する方法があったような。

267:デフォルトの名無しさん
09/01/27 13:59:42
ご飯行ってました。ありがとうございます。参考にして書いてみます。

268:デフォルトの名無しさん
09/01/27 14:02:57
>>266 一定条件下ではボタン押しても処理させないようにする ですね。
具体的に言うと、保存ボタンなので、データベース更新させないようにする、ですかね。
権限チェックをして、誰々なら見ることはできるけど、保存はできないという。

269:デフォルトの名無しさん
09/01/27 14:12:37
つーか押しても何も起きないんだったら押せなくすべきじゃね?
と思ったら何か起きるのか
でも保存ボタンで保存されないのは嫌ね

270:デフォルトの名無しさん
09/01/27 14:18:52
押せなくする方法がわからんとです

271:デフォルトの名無しさん
09/01/27 14:19:34
権限管理を、そんなあちこちでアドホックにやってたら漏れるぞ。

272:デフォルトの名無しさん
09/01/27 14:37:51
ButtonSubmit.Attributes.Add("onclick", "return confirm('ダイアログに出るメッセージ');");

で、ダイアログに出るメッセージを変数に変えて、変数の中身を表示させるにはどうすればいいのでしょう。

ButtonSubmit.Attributes.Add("onclick", "return confirm('MSG01');");
でMSG01の中身をメッセージとして出したいのですが

273:デフォルトの名無しさん
09/01/27 14:56:00
>>260
do { ... } while(false);
にして、breakすれば良い

274:デフォルトの名無しさん
09/01/27 14:57:36
>>270
ボタンのEnabledプロパティをfalseにするんだ

275:デフォルトの名無しさん
09/01/27 15:09:47
>>272
ButtonSubmit.Attributes.Add( "onclick", "return confirm('" + MSG01 + "');" );

276:デフォルトの名無しさん
09/01/27 15:13:09
おおお
ButtonSubmit.Enabled = false;
たったこれ追加すれば使用不可にできました。ありがとう〜

277:デフォルトの名無しさん
09/01/27 15:17:02
データグリッドビューで質問があります。
データグリッドビューの列を1から10まではユーザーが任意で追加する事ができるが、
それ以上は追加できなく(メッセージなどで「追加できません」と表示)するにはどうすれば良いのでしょうか?

278:デフォルトの名無しさん
09/01/27 15:20:51
void hoge(EventHandler handler) { }

引数で渡されたデリゲートが、匿名メソッド・ラムダ式かそうでないかを判別する方法って無いですよね・・・?

279:デフォルトの名無しさん
09/01/27 15:22:29
>>275 できましたー!ありがとうー!”++”が必要なのかぁ。こういうの載ってる本ないですかねー。

280:デフォルトの名無しさん
09/01/27 15:24:08
C#の解説書で載ってないものは無いだろう

281:デフォルトの名無しさん
09/01/27 15:36:59
>>278
それを判別してどうしたいんだ?

282:デフォルトの名無しさん
09/01/27 15:40:35
>>278
メソッドを持つ型の名前でも見れば

283:282
09/01/27 15:54:54
ああ、型名だとstaticなときに駄目だな
じゃあ、メソッド名の方で

284:デフォルトの名無しさん
09/01/27 16:04:28
>>277
this.dataGridView.AllowUserToAddRows = false;

1〜10まではあらかじめデフォルトの数値を入力しておけばおkだと思う。


285:デフォルトの名無しさん
09/01/27 18:02:13
テキストボックスで入力された値を変数に入れる
A=〜; B=〜; C=〜; ・・・

変数が正しいかチェック (日付や金額の桁)
正しかったらBoolでTrueを返す

if全部正しいとき
保存処理を行う

else
本処理終了

みたいな感じでプログラムを組みたいのですが、全部正しいときって
A==True && B==True &&・・・・・
みたいな感じでやっていくのですか?
またもうまく説明できない(´ω´)

286:デフォルトの名無しさん
09/01/27 18:05:34
A && B && Cでいい

287:デフォルトの名無しさん
09/01/27 18:10:03
全部False 日付も金額も合ってないときも保存処理行われちゃいません?

288:デフォルトの名無しさん
09/01/27 18:12:06
おまえは何を・・・
&&でつないだら全てtrueの場合だけ条件に一致するよ

289:デフォルトの名無しさん
09/01/27 18:13:25
おまえは全部ここで質問するつもりか
仕事じゃねーのそれ?
本でも買って読めや低能


290:デフォルトの名無しさん
09/01/27 18:25:11
>>288
どうして&で繋ぐとtrueになるかわからないのですが、そういう仕様なのですか?

291:デフォルトの名無しさん
09/01/27 18:28:44
&&は論理積の演算子どれか一つでもfalseならfalse

292:デフォルトの名無しさん
09/01/27 18:30:21
A && B AとBが両方trueのときtrue でなければfalse
A || B AかBのどちらかがtrueのときtrue 両方falseならfalse

293:デフォルトの名無しさん
09/01/27 18:31:27
>>291 なるほど。どこかで見た&&は、かつ ||は、または と日本語変換してたのがいけなかったですね。

294:デフォルトの名無しさん
09/01/27 19:09:05
日付チェックは
public static bool IsDate(int iYear, int iMonth, int iDay) {
if ((DateTime.MinValue.Year > iYear) || (iYear > DateTime.MaxValue.Year)) {
return false;
}

if ((DateTime.MinValue.Month > iMonth) || (iMonth > DateTime.MaxValue.Month)) {
return false;
}

int iLastDay = DateTime.DaysInMonth(iYear, iMonth);

if ((DateTime.MinValue.Day > iDay) || (iDay > iLastDay)) {
return false;
}

return true;
を参考にしようと思うのですが、どう自分で作った変数を当てはめていいのかわからないのですが、わかる方ご教授ください。

295:デフォルトの名無しさん
09/01/27 19:16:20
new DateTime(year,month,day)
ってやれば間違ってた時例外かなんか投げてくれるんじゃないの

296:デフォルトの名無しさん
09/01/27 19:17:14
変数なんか一つも作る必要ないんじゃないか?


297:デフォルトの名無しさん
09/01/27 19:23:26
自分もそう思うのですが、データベースを直接扱うのはよくない。エラー原因やチェックがしやすい。
という理由で、テキストボックスとかで入力した値を変数に入れるそうです。あんまりよくわかってないですが


298:デフォルトの名無しさん
09/01/27 19:55:57
>>297
>>289

299:デフォルトの名無しさん
09/01/27 20:04:36
>>291-293
その覚え方は危険。
&&と||は論理積ではなくショートカット演算子。
まずAを評価して、その結果によってはBも評価する。
A&&B デフォルトはfalse。Aがtrueの時のみBが評価される。Bがtrueならtrue。
A||B デフォルトはtrue。Aがfalseの時のみBが評価される。Bがfalseならfalse。

300:デフォルトの名無しさん
09/01/27 20:11:50
>>299 なるほどー。わかりやすいですね。ありがとう。
わからない単語とか検索すると、たいていトップにマイクロソフトのヘルプみたいな解説が出てくるけど、すごいわかりにくいですな

301:デフォルトの名無しさん
09/01/27 20:15:22
MSDNは英語で読むに限る

302:デフォルトの名無しさん
09/01/27 20:50:57
>>299
論理積は論理積だよ
ショートサーキット評価するだけで

303:デフォルトの名無しさん
09/01/27 22:53:39
去年買っておいたデザインパターンの本(C#)を読んでるんだけど目から鱗だ
何でもっと早く読まなかったんだろう

304:デフォルトの名無しさん
09/01/27 22:58:09
>>299
ということは
if(A()&&B()){

}

とあったとき
A()でfalseが帰ってきたら
B()が呼ばれないんですか?

305:デフォルトの名無しさん
09/01/27 23:00:55
そうだよ

if( A() & B() )

ならBも呼ばれる

306:デフォルトの名無しさん
09/01/27 23:02:08
>>304
そのとおり。
if (A()) {
 if (B()) {
  〜
 }
}
と等価です。

307:デフォルトの名無しさん
09/01/27 23:03:07
>>305
成る程
順番によっては値が変わることもあるのか…
ありがとうございます

308:デフォルトの名無しさん
09/01/27 23:03:44
>>303
だからってobserverとかinterpreterとかはそのまま使っちゃダメだよ
イベントやforeachとしてC#に組み込まれてるからな
他にもデリゲート使うと非常に簡単になるパターンは多い

309:デフォルトの名無しさん
09/01/27 23:06:14
A()&&B()の場合、A()の結果次第でB()が呼ばれるかどうか決まる。
A()&B()の場合、両方呼ばれるが、(結合規則とは無関係に)どちらが
先に呼ばれるかは不定。

310:308
09/01/27 23:07:42
×interpreter→○iterator

311:デフォルトの名無しさん
09/01/27 23:08:15
いまさらだけど

A == B
 と
 A.Equals(B)
ってどっちがお勧めなの?

312:デフォルトの名無しさん
09/01/27 23:10:06
>>305
逆じゃないの?

313:デフォルトの名無しさん
09/01/27 23:12:35
&&や||の場合が両表評価するじゃなかったっけ?

314:デフォルトの名無しさん
09/01/27 23:16:14
>>311
目的による
参照比較したいならObject.ReferenceEqualsが確実
値の比較がしたい場合は
==, IEquatable<T>.Equals, Object.Equals (左ほど優先)
の中から実装されているものを使えばいいと思う

315:デフォルトの名無しさん
09/01/27 23:17:00
>>312
>>313
コード書いて確かめりゃ一発だろハゲ

316:デフォルトの名無しさん
09/01/27 23:19:29
>>303
オライリーのやつ?

317:デフォルトの名無しさん
09/01/27 23:20:00
>>315
めんどくさいんじゃチンカス

318:デフォルトの名無しさん
09/01/27 23:20:59
質問です。
開いたウィンドウを閉じたいと思います。
アプリケーションの場合は、
Process hProcess = Process.Start("Notepad");

if (! hProcess.CloseMainWindow()) {hProcess.Kill();}

でできるのですが、エクスプローラの場合、
Process hProcess = Process.Start("explorer");
とすると、ハンドルされていない例外が発生し、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」となります。
どのようにしたらよいか教えてください。


319:デフォルトの名無しさん
09/01/27 23:22:05
>>317
ならばヘルプ読め。あるいは他人の解答を信じるか。
|| URLリンク(msdn.microsoft.com)
&& URLリンク(msdn.microsoft.com)
> ただし、x が true の場合、y は評価されません。この場合、OR 演算の結果は y の値にかかわらず true になるためです。
> ただし、x が false の場合、y は評価されません。この場合、AND 演算の結果は y の値にかかわらず false になるためです。
> これは、"ショートサーキット" 評価と呼ばれます

320:デフォルトの名無しさん
09/01/27 23:25:30
>>318
hProcessがnullなんじゃね?

Process.Startの戻り値は

>プロセス リソースに関連付けられた新しい Process コンポーネント。
>プロセス リソースが起動されなかった場合は null (既存のプロセスを再利用した場合など)。

シェル(explorer.exe)の場合、新しいフォルダを新規プロセスで開く設定にしてないと
プロセスは作られないよ

321:デフォルトの名無しさん
09/01/27 23:26:05
だっふんだ!m(__)m

322:デフォルトの名無しさん
09/01/27 23:27:54
2つ以上の評価をするときに使えそうだな

323:デフォルトの名無しさん
09/01/27 23:34:01
>>316
これだけど、糞味噌に書かれててワラタ
URLリンク(www.amazon.co.jp)
アレな感じのコメントもいくつかあるけどw

324:デフォルトの名無しさん
09/01/27 23:43:52
>>323
たしかにレビューはあれだw
でも書名出してくれてありがとう

325:デフォルトの名無しさん
09/01/27 23:49:35
>>320
おお。なるほど。explorerを新規プロセスで開く方法は?


326:デフォルトの名無しさん
09/01/27 23:53:26
(´・ω・`)しらんがな

327:デフォルトの名無しさん
09/01/28 00:12:24
>>244-250
レスサンクス。参考になった。

328:デフォルトの名無しさん
09/01/28 05:02:41
C#でのExcel操作(自動化)について質問をさせてください。
dataGridViewから入力した内容を取り出し、Excelに出力をしたいのですが
以下のコードの時、数値を入力した場合のみ、「数値が文字列として保存されています」と表示され、エラーが発生します。
どのようにすれば文字列ではなく数値で出力をする事ができるのでしょうか?

string[,] table = new string[10,1];
for (int c = 0; c < 10; c++)
{
table[c, 0] = dataGridView1.Rows[c].Cells[0].Value.ToString();

}
sheet.get_Range("A1", "A10").Value2 = table;

329:デフォルトの名無しさん
09/01/28 08:15:48
object[,] tableにしてToString()しなきゃいいんじゃね?

330:初心者
09/01/28 14:28:58
C#.NETについて質問させてください。
MVCアーキテクチャでWebサイトを構築していますが、XMLファイルより、
使用クラス名を読み取り、動的に使用クラスのインスタンスを生成する為に、リフレクション
機能を使用したいのですが、Type.GetType()メソッドやAssembly.GetType()メソッドなどの
戻り値がNULLになってしまいます。GetType()メソッドを使用するクラスと同じファイルに、
インスタンス生成したいクラスのクラス定義を書くとうまくいくのですが、別ファイルにすると、
うまくいきません。
詳しい方ご教授お願いします。

331:デフォルトの名無しさん
09/01/28 14:41:07
完全限定名で書いてないとかそんなんだろ
初心者名乗る奴がリフレクションとかどうよと思うけど

332:デフォルトの名無しさん
09/01/28 15:31:31
Dictionary<Key, Value>と同様な追加/削除/検索が行えて
ValuesプロパティがObservableCollectionみたいに変更通知機能がある
そんなコレクションってありませんか?

333:デフォルトの名無しさん
09/01/28 16:52:04
Dictionary<,>とObservableCollection<>の両方をラップした
IDictionary<,>の実装クラスを作ればいいよ
ほとんど丸投げだからそんなに手間はかからない

334:デフォルトの名無しさん
09/01/28 17:22:34
パラメータをバインドする機構がない
ってどういう意味ですか?初心者にはさっぱり

335:デフォルトの名無しさん
09/01/28 17:31:18
コンテクスト(文脈)って知ってる?

336:デフォルトの名無しさん
09/01/28 17:51:08
文脈って意味じゃないでしょうか?!!!!

337:デフォルトの名無しさん
09/01/28 20:22:00
そういえばインデクサやStreamのサイズ指定はint型だけど
64bit環境だとどうなるの?
アドレス空間が64bitになっても4GBに縛られるの?

338:デフォルトの名無しさん
09/01/28 20:37:22
>>337
uintでないから2Gだな。
しかし、ストリームなら2GBずつRead/Writeすればいいし、
List<T>でもTが例えば16バイトの構造体なら全部で32GBまでいける。

もっとも、そんな大量のメモリを一度に扱おうというのなら、
まだまだネイティブなコードのほうがいいだろうと思うのは俺だけか?

339:デフォルトの名無しさん
09/01/28 20:43:20
インデクサはどんな型でも使えるだろ。

340:デフォルトの名無しさん
09/01/28 21:49:42
配列の添え字はlongでいけなかったっけ?

341:デフォルトの名無しさん
09/01/28 22:02:41
NativeIntなんで64bitプロセスなら可能のはず

342:デフォルトの名無しさん
09/01/29 01:22:12
>>340
配列の添え字にはlong型の値も使える。
そのため、配列にはint型のLengthプロパティに加えてlong型のLongLengthプロパティもある。
32bit環境でも一応、

int[] arr = new int[ long.MaxValue ];

と書けるし、コンパイルもできるのだが、>>341の言うとおり、NET.Framework内部では配列の
添え字をNativeIntで処理しているので、実行するとOverflowExceptionが発生する。
内部でNativeIntの範囲を超える添え字を扱えるようにしても、そんな配列を確保した時点で
メモリ不足に陥るのは自明なので、合理的な仕様なんじゃないだろうか。

343:テラ初心者
09/01/29 17:01:11
引数・・・メソッドを呼び出す際に渡す情報のこと。
なんのことかサッパリわかりません。メソッドもなんかの処理なんだろうなあ位にしかわかってません。
何がなんのために何に何の情報を渡しているのですか????

344:デフォルトの名無しさん
09/01/29 17:04:07
まず@ITのC#入門でも読め

345:デフォルトの名無しさん
09/01/29 17:05:56
釣りでしょ

346:デフォルトの名無しさん
09/01/29 17:41:47
TVのリモコンでチャンネルの上下は引数なしだが、一発選局はチャンネル数が引数といえる。

347:デフォルトの名無しさん
09/01/29 17:46:24
tv.SelectChannel(-1, CURRENT) とか書きうるわけだが

348:デフォルトの名無しさん
09/01/29 17:51:56
せっかくメソッドにしてるのだから Up() Down() だろ。
なんで使いにくくするんだ。

349:デフォルトの名無しさん
09/01/29 17:52:47
リモコンのボタンで、CURRENT、-1、チャンネルチェンジと押すわけですね、その形式だと。

350:デフォルトの名無しさん
09/01/29 17:55:29
ほむほむ。ありがとう。Voidとかで引数を返さないっていうのはどういうメリットがあるというか、どういうときに使うのでしょう?
チャンネルでいうと、8ちゃんボタン押しても数字が入っていないので何も起こらないのかな。

351:デフォルトの名無しさん
09/01/29 17:57:23
voidで値を返さないメリットがあるかじゃなくて
値を返すメリットがないからvoidなんだろ

352:デフォルトの名無しさん
09/01/29 18:04:06
それ引数じゃなくて戻り値では

353:デフォルトの名無しさん
09/01/29 18:10:46
private void CalcButton_click(object sender,EventArgs e)
{
}
作って覚えるC#の本より引用なのですが、これからVoid取っちゃうと何か不具合ありますかね?

354:デフォルトの名無しさん
09/01/29 18:11:34
やってみればわかる

355:デフォルトの名無しさん
09/01/29 18:11:51
イベントから学習しろ

356:デフォルトの名無しさん
09/01/29 18:12:01
>>353
戻り値が分からなくてエラー出る

357:デフォルトの名無しさん
09/01/29 18:15:19
なるなる。ありがとう。やっぱり読むだけじゃ覚えれなそうですね
6年前のPCにVisualStudio入れたら重くなって挫折してしまいました

358:デフォルトの名無しさん
09/01/29 18:17:08
デフォルトのvoidさんは無いのか。
2CHよりひでーな。

359:デフォルトの名無しさん
09/01/29 18:18:33
>>357
csc.exeのあるディレクトリにPATHだけ通せば
あとはコマンドプロンプト+エディタで最低限の環境が揃うぞ
ネットで適当に調べてやってみるといい

360:デフォルトの名無しさん
09/01/29 21:40:32
頻繁に呼ばれる関数で
newを使うのって速度かなり落ちますか?
画像データ用の領域で、一度に640*480*4バイト確保します。

361:デフォルトの名無しさん
09/01/29 21:42:02
関数を呼ぶのに new は必要ない。

362:デフォルトの名無しさん
09/01/29 21:44:47
>>361
日本語読めますか?

363:デフォルトの名無しさん
09/01/29 21:45:07
落ちますか? ってやってみればいいじゃない

newを使うかどうかよりも1MBを頻繁に確保するのは重いかもね
ワーキングセットも大きくなるだろうし

364:デフォルトの名無しさん
09/01/29 21:48:19
コンピュータの性能が良すぎて問題ないという可能性もある。
まずは率直な書き方で作ればいい。

365:デフォルトの名無しさん
09/01/29 21:49:23
キャッシュしても問題ない構造ならとりあえずキャッシュするようにしといてもいいとおもうよ
手間かかるものでもなし

366:デフォルトの名無しさん
09/01/30 01:03:05
>>362
日本語で書いてどうする?

367:デフォルトの名無しさん
09/01/30 01:18:14
>>366
日本語通じてなくてワロタ

368:デフォルトの名無しさん
09/01/30 08:50:41
>>366
アイちゃん乙

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
ダブルバッファリングじゃないの


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

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