ふらっとVisual C#,C♯,C#(初心者用) Part105
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2013/06/23(日) 09:41:13.50他のスレッドでは書き込めないような低レベルな質問。
質問者自身なんだか意味がよく分からない質問。
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められることがあります、ご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとVisual C#,C♯,C#(初心者用) Part104
http://toro.2ch.net/test/read.cgi/tech/1366503422/
関連スレ
C#, C♯, C#相談室 Part79
http://toro.2ch.net/test/read.cgi/tech/1363632378/
コード貼るなら↓使ってください
http://ideone.com/
0232デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANこういうセンスの人はプログラミング向いてない
0233デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANふらっとスレにも来てた
0234デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANセンスある人はどうやるのです?
0235デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANレスありがとうございます
動作させてみたのですが、よくわかりませんでした
0236デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN煽りはなしでお願いします
0237デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANList<T>.Enemerator が IEnumerator<T> を実装しているのは当然です。
現在問題にしているのは、ジェネリックメソッド内で、GetEnumerator() を呼ぶ時に、IEnumerable<T> というインターフェース型に『ボックス化』して呼んでいるのか、という点です。もともとは、新しくヒープにインスタンスが作られないように、という問題でしたし。
シグニチャについては、where で指定したインターフェースの方になることは、先ほどのテストからも理解しました。しかし、これではそのオブジェクト自体がボックス化されるかがわからないため、これを確認するテストも行いました。
その結果、setter のあるプロパティを持つインターフェースについては、ボックス化は起きていないと考えました。
以上から、>>220 のように考えました。
これがあっているのかを確認したいのです。
0238デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANFormが他に参照を握られるのではなく、
Formが他の参照を握るようにする。
0239デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN>>1を読め
ドヤ顔して上から言いがかるようなスレじゃないぞ
0240デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN>>220で合ってるよ
ジェネリックは実行時に特殊化されるが、
メンバのバインドはあくまでコンパイル時に行われる
実行時にはすべてのメソッドはその名前や引数だけでなく
それを定義してる型の型名によって明確に区別されていて、ダックタイピングのような動作は一切しない
0241デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN残念ながらこれはセンスの問題で初心者かどうかはあまり関係がない。
っていうか、こういうのに限っていつもは誰かを罵倒してるご都合主義野郎なんじゃないの。
言っとくけど俺は初心者に上から目線で物を言ったことも罵倒したこともないんで。
0242デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0243デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANなるほど。
C# でインターフェースのメソッドを呼ぶ時は、
型キャストを行って呼ぶようなコードしか見たことがなかったので、
こういう動作があることを知りませんでした。
ありがとうございます。
0244デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANnullになることはないんだからCスタイルのキャストで書けよ
0245デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANマインスイーパーを例に取れば、フィールドを表す変数や、フィールド上のマスを開けるなどの操作 (メソッド) は、ロジック用のクラスで行います。
デザイン、つまり、Form 側ではそのロジック用のクラスをインスタンスとして持ち、その情報通りに表示することを徹底します。ロジック用のクラスでフィールドが更新されたかどうかを得るには、イベントを実装すると良いと思います。
もし、その自作のクラスがデザイン用である場合、>>229 のように関連するオブジェクトがデザイン用であってもインスタンスとして受け取ることは普通です。
ただし、テキストボックスのみを対象にしているならその TextBox のインスタンスのみを渡す方が良いです。これは、その自作クラスからアクセスできるオブジェクトの数が少なくなり、他には変更できない、ということになるのでコードが見やすくなるためです。
また、同様の理由で、TextBox の基底クラス程度で済むものなら、基底クラスのインスタンスを渡す、というようにします。
0246デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANだからさ1読め
>こういうセンスの人はプログラミング向いてない
なんてレスいらねースレなの
>っていうか、こういうのに限っていつもは誰かを罵倒してるご都合主義野郎なんじゃないの
>言っとくけど俺は初心者に上から目線で物を言ったことも罵倒したこともないんで。
妄想癖やばいだろ。
>>239に対してなんで、罵倒やらご都合主義やらが出てくるんだよw
思考が飛躍しすぎて恐いわ
0247デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0248デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANwhere で指定されているため、
キャストで例外が飛ぶことがないので、
速い as にしました。
例外を飛ばしたい時は別として、
as の方が括弧の数が少ないので見やすくて好きです。
0249デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN馬鹿だろお前。
0250デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0251デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN例外が発生しない限りは速度に差はない
asの方が見やすいのは同意だが、asは失敗する可能性がある場合に使うという住み分けがある以上、
それに従わないのは混乱の元
0252デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANpublic string なんとかText
{
get{return form1.Text;}
set{form1.Text = value;}
}
0253デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.ANpublic string なんとかText
{
get{return form1.TextBox.Text;}
set{form1.TextBox.Text= value;}
}
0254デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN>>235な質問者を置き去りにして、こうした方がいいよ〜ってのがそのほかのレス
誰か>>229の説明してやれよ
0255デフォルトの名無しさん
2013/07/23(火) NY:AN:NY.AN0256デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANつか_form1.text って所がバグっていると思うが
0257デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANfloatからintへの変換を行っているのですが、
整数と小数点以下を分けたいと思い以下のコードを書きました。
float version = 1.3f;
float xx = (version * 10.0f);
float xxx = xx % 10f;
int a1 = (int)(xxx);
int a2 = (int)(version / 1f);
Console.WriteLine("{0}.{1}",a2,a1);
しかし、Releaseで実行してみると「1.2」と表示されます。
Debugだと「1.3」と正常に表示されるため、参っています
キャストがおかしいのでしょうか? だとすればどのように記述するべきでしょうか?
0258デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0259デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANversion なら float よりも string の方がいいよ。
float だと version 1.1.02 みたいなのに対応できないし。
0260デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN残念ですが変わりませんでした。
>>259
なるほど…文字列での管理も検討してみます
0261デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANvar versions = version.Split('.'); だな
0262デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANmsdn.microsoft.com/ja-jp/library/vstudio/system.version.aspx
0263デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANstring moji = version.ToString("F1");
string[] versions = moji.Split('.');
int a1 = int.Parse(versions[1]);
int a2 = int.Parse(versions[0]);
0264デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANそのまま使えばいいじゃないのよ
0265デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANint majorVer = 1;
int minorVer = 3;
int version = ((majorVer << 16) & 0xffff0000) | (minor & 0xffff);
// get high-order word.
major = (version >> 16) & 0xffff;
//get low-order word.
minor = version & 0xffff;
0266デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANint minor = 3;
int version = ((major << 16) & 0xffff0000) | (minor & 0xffff);
// get high-order word.
major = (version >> 16) & 0xffff;
//get low-order word.
minor = version & 0xffff;
0267デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANint minor = 3;
int version = ((major << 16) & 0xffff0000) | (minor & 0xffff);
// get high-order word.
major = (version >> 16) & 0xffff;
//get low-order word.
minor = version & 0xffff;
あれ、2chって&書き込めないのか
0268デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN冗談は置いといてもふつうにVersionクラスでいいだろ
等値演算子もオーバーロードされてるし
なにより分かりやすい
0269デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANDebug/Releaseでビルドオプションに差違があるからだろうけど、素直にVersionクラスを使うか、個々の要素をintで持ってUIに見せるときだけ文字列連結するべき。
0270デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANVer1.05だったら105
数値の大小で新しいバージョンの判別できるし、文字列にも変換しやすい
俺も最初そうしてた。
そして、バージョンが5.10.0とかになってくると
6.0.0(600)<5.10.0(5100)となって破綻した。
0272デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN6.00.00=60000、5.10.00=51000
お馬鹿な管理方法使うときは仕様限界を考えておかないとw
0273デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0274デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.ANなんで同じメーカーなのにあんなに使い勝手悪いんだろう
0275デフォルトの名無しさん
2013/07/24(水) NY:AN:NY.AN0276デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN0277デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN0278デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.ANテーブルまるごと持ってくるとか、それで出来るならDB使う必要ないじゃん
素直にクライアントサイドでLINQ to SQLが正解なんじゃね
0279デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN0280デフォルトの名無しさん
2013/07/25(木) NY:AN:NY.AN0281デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANどこかに跡形は残っていないでしょうか?
0282デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANないかもね
0283デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANないかもね
0284デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANデータ喪失は事故責任だよ
0285デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANにゃい!orz
0286デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN0287デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN0288デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANコード画面の横(ツールボックス欄やソリューションエクスプローラー欄など)
に、現在開いているコードのメソッド一覧を表示できないでしょうか?
ソリューションエクスプローラに似たような表示はできますが、
プロパティなども表示され情報が多い、現在開いているコード画面に追随していない、
といった理由で使い勝手はイマイチです。
コード内をアウトラインで折りたたんだ場合は、
コード確認に一手間かかるのでこれもまた使い勝手がイマイチです。
0289デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANエディタの上部の右側のドロップダウンがそう。
本当はオブジェクトブラウザかクラスビューにエディタと同期して表示する機能が
あるといいと思うんだが、おそらくそういう機能は実装されてない
0290デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANExpressだから多分自分で作っているソフトだと思うが
一つのクラスにメソッドやプロバティーを詰め込み過ぎじゃないかな?
今作っているものをやり直せとは言わないけど、次に作るときはクラスの肥大化を意識した方がいいよ
0291デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANありがとうございます。
こいつもメソッドとプロパティ変数が混在して表示されてるんですね・・・
情報後出しになりますが、元々の目的は、GUIアプリの作成でソリューションエクスプローラだと
Formファイルの情報とデザイナーファイルの情報がまとめて表示されて邪魔だったのでなんとかしたいってのがありまいた。
教えてもらった方法だと、開いているコード以外の情報は灰色で表示されるので若干マシになったという感じです。
自作クラスの情報はそれだけがまとまって表示されるので、ソリューションエクスプローラよりはだいぶマシになりまいた。
>>290
GUI機能と、その他の機能は別クラスに分けて開発しています。
ただ、GUIだけでもかなり入り組んでるので辟易している次第です
開発途中ですが、現在はForm1.Designer.csにプロパティが30個くらいあり、
最終的には倍以上に増える予定です。
その情報と、Form1.csにあるプロパティ、メソッドの情報が混在してしまい、非常に煩雑です。
(Form1.csは現状たかだか300line,メソッドは10個程度ですが、それでも既に('A`)ウヘァです)
GUI機能もさらに複数クラスに細分化すれば解決しそうですが、エディタ側でももうちょっとなんとかしてほしいですね
(メソッド一覧のアウトライン表示は、秀丸とかのエディタには普通についてる機能なのに・・・)
0292デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN「BoolVisibiltyConverer」と言う謎クラスを持ってきやがってXamlのエラーとなるんだが、コンパイルできてしかもちゃんと動いた
ちゃんとしたクラス名の「BooleanToVisibilityConverter」に直すとXamlのエラーもなくなるし動作も問題ない
コレってなんだろうね?
「BoolVisibiltyConverer」は、謎のネームスペース xmlns:Default="clr-namespace:" に存在するらしいが、コレもエラー表示が出るんだわ
0293デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN2012には自動バックアップってオプションがあるな
2010にはない?
0294デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN0295デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN変更した覚えないからデフォルトで 5 分間隔でやってくれるっぽい。
その結果が >>283 になるんだと思うけど。
0296デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.AN最初のWindowsApplication1とかのまま一度も保存していない場合はバックアップはしないみたい
コンパイルするごとにそこまでは残るはずだけどプロジェクトのフォルダごと見当たらないというか
命名していないから探しようがなかったです
0297デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANヘルプには
>ファイルが新規であり、今まで一度も手動で保存されていない場合は、ランダムに生成されたファイル名で自動的に保存されます
って書いてあるけど
0298デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANこういう時イラっとくるんだよね
0299デフォルトの名無しさん
2013/07/28(日) NY:AN:NY.ANJGREP
http://www.hi-ho.ne.jp/jun_miura/jgrep.htm
さすがに書庫の中までは検索出来ないけど速い
コレクションを列挙するというのはわかりますけど、どういう場面に使えばいいのでしょうか?
0301デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN自分で意識して使うことはまずない
yieldがあるのでIEnumeratorを自分で実装することもない
0302デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.ANIEnumerableが列挙してくれと頼まれたときの動作を決めるのがIEnumerable
どういう順番で何を列挙するかとかを細かく自分で決めたいときに使う
逆に言えばあまり自分で実装することは今の時代はあまりないよね
0303デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN○IEnumerableが列挙してくれと頼まれたときの動作を決めるのがIEnumerator
0304デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.ANクソ複雑なステートマシンになる
MSですらLINQの実装では低レベルな制御を放棄してyield使いまくってるのに
0305デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN逆に単純だけど面倒なだけ
0306デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN0307デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN0308デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.ANフォーム関係ない
0309デフォルトの名無しさん
2013/07/29(月) NY:AN:NY.AN詳細はコマンドプロンプトでcmd /?
0310デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0311デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0312nanasi
2013/07/30(火) NY:AN:NY.ANID:FIRUYqVd!ディレクトリを作成しようとしていますが次のエラーが出てしまいます。
レンタル中のスタンダードプラン上の
サーバだと正常に動作していたのですが、プレミアムサーバに対して下記コードを
実行するとなぜかエラーが出てしまいます。
IDやパスはあっているのですが何が問題なのでしょうか?
≪ 実行コード ≫
string id = "id123";
string pass = "pass123";
string createDirectory = "ftp://hoge_user.sakura.ne.jp/www/hoge_data/20130730";
WebRequest req = WebRequest.Create(createDirectory);
req.Credentials = new NetworkCredential(id, pass);
req.Method = WebRequestMethods.Ftp.MakeDirectory;
WebResponse res = req.GetResponse(); ← ここでエラー発生
≪ エラー内容 ≫
The remote server returned an error: (530) Not logged in.
0313デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANエラー内容に書いてあるじゃん。
ログイン失敗でしょ。
サーバーからのレスポンスを見ないと原因は分からないけど、実はFTPSとか?
0314312
2013/07/30(火) NY:AN:NY.ANそうなんです。ID・PASSがあっているのに
なぜかダメなんですよ。
しかも、さくらのスタンダードプランでは普通に動いていた
プランにも関わらず、プレミアムプランのサーバに向けて
実行すると動かないのでまったく意味不明です。
0315デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN普通のFTPクライアントでアクセスした場合との差異を比較
0316デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANWebRequest.CreateでFTPだと、FileWebRequestを返すとなってるぞ
FtpWebRequestの例だとそれをFtpWebRequestにキャストしてる
FileWebRequestはCredentialsもMethodも実装されてないことになってる
0317デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANそれはただのドキュメントバグだ
0318313
2013/07/30(火) NY:AN:NY.ANWebRequestクラスは頭悪いから業務で使うのはおすすめしない。
とりあえず、コマンドプロンプトから「ftp /d」でログインできるか試してみて。
レスポンスが確認できるから。
0319デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0320デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN捜査のプロですか?
0321デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN業務で使うのはおすすめしない?
本当か?
0322313
2013/07/30(火) NY:AN:NY.ANエラーメッセージからの推測なんだけど、今回のケースだと、USERかPASSのどっちかを投げた段階でエラーが出てるはずなんだ。
でもWebRequestがレスポンスを解釈しないで次のコマンドを投げてるように見える。
そうすると本当の原因が分からなくなるから>>315が言うようにパケット取りながら再現実験するハメになる。
うまく動いてるときはいいんだけど、トラブったときが大変なんだよ。
その辺のバランスを考えて、WebRequestを使うかSocketで自作するか決めればいいんじゃないかな
0324デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANFTPの話か
なるほど
0325312
2013/07/30(火) NY:AN:NY.ANうーんパケキャプしないとダメですか。。。
ちょっと敷居が高いけど頑張ります。
>>319
サクラですね。
サーバ容量増やしても転送量制限は変わらないとか詐欺的な事ばっかりやってるし
>>322
Socket 作ってみます。
0326デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN0327デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.ANVS2012ではたしかにFtpWebRequest帰ってきてるな
>>322
わざわざキャプチャせんでもトレースログで十分だろ
>WebRequestがレスポンスを解釈しないで次のコマンドを投げてるように見える
WebRequestがって言うか、正確にはFtpWebRequestが、だな
それがほんとなら、もともとステートフルな通信向けじゃないのかもしれん
なんといっても「WEB」リクエストだしな
0328312
2013/07/30(火) NY:AN:NY.AN無事解決です。
皆さんありがとう。
0329デフォルトの名無しさん
2013/07/30(火) NY:AN:NY.AN・・・・・・・・・・・・・・・・・・・
0330デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN0331デフォルトの名無しさん
2013/07/31(水) NY:AN:NY.AN■ このスレッドは過去ログ倉庫に格納されています