ふらっとC#,C♯,C#(初心者用) Part69
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2011/01/29(土) 11:39:22「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっとC#,C♯,C#(初心者用) Part68
http://hibari.2ch.net/test/read.cgi/tech/1294921393/
■関連スレ
C#, C♯, C#相談室 Part64
http://hibari.2ch.net/test/read.cgi/tech/1294734221/
VB.NET質問スレ(Part35)
http://hibari.2ch.net/test/read.cgi/tech/1284423653/
くだすれC++/CLI(初心者用)part2
http://pc12.2ch.net/test/read.cgi/tech/1268613679/
■備考
コードの量が多い場合は下記サイトを使うなどしたほうがいいかも
http://ideone.com/
コードを貼り付けてRun codeのチェックをはずしてsubmitボタンを押すと
コードを鯖側にアップして専用のアドレスが発行されます。
直接貼る場合は下記サイトなどを利用してhtmlエンコードした方が
インデントも残って見やすいです
http://kawama.jp/php/encode_html.php
0153デフォルトの名無しさん
2011/02/01(火) 18:39:32やっぱそうなのかなあ。
ちょっとTextBoxのControlTemplate見たけど、肝心のコードが絡む部分は
TemplatePart使ってるね。
http://msdn.microsoft.com/ja-jp/library/ms752068.aspx
じゃあとりあえずTextBoxに絡む機能を盛り込みたいとき用にTemplatePart用意して、
コントロールの利用者がテンプレートの定義でTextBox使うなら、バインドではなくNameで指定させる。
その他例えばBorderのコンテンツとして表示するだけ、とかはそのままプロパティをバインドさせる。
コントロールのコード部分に、表示に関するロジックがゴチャゴチャ増えるけど
そこはもう気にすんなということか。
0154デフォルトの名無しさん
2011/02/01(火) 20:22:19datetime1<虫食いだった時間
かつ
虫食いだった時間<datetime2
を満たすような虫食いを埋める数字があるかどうかを判定したいんですがどうやったらいいですか
虫食いの数と場所と二つのDateTimeの間隔は不定です
0155デフォルトの名無しさん
2011/02/01(火) 20:33:28意味不明
0156デフォルトの名無しさん
2011/02/01(火) 20:33:55年→月→日→…の順にdt1>dt2、dt1=dt2、dt1+1=dt2、dt1+1<dt2ぐらいに場合分けして考えてみれば?
まあ待ってれば誰かがLINQで書いてくれると思うよ
0157デフォルトの名無しさん
2011/02/01(火) 20:34:54いま、このスタティックメソッドを別クラスから使おうとしてるけどうまくいかない なぜだか心当たりある人いますか?
ちなみにデバッグしてみると、スタティックメソッドを実行してる行で「dll関数のdllが見つかりませんでした」って内容の例外が発生してる
0158デフォルトの名無しさん
2011/02/01(火) 20:40:040159デフォルトの名無しさん
2011/02/01(火) 20:50:31C++です(externがある)
0160デフォルトの名無しさん
2011/02/01(火) 20:52:52正しく関数がエクスポートされてることはdumpbinで確認した?
0161デフォルトの名無しさん
2011/02/01(火) 21:15:52Stopwatch.Stop();
とやるだけで15ticksは進んでるんですが、
どういう事なんでしょうか、
この行間で15clockの処理が行われているという事ですか?
それともメソッドそのものが15clockで実行されてるのでしょうか
0162デフォルトの名無しさん
2011/02/01(火) 21:18:37タイマ自体がその程度の解像度しかないんでしょ
0163デフォルトの名無しさん
2011/02/01(火) 21:37:10DLLファイルが見つからないのかDLL内に指定された関数が見つからないのかどっちよ>例外
0164デフォルトの名無しさん
2011/02/01(火) 21:41:41前者じゃないの?
Frequencyの値はCPUのクロック(の半分?)だと思えば、まあそんなもんでしょ。
0165デフォルトの名無しさん
2011/02/01(火) 22:49:350166デフォルトの名無しさん
2011/02/01(火) 22:57:29geckoWebBrowser1.Document.DocumentElement
を取得しようとすると、必ず、InvalidCastException が出るんだが、
解決策しってる人いたら助けて欲しい。
ちなみに VS2010&Win7(32bit)&WinForms&.Net Framwork 4
で開発してます。
0167デフォルトの名無しさん
2011/02/02(水) 00:03:590168デフォルトの名無しさん
2011/02/02(水) 00:10:270169デフォルトの名無しさん
2011/02/02(水) 00:18:560170デフォルトの名無しさん
2011/02/02(水) 00:32:280171デフォルトの名無しさん
2011/02/02(水) 00:46:390172デフォルトの名無しさん
2011/02/02(水) 00:48:590173デフォルトの名無しさん
2011/02/02(水) 00:49:020174デフォルトの名無しさん
2011/02/02(水) 00:56:21あれはWinFormsのデザイナみたいにコード生成するやつで使うためにある。
0175デフォルトの名無しさん
2011/02/02(水) 00:59:560176デフォルトの名無しさん
2011/02/02(水) 01:00:00ありがとうございます
>>174
いえ、どー考えてもこのクラスこれっきゃねーよ
みたいな場合に無理やり意味付けしてクラスを作るのってなんか違う気がするんですよ
そんなときにC/C++だとヘッダ1つにしてソース複数にして書いていたもので・・・
0177デフォルトの名無しさん
2011/02/02(水) 01:12:010178デフォルトの名無しさん
2011/02/02(水) 01:15:340179デフォルトの名無しさん
2011/02/02(水) 01:20:46C#は気軽にクラス増やせるから自然にクラスが小さくなると思う
0180デフォルトの名無しさん
2011/02/02(水) 01:27:53*ちゃんと設計すれば*常に小さなクラスに機能分割できるはずだ、とは俺は思わない。
0181デフォルトの名無しさん
2011/02/02(水) 01:35:510182デフォルトの名無しさん
2011/02/02(水) 01:41:35プレイヤ、敵A、B、C、壁、地面、扉、弾、敵弾、爆発A、B、C的なものが
仕様によって相互に影響しあうんですけど
これってやっぱりステージはステージ以外なにものでもないじゃないですか?
(それぞれ意味わかんねーよって人は無視してください、説明するのが面倒ですw)
0183デフォルトの名無しさん
2011/02/02(水) 01:50:440184デフォルトの名無しさん
2011/02/02(水) 02:06:23別にそれが悪いとも思わないし自分で作ってもそんな感じになりそうだけど
0185デフォルトの名無しさん
2011/02/02(水) 02:15:38デリゲートやイテレータブロックを使うようになってからはましになったな
0186デフォルトの名無しさん
2011/02/02(水) 02:16:140187デフォルトの名無しさん
2011/02/02(水) 02:29:060188デフォルトの名無しさん
2011/02/02(水) 02:33:340189デフォルトの名無しさん
2011/02/02(水) 02:44:240190デフォルトの名無しさん
2011/02/02(水) 02:44:26それぞれのステージオブジェクトごとにクラスにしていけば普通に分割できそうな気もしつつ、
多重ディスパッチする場合は、確かに1クラス大きくなることはあるなぁ。
ビジターパターンみたいなのもあるけど、あれが書きやすいとも思えず。
0191デフォルトの名無しさん
2011/02/02(水) 10:52:12"aaetw"になるようアルファベット順でソートしたいんですが、どうすればいいですか?
0192デフォルトの名無しさん
2011/02/02(水) 10:56:160193デフォルトの名無しさん
2011/02/02(水) 13:55:17str.Replace('a','1')
だと文字列中のaが全て1になってしまいます。
0194デフォルトの名無しさん
2011/02/02(水) 14:01:16条件が決まってるなら簡単じゃね?
最初にでてきた'a'をリプレースとかさ
そういう条件は無いの?
0195デフォルトの名無しさん
2011/02/02(水) 14:18:20str[x]='1';
だと読み取り専用だからアカンって言われます。
0196デフォルトの名無しさん
2011/02/02(水) 14:25:14って調べてみたらVB.NETでも使えるのかw
Substring駆使するかToCharArrayでcharの配列にしてうんたらかんたらだな
0197デフォルトの名無しさん
2011/02/02(水) 14:31:14IndexOf()で探してSubstring()で置き換えれば
0198デフォルトの名無しさん
2011/02/02(水) 14:48:310199195
2011/02/02(水) 14:51:350200デフォルトの名無しさん
2011/02/02(水) 16:58:57現在5秒に1つの画像データ(1つ1MByte)を作成し、それを24時間365日動作させようとしています。
この時、保存される場所はネットワークディスク(LANDISK)上に作成されます。
通常ネットワーク的に問題なければ保存処理は成功すると思いますが、
何らかの原因でネットワークが切断された時に一旦ローカルへ保存するようにしたいと考えています。
上記前提条件の上で保存処理をFileStreamのBeginWriteを使用し非同期的に処理したいと考えています。
保存順序が処理順序にならなくても構わないのですが、存在しなくなったネットワークに書き込みを行うと
呼び出し元スレッドが固まるのでそのようにしたいと考えています。
例えば30秒固まったとしてその間にもどんどんファイルを保存しようとBeginWriteが呼び出されるようになると思うのですが、実際はこういう運用は問題ありそうでしょうか?
もし、なにかスマートな方法があればいいのですが・・・
(例えばキューに入れてそっちで処理させるとか)
スレッドプールを使用しようとも考えたのですが、ほかの場所でちょこちょことBerginInvokeで表示等を行っている為スレッドプールでスレッドを止める処理が多発した時にUIが固まりそうでちょっとやめてみました。
色々検証して試してみるのがいいんですが、ひとまず動かし始めるまでに時間があまりないので運用だけ開始してあとで変更する方向です。
ぶっちゃけた話、少々バグってても個人的な用途なので問題はないのですが・・・
安定稼働を目指したいのです。
ファイルのサイズ・削除処理等は今の段階では放置しておいてください。
0201デフォルトの名無しさん
2011/02/02(水) 17:04:39コピーは別プロセスで。
0202デフォルトの名無しさん
2011/02/02(水) 17:08:52NASへの保存が成功した時点でローカルを消す
0203デフォルトの名無しさん
2011/02/02(水) 17:11:52なんでも聞いてくれ。
0204デフォルトの名無しさん
2011/02/02(水) 17:16:000205デフォルトの名無しさん
2011/02/02(水) 17:22:23なんでこのスレに来たんですか?
0206デフォルトの名無しさん
2011/02/02(水) 17:28:16>>201-202
一旦それも考えましたが出来るだけローカルPCのHDDやSSDの寿命を削りたくないので
可能な限りローカル保存は避けておきたいのです・・・
もし、他の方法でダメならこの方法が確実に残せるかな・・・と
>>204
折角4.0使うのだからそれがよさそうな気がしてきました。
MSDN見た感じも小さな処理を回数こなす場合はこれがよさそうなことも書いてありましたし
アドバイスありがとうございました。
0207デフォルトの名無しさん
2011/02/02(水) 18:28:12初心者だからだヨ
有名なライブラリやそれでサポートされる関数なんてひとつも知らないヨ←そうゆうものだとは知っている
0208デフォルトの名無しさん
2011/02/02(水) 18:44:30それを簡単にできる方法を聞いているんですが。
要するに1行で
Sort(s.begin(),s.end())みたいに書きたいのです
0209デフォルトの名無しさん
2011/02/02(水) 18:53:11短くしたいと思う最新の候補コードを晒してみるとか
0210デフォルトの名無しさん
2011/02/02(水) 18:59:58http://ideone.com/WjM2Q
0211デフォルトの名無しさん
2011/02/02(水) 19:52:44こういうコードの時はどう表せるの?
public Unko GetUnko(string key)
{
switch (key){
case Normal: return new NormalUnko();
case Liquid: return new LiquidUnko();
case Lumpy: return new LumpyUnko();
...
}
}
ただたんにオブジェクトを返すようなのならswitchでもいいのかな
0212デフォルトの名無しさん
2011/02/02(水) 20:04:15factories[key].CreateUnko() かな。ファクトリはFunc<Unko>でも構わない。
それかDI使う。実質同じようなもんだけど。
0213デフォルトの名無しさん
2011/02/02(水) 20:05:385秒ごとにたった1MBのファイルを作るのになんで非同期でやる必要があるのかよく分からない。
それに、FileStreamって一旦オープンしたら、実体のディスクが切断されても
例外も吐かなければ固まるなんてこともなかった気がしたけど....
0214デフォルトの名無しさん
2011/02/02(水) 21:00:33public Unko GetUnko<T>() where T:Unko,new(){
return new T();
}
0215デフォルトの名無しさん
2011/02/02(水) 21:03:140216デフォルトの名無しさん
2011/02/02(水) 21:09:520217デフォルトの名無しさん
2011/02/02(水) 21:14:36書き込み用にワーカースレッドを一つ作成。
書き込みファイル情報はキューに貯める。
まあ劣化Producer-Consumerパターンみたいな感じで行ける。
Write処理自体を非同期でやるのは今回に関してはあまり意味ないからやめとけ。
確かスレッドセーフなBlockingQueueみたいのも.NET4じゃできてたと思うから簡単だろ。
ああ、まあもちろんTaskでやってもいいけど。
0218デフォルトの名無しさん
2011/02/02(水) 21:25:15(Unko)GetMethod("GetUnko").MakeGenericMethod(types[key]).Invoke(this);って動的に型指定して使わないといかんね
そんなことするんだったらActivatorに渡すだろ
まさにUnko
0219デフォルトの名無しさん
2011/02/02(水) 21:34:45インターフェースを守る努力とか無意味だし
0220デフォルトの名無しさん
2011/02/02(水) 21:39:22Unkoを利用する側がUnkoの具体的な実装クラスを知らなくて済むようにするためのパターン
さらに、GetUnkoを提供するクラスも具体的な実装クラスを知らなくて済むようにしたいならDIになる
0221デフォルトの名無しさん
2011/02/02(水) 21:48:55こういう目的には合ってないと思うけどなぁ
もしこの例でうまく説明できるなら、頑張って教えてあげなよ
0222デフォルトの名無しさん
2011/02/02(水) 21:53:51abstract factoryでFA
0223デフォルトの名無しさん
2011/02/02(水) 21:59:19ポインタ操作する際に、unsafeでビルドする必要があるみたいなのですが、unsafeでビルドした際にデメリットのような物はあるのでしょうか?
BitmapData.Scan0で得たポインタに対して操作したいので、unsafeは現状避けられなさそうですが。
それと、MouseEventArgs型のボタン取得で「左ボタンだけ押されている」は簡単に処理できるのですが、「左ボタンは押されているが、他のボタンも押されている」
はどう取得すればいいのでしょうか
if ((e.Button & MouseButtons.Left) == true)
では型エラーになってしまいます。
0224デフォルトの名無しさん
2011/02/02(水) 22:01:05if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
0225デフォルトの名無しさん
2011/02/02(水) 22:02:03ググれば出てくるはず
0226デフォルトの名無しさん
2011/02/02(水) 22:02:28MouseButtons.Leftの具体的な値はしらんが
0227デフォルトの名無しさん
2011/02/02(水) 22:03:22ASP.NETとかClickOnceとかSilverlightとか(設定による)
0228デフォルトの名無しさん
2011/02/02(水) 22:07:500229デフォルトの名無しさん
2011/02/02(水) 22:11:320230デフォルトの名無しさん
2011/02/02(水) 22:14:01HogeとかHageとか他のにしろやw
0231デフォルトの名無しさん
2011/02/02(水) 22:17:240232223
2011/02/02(水) 22:17:32マウスの方は問題ありませんでした。
unsafeのほうはMarshal.Copy()でbyte[]へコピー、いじった後に再度Marshal.Copy()でいけそうです。
通常のWindowsアプリなのでunsafeでポインタ操作と比較して考えてみます。
0233デフォルトの名無しさん
2011/02/02(水) 22:26:17ファクトリーメソッドとファクトリーパターンの違いが分かってない奴多そうだな
0234デフォルトの名無しさん
2011/02/02(水) 22:31:570235デフォルトの名無しさん
2011/02/02(水) 22:32:02>>211のswitchをポリモーフィズムで置き換えるとしたらAbstract Factoryってことだろ
0236デフォルトの名無しさん
2011/02/02(水) 22:32:390237デフォルトの名無しさん
2011/02/02(水) 22:37:390238デフォルトの名無しさん
2011/02/02(水) 22:42:100239デフォルトの名無しさん
2011/02/02(水) 22:45:21速攻で間違えんなw
0240デフォルトの名無しさん
2011/02/02(水) 23:01:03XmlReader.Createはfactory methodとMSDNに書かれてる
0241デフォルトの名無しさん
2011/02/02(水) 23:03:290242デフォルトの名無しさん
2011/02/02(水) 23:39:38[Export(typeof(Unko), "Lumpy")] class LumpyUnko : Unko { }
class Anus {
private CompositionContainer container;
public Unko GetUnko(string key) { return container.GetExport<Unko>(key); }
}
こうだな
0243デフォルトの名無しさん
2011/02/02(水) 23:58:300244デフォルトの名無しさん
2011/02/03(木) 00:13:370245デフォルトの名無しさん
2011/02/03(木) 00:17:19バリエーションも作りやすいしanus.GetUnkoとか超わかりやすく意図を表現できるじゃん
0246デフォルトの名無しさん
2011/02/03(木) 00:28:340247デフォルトの名無しさん
2011/02/03(木) 00:35:230248デフォルトの名無しさん
2011/02/03(木) 00:41:000249デフォルトの名無しさん
2011/02/03(木) 00:48:220250デフォルトの名無しさん
2011/02/03(木) 04:49:240251デフォルトの名無しさん
2011/02/03(木) 05:04:430252デフォルトの名無しさん
2011/02/03(木) 10:45:54>>242みたいなことやりだすとfactoryだらけのマジキチコードになるが
Javaワールドではやたらと有難がられるスタイルだ
■ このスレッドは過去ログ倉庫に格納されています