1 名前:デフォルトの名無しさん mailto:sage [2018/03/03(土) 15:09:05.75 ID:SBEkwl3H.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part95 mevius.5ch.net/test/read.cgi/tech/1508180530/ C#, C♯, C#相談室 Part93 https://mevius.5ch.net/test/read.cgi/tech/1492818720/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part135 mevius.5ch.net/test/read.cgi/tech/1517749348/ ■コードを貼る場合は↓を使いましょう。 ideone.com/ https://dotnetfiddle.net/ ■情報源 https://msdn.microsoft.com/ja-jp/library/gg145045.aspx https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://msdn.microsoft.com/en-us/library/gg145045.aspx referencesource.microsoft.com/ - VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
974 名前:デフォルトの名無しさん mailto:sage [2018/04/03(火) 23:42:17.43 ID:TkuXyycY.net] 普通は大事じゃない メジャーな一部の奴だけなぞっておけばいい
975 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 00:15:51.60 ID:Lt0+eORa.net] >>951 Material Design In XAML Toolkitが今風で良い感じだよ。 タブが必要なら同じ作者のDragablz Tab Controlも併せてどうぞ。
976 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 00:29:06.64 ID:scqJAZTy.net] >>953 全身シングルトンで武装して備えろ
977 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 01:35:51.04 ID:gGAYD4mI.net] ざっと知っておくに越した事は無い 使うかどうかは別としてね むしろ、「これはやるな」っていうアンチパターンを覚えた方が良いかもだ
978 名前:デフォルトの名無しさん [2018/04/04(水) 02:58:58.46 ID:3/OGlZbi.net] バグってハニー
979 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 07:59:24.78 ID:ClxMGJax.net] material designとかタッチメインならいいけど、マウスメインのデスクトップアプリならmaterial designはスペースが無駄すぎる
980 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:33:02.49 ID:n4eM316R.net] excelファイルを操作する必要があり、いろいろ調べたらclosedXMLを使うのが良さそうという 結論に達したのですが、詳しい解説のあるサイトや書籍はないでしょうか。 ファイルの開き方、セルの参照方法などは普通に見つかるのですが、提供されている メソッドの一覧とか、発生する例外とか、実用上知っておくべきことを知りたいのです (主にエラートラップをするためです) 公式ドキュメントがどこにあるかすら発見できなかった程度の英語力ですが、ドキュメントの ありかを教えていただければ、辞書を引きながらでも調べてみます
981 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:50:20.08 ID:K+0BZuJc.net] Excel操作はCOM Automation以外には手を出すな 地獄を見ることになる
982 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 20:53:47.86 ID:Uk0C/m1f.net] ClosedXMLはマジ大変
983 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:05:58.11 ID:Ft6CGKk+.net] 村の禁忌に触れたような言い様だなw
984 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:27:26.09 ID:mQqkiub7.net] 泣く子はいねかー
985 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:30:08.25 ID:PCVfDfH6.net] ExcelのCOMオートメーションはサーバーでの動作保証が無い時点でゴミなんすよ
986 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 21:32:26.97 ID:BmbE00Mi.net] >>960 https://github.com/closedxml/closedxml/wiki 使ったことないけどExcelDataReaderも速さの面ではいいってどっかの記事で見た https://github.com/ExcelDataReader/ExcelDataReader
987 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 22:21:19.70 ID:noE6VTyE.net] エクセルファイルなんてグレープシティのスプレッド買えば一瞬で終わるだろ
988 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 22:50:52.54 ID:OrTn2AQm.net] WPFってどういう用途なら使うべき? 文献やネット検索が少なくて使えん
989 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:00:46.54 ID:T8BktjHU.net] EPPlus
990 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:21:00.13 ID:Lsgd0/8M.net] >>968 いかなる用途でも使うべきではない MSの推奨はElectronとASP.NET
991 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:34:42.99 ID:Lt0+eORa.net] やたらElectron推す人いるけど、言うほどMSが勧めてるかなぁ
992 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:42:42.72 ID:9CBA0Lmr.net] Electronは縦書きエディタすら作れない駄目なやつ 表示はどうにでも出来るが入力が機能的に絶対無理とか俺が費やした半日を返せよ
993 名前:960 mailto:sage [2018/04/04(水) 23:46:48.80 ID:n4eM316R.net] >>961-966 触れてはいけないものに触れてしまったかのような反応ですが、なんとかドキュメントを 読んで頑張ってみますわ・・・ >>967 趣味で書いてたVBAマクロをスタンドアロンに書き直したい(データだけexcelファイルから 流用したい)という用途なので、万円単位の買い物は無理です、残念
994 名前:デフォルトの名無しさん mailto:sage [2018/04/04(水) 23:48:56.91 ID:v0eOpRGB.net] >>969 EPPlusは早いし使いやすいよね
995 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 02:05:31.70 ID:G4evJUNh.net] >>972 縦書きはWPFも非対応だろ
996 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 08:55:29.27 ID:3wDwo2/L.net] MSがPWAに手を出したから、類似技術のElectronは始まる前にMSでは終わった
997 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 10:13:54.51 ID:c77DGTlb.net] コンソールとフォームしか作ったことないけどまだまだ
998 名前:「けますか? [] [ここ壊れてます]
999 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 11:09:05.32 ID:796HNo8s.net] 趣味ならどうでもいい 職業ならWebできないと仕事ない
1000 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 12:00:33.19 ID:D2y+fK6k.net] てっきり今後はWPFが主流になると思って使ってみたけど、 情報がネットに少なすぎてまいったわ
1001 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 14:16:56.73 ID:+3oTwv9E.net] 趣味で作ってるから問題ないわ
1002 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:48:57.38 ID:2ZtD67QF.net] 例外処理について教えてください 簡単な例で、キーボードから数字を入力させて処理するとして、非数字が入力されたら 数字が入力されるまで、正しい入力をするよう促したいとします (これだけなら例外を使わなくても簡単ですが、あくまで例として) bool flag = false; string str; int i=0; while(flag != true) { try { Console.Write("enter a number = "); str = Console.ReadLine(); i = Int32.Parse(str); flag = true; } catch { Console.WriteLine("incorrect number."); } } Console.WriteLine("your number is : " + i); こんな感じで、try-catchの間をループで囲んで、脱出フラグを用意するのが正攻法 なのでしょうか? なんかもっとスマートな方法がありそうなのですが
1003 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:57:03.35 ID:dUUr3xK4.net] >>981 いや、例だと 回答してもこれは違う実は書いてないけど こういう問題があって駄目だの 小出しでどんどん出るから ピンポイントでこの問題を解決したいってのを書いて
1004 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:58:19.97 ID:M7HPB+1x.net] do while int.TryParse
1005 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 21:59:25.26 ID:IVUDpQN0.net] var i = 0; while (true) { Console.Write("enter a number = "); var str = Console.ReadLine(); try { i = Int32.Parse(str); break; } catch (FormatException) { Console.WriteLine("incorrect number."); } } Console.WriteLine("your number is : " + i);
1006 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:04:19.96 ID:IVUDpQN0.net] iを0で初期化するのもやめたほうが良かったな
1007 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:11:00.58 ID:2ZtD67QF.net] >>982 すいません、ピンポイントで課題に直面しているのではなくて、勉強中で疑問に思ったので 質問しました 例えばファイルオープンで存在しないファイル名を掴まされたとか、テキストファイルを想定 しているところにバイナリを噛まされたとか、そういうケースのリトライをどうやって実装するのかと 疑問に感じたのです
1008 名前:981 mailto:sage [2018/04/05(木) 22:19:06.91 ID:2ZtD67QF.net] >>984 このソースは理解できましたが、>>985 はどういう意味でしょう? 私は921でもあるのですが、この時指摘いただいたとおり、iを初期化しておかないと 未割り当てとしてコンパイル通りませんが
1009 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:24:09.13 ID:dUUr3xK4.net] >>986 ファイル読み込みに失敗しました。 Windowsを終了します。
1010 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:36:19.31 ID:7xCMhR6w.net] 気持ちは分からんでもないが、抽象的な質問しても抽象的な答しか返ってこないと思うw static void Main(string[] args) { var number = 0; Func<bool> tryAskNumber = () => { Console.Write("enter a number = "); return int.TryParse(Console.ReadLine(), out number); }; while (!tryAskNumber()) Console.WriteLine("incorrect number."); Console.WriteLine($"your number is : {number}"); }
1011 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 22:36:33.86 ID:796HNo8s.net] >>986 そんなもん具体的に何をどうリトライしたいのかによる それが明確になってるならそれをそのまま実装するだけだ ネットワークエラーのようにそのまま自動的にリトライ可能なエラーならある程度決まったパターンがあるけど、 >>986 のように条件を変えない限りリトライしても必ず失敗するケースでは個別に考えるしかない
1012 名前:デフォルトの名無しさん mailto:sage [2018/04/05(木) 23:38:35.52 ID:IVUDpQN0.net] >>987 この場合は while を抜けたときは必ず i に値が代入されているとコンパイラが判断できるので通る https://ideone.com/kUpXYh
1013 名前:981 mailto:sage [2018/04/06(金) 06:10:19.26 ID:e2Dy7HRM.net] >>989 私の学習では、まだ Func<bool> tryAskNumber = () => この書き方が理解できていないのですが、これでやっているのは例外の処理ではなくて boolでメソッドの戻り値を評価して処理を繰り返しているのですね? 抽象的な質問だと言われればそのとおりなのですが、エラーが発生したときに例外を 返してくるメソッドを使っているときに、正常処理ができるようになるまで同じ処理を繰り返す、 というケースの質問でした 条件を変えるとかは本質的な話ではなくて、「例外が発生しなくなるまで繰り返す」という 処理フローそのものの質問です >>984 で、break文でtryの中からwhileブロックを抜ければよい、と理解できたので十分です (tryブロックから、その外側のwhileを抜けられると思ってなかったので躓いてました) 数字入力を取り上げたのは、例として単純で、言わんとすることがすぐに伝わるかと思った だけです >>991 >>984 の var i=0; を var i; にしただけだとエラーになりましたが、int i; なら通るんですね
1014 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:09:07.04 ID:iz5pUoek.net] >>981 例外が出たらアプリケーションを止める ファイルオープンだとしてもそれは変わらず、存在しなくてリトライしたいなら以下のような事前チェックをするべき if(存在していない)continue; ってのが理想だけどファイル系のエラーってたくさんあるし、確認しずらいのもあるからtry-catchを使わないのが現実的じゃないことも メソッドが例外を出すのは使ってはいけない使い方をしているということなので、使っていい状態か確認してから呼び出すよう心がけるべきかな
1015 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:31:23.65 ID:KffLTaJD.net] foreach(var a in XXX) { みたいなことを可能にするためには XXX はどんなクラスを継承してないといけませんか? (何が必要か) たとえば、XXX がDataRowCollection 型だったら foreach(DataRow a in XXX) とやらないと怒られてしまいます。 DataRow[] だったら、var が使えます。 この違いは一体なんだろう(なにが必要なのかと)、と
1016 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:39:53.65 ID:QmpxvPzQ.net] ジェネリックインターフェイスを実装してるから
1017 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:44:13.58 ID:19AXhYIg.net] IEnum〜だっけ
1018 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 11:54:13.71 ID:KffLTaJD.net] つまり、DataRowCollection は IEnumerable を継承しているから、foreach の in に使えるけど IEnumerable<T> は継承してないから foreach(var は許されない ということですか
1019 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 12:11:24.19 ID:78uF6QEL.net] >>992 ラムダ式を使わずに書くとこう static void Main(string[] args) { var number = 0; while (!TryAskNumber(out number)) Console.WriteLine("incorrect number."); Console.WriteLine($"your number is : {number}"); } static bool TryAskNumber(out int number) { Console.Write("enter a number = "); return int.TryParse(Console.ReadLine(), out number); } プログラミングの基本は一気にすべてを解決しようとしないこと。 問題を小さな問題に分割すること。 「○○が成功するまで繰り返す」なら、○○の部分と成否を判定してリトライ する部分は分けた方が基本的に分かりやすくなる 抽象的な質問に対して何か言えるのはこの程度だと思うけど....
1020 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 12:42:38.82 ID:bxzO13cU.net] >>994 継承は関係ない GetEnumeratorってメソッドがあればok
1021 名前:デフォルトの名無しさん mailto:sage [2018/04/06(金) 15:01:40.67 ID:Mgh91ASd.net] へー
1022 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 33日 23時間 52分 35秒
1023 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています