1 名前:デフォルトの名無しさん mailto:sage [2018/08/05(日) 19:55:44.50 ID:tZmoj8I+.net] 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、 質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください >>980 を踏んだ人は新スレを建てて下さい。 >>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■関連スレ C#, C♯, C#相談室 Part93 https://mevius.5ch.net/test/read.cgi/tech/1492818720/ ■前スレ ふらっと C#,C♯,C#(初心者用) Part138 https://mevius.5ch.net/test/read.cgi/tech/1528194762/ ■コードを貼る場合は↓を使いましょう。 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/
231 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:34:18.00 ID:nPk8x20U.net] OSデフォルト環境だとsn.exeがインストールされてないのか 隔離環境で作ったアセンブリにストロングネームつけたい時ってみんなどうしてんだ?
232 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:53:32.54 ID:E9g9LiKW.net] >>217 >>222 未確認ってどちらかというと入門じゃなくて確認用途だと思うよ あれを見て判る人はすでにjavaなどの他の言語を習得してる
233 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:57:11.03 ID:rJOuuZ33.net] まあそうだね C#でプログラミング入門って正直キツいと思うし、そういうコンセプトのところは たぶんないんじゃないか
234 名前:デフォルトの名無しさん mailto:sage [2018/08/27(月) 23:58:55.68 ID:m5aHtIH2.net] >>225 俺は「C#の絵本」でプログラミング入門した。 つまり、C#でプログラミング入門した
235 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:04:55.80 ID:5gce9PvO.net] プログラミングはDelphi6からだったなー \5,000でパッケージを買ったすぐ後に、無料版のDL提供が始まった思い出 高校生にとって\5,000は地味に痛かった……
236 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:10:26.77 ID:ym/+5T0Q.net] >>225 何がそんなにキツい? Windows Formsのぽとペタ以上に初心者に優しいのってなんだろ
237 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:11:23.06 ID:9uK3R3xF.net] Androidもjavaのコンパイル通すだけなら
238 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 00:36:01.05 ID:a3yKcaCh.net] 英語得意ではなくてプログラミング言語の経験が全くないのなら 本を買う方がいいような気もする・・
239 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 03:46:31.78 ID:CqD+kceR.net] 猫でも判るで十分じゃね
240 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:03:31.88 ID:CaCX57FK.net] 神サイトはどぼんでしょ あのサイトのコピペがC#する日本ITドカタを支えてる
241 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 07:14:31.08 ID:TOj+sTb1.net] そこもう情報が古くね
242 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:15:17.24 ID:psOOFlwe.net] >>228 細かいことよくわかんないけどなんとなくコピペで動くからいいやとVB的に使うならそれでいいけど、 言語を一から体系的に習得しようとするとC#はかなり大変だよ 継続的に進化してるから実感がないかもしれないが、今のC#はもはやメジャーな言語の中ではC++に次いでトップクラスに複雑な部類
243 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:27:46.49 ID:Xl5gotOf.net] 仕事でも趣味でも体系的に一から学ぶとかやっていたら何もできなくなる 自分の必要な部分以外勉強するのはもはや研究者
244 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:31:32.32 ID:fGWTaV2a.net] C#って、言語仕様で難し目なのはyield, dynamic, awaitくらいな気がする 複数ある実行環境や巨大なフレームワーク、コンパイル後のILの話まで含めたら複雑だと思う
245 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 12:39:40.35 ID:wSuYfii2.net] >>234 具体的に
246 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:10:00.14 ID:psOOFlwe.net] >>237 たとえば簡単なところでいうと、読み取り専用プロパティの定義には今何種類のバリエーションがあるか知ってる? int Hoge { get { return 5; } } int Hoge { get => 5; } int Hoge => 5; int Hoge { get; private set; } = 5; int Hoge { get; } = 5; これらにどういう違いがあってどういうときにどれを使うべきか初学者向けに説明できる?
247 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:12:12.91 ID:H5BH2HV+.net] >>238 どれでもいいじゃん まずは動けばいいんだよ バグる?そんなのバグったときに対応すればいい どうせ世の中のほとんどのアプリがバグだらけなんだし そしてそのバグ取り経験が学習にもなる
248 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:14:07.70 ID:5WHkkAct.net] C++やったことないから知らないどC++は基本的なことも複雑なイメージ C#は極めるほど複雑なイメージ
249 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:14:21.36 ID:5WHkkAct.net] 基本はかんたん
250 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:15:27.95 ID:5WHkkAct.net] >>238 の例なら初心者は一番上だけ知っとけばいい
251 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:20:49.83 ID:onl38Ff8.net] 複雑なことができると学習が困難 すべてを学習すること前提ならそうかもしれん
252 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 13:55:05.69 ID:8egnCxzp.net] >>236 >>125 でも質問させていただいたのですが、 yield, dynamic, await あたりは理解できているつもりであるものの volatile の役割がどうしても理解できません。 慣れている方にとっては当たり前のことなのかもしれませんが、 volatile がある場合とない場合で動作が変わるコードの例だけでも お教えいただけないでしょうか。 どうぞよろしくお願いいたします。
253 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:22:59.40 ID:MmXTTGRL.net] >>244 >volatile がある場合とない場合で動作が変わるコード 難しいんじゃないかなあ (1) 実行儒所を入れ替える (2) 変数(メモリ)に直接アクセスしない みたいな最適化がどういうケースでコンパイラによって行われるか、たぶん誰もよく知らないw だけでなく、古い記事だけど www.itmedia.co.jp/enterprise/articles/0503/23/news086_4.html ↑にあるように、CPUレベルの最適化はCPUに依存する
254 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:32:18.53 ID:sGx9mZW+.net] 使ったことなくてググったけどそもそものvolatileに対する理解がなんか違う気がする d.hatena.ne.jp/dotnetmemo/touch/20111023/1319380181
255 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:33:27.71 ID:d5vKjLdu.net] >>125 volitateは「この変数はマルチスレッドで使うよ」と明示することによってシングルスレッドの場合
256 名前:ノしか効果的ではないような実行速度の最適化技術を使わせないようにするだけであって、排他制御を自動で行うものではないのでは? [] [ここ壊れてます]
257 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:53:49.79 ID:8egnCxzp.net] >>245-247 皆さんレスどうもありがとうございます! >>245 > >volatile がある場合とない場合で動作が変わるコード > 難しいんじゃないかなあ ありがとうございます。 ということは逆に言えば、volatile が無いことによって想定外の最適化が行われて 不具合につながること自体が起こりにくいものだと考えてもいいのでしょうか。 ただ仮にそうだとしても、お作法的には複数のスレッドからアクセスされる可能性のある フィールドはすべてに volatile を付けるべきなのかなとも思うのですが、 CS0420 : volatile フィールドへの参照は、volatile として扱われません。 のような警告がうるさくてあまり volatile をつけたくないときもあるので悩んでしまいます。
258 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 14:54:59.71 ID:8egnCxzp.net] >>246 参考ページのご紹介どうもありがとうございます。 実はそのページも読んでみたのですが > ちなみに後者の記事では実際にvolatileをつけないと問題のあるコードが記載されている。 > 以下のコードをReleaseモードでビルドして、デバッグなしで実行すると終了しない。 > volatile をつける(static volatile bool complete = false;)と正しく終了する。 という記述に反して、私の環境(Win10, .NET Framework 4.7.1)では volatile がなくても終了してしまうようです。 そもそも私にはそのページのコードと >>125 のコードが本質的に同じものに見えてしまい、 > volatileに対する理解がなんか違う気がする とおっしゃることの真意が理解できていないのですが、 何かお気づきのことがあれば教えていただけないでしょうか。 >>247 レスありがとうございます。 つまり、volatite の有無で実行速度に差が出ることはあっても 計算結果が変わることはない、ということでしょうか。 そうであるなら気が楽なのですが、いくつかのページやここでの他の方のレスを読むと どうしても確信が持てずにいます。
259 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 15:45:02.14 ID:MmXTTGRL.net] >>248 確実である保証がないものに確実性の保証を与えるvolatileを「お作法」 と思う発想は100%間違っています
260 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:26:12.47 ID:8egnCxzp.net] >>250 レスどうもありがとうございます。やはり、>>249 に書いたような > volatite の有無で実行速度に差が出ることはあっても > 計算結果が変わることはない などということを期待してはいけないということでしょうか。 ただ、volatite が無いとどのような問題が起こるのかを理解していないと、 どのような場面で volatite を使えば確実性の保証が得られるのかも分からず、 結局は、なんとなく気分が悪いから volatite をつけておこう、 というレベルにとどまってしまうように思うのです。 確実である保証がないことを証明するというのは 一種の悪魔の証明なのかもしれませんが、 例えばオーバーフローの危険性を説明するなら int x = int.MaxValue; int y = 1; int z = x + y; のようなコードを見せればいいですし、 volatite についてもこのようなコードがないものかと期待して 質問させていただいた次第です。
261 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:40:01.44 ID:d5vKjLdu.net] volatie付けないとマルチスレッドだと遅くなるとかじゃないのか? 実行結果が変わるとか困るしそんなことになるならもっと知られてるはずなんだが
262 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 16:45:40.99 ID:3YXzfPPp.net] >>251 最適化のオプション外してビルドしたら? 保険であるvolatiteが「どのようなときに必要か」はMSも公表していないんだからどうしようもない volatiteを含んだ上で機能するコードをどうしても書きたいとかなら知らないけど
263 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 17:49:00.74 ID:YFDGQHp2.net] 保障のようなものでしょ 今はどうか知らないけど 例えば a=1; a=1; a=1; a=1; a=1; みたいなコードがあっても
264 名前:最適化でa=1が一回しか実行されないようにならないで ちゃんと回数分実行されることの保証 [] [ここ壊れてます]
265 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:10:01.12 ID:YFDGQHp2.net] 憶測で申し訳ないけど a=calc0(a); b=calc1(a); が最終的にアセンブラレベルで フィールドa = レジスタA レジスタA =フィールドa みたいなのが出てきた場合に シングルスレッドであればあとのレジスタA=aの実行が無駄じゃないかと思って 実行しないとかありうるかもしれない マルチスレッドならフィールドaが書き変わってる可能性あり
266 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 18:24:08.22 ID:MzYJYWNz.net] >>255 コンパイラの最適化で削られるんじゃなく実行されないのか どっちにしてもきりがない
267 名前:デフォルトの名無しさん [2018/08/28(火) 19:01:48.59 ID:5NsMegki.net] >>233 新しいとこ教えてクレメンス
268 名前:デフォルトの名無しさん [2018/08/28(火) 19:52:33.60 ID:QdKJddNI.net] コンパイラの最適化の問題でしょ? 非同期処理で使うフィールドはいれときゃいいんじゃね
269 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:25:43.56 ID:M3D05fOs.net] ちなみに「お作法」という言葉を使う人間が書くコードは間違ってます マメな
270 名前:デフォルトの名無しさん mailto:sage [2018/08/28(火) 20:43:21.83 ID:sKgj8tWl.net] >>251 もう作成されたILのコード全部確認・検証しとけよ 問題が起こらない方がいいのに何か起こらないと困るように見える
271 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 01:22:33.42 ID:4YeISD0k.net] >>251 C#ひいては.NET CILではJITないしAOTのコンパイルにかかる時間など故か ネイティブC/C++程の最適化は行われないので具体例は難しいかもしれません ということでネイティブC++(プログラム全体の最適化は無効)を例にしてみると int n; int main() { n = 1; n = 2; return NO_ERROR; } 上記コードは関数内でn = 1時点を参照してないし、最終的にn = 2じゃんという事で 「n = 1;」が削られマシンコードは「mov dword ptr [n], 2」とリターンコードのみに成ったりします 参照の場合においても変数の値を逐一読み込まずレジスタに保持して使い回すかもしれません これを「volatile int n;」と修飾すれば、そのような最適化は抑制されます C#コンパイラ(C#→CIL)レベルでは読み書きにvolatile.接頭辞などが付く事になる筈 https://msdn.microsoft.com/ja-jp/library/system.reflection.emit.opcodes.volatile ECMA-335やJIS X 3016といった言語仕様にも記載されていますが、排他制御云々ではありません
272 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 02:03:21.40 ID:Hgs5A/6b.net] つまり、実行結果が変わる場合があるということ?
273 名前:デフォルトの名無しさん [2018/08/29(水) 03:59:58.56 ID:B+rDuEfA.net] C#のデストラクタってどういう場面で必要なんでしょうか? ネットの記事で見かけたところ C++ではコンストラクタとセットでプログラマがマネージする必要があるが C#ではシステムが自動でやるのであまり重要じゃないとありましたが イマイチよく分かりませんでした Win32API関数をマーシャリングして使用したりするとデストラクタは必要でしょうか? 実はそういうプログラムを自作してずっと使用してるのですが デストラクタを書いてなくても特に問題が発生したことがありません 問題が出ないのはたまたま自分の使用環境が合ってるだけでしょうか? デストラクタを書かないと具体的にどういう不具合が起こるんでしょうか?
274 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 05:59:16.57 ID:saiWj2Qp.net] ファイル・データベース・プロセスなどのリソースが解放されないから、 使用メモリサイズが
275 名前:ドンドン大きくなっていく つまり、メモリリーク [] [ここ壊れてます]
276 名前:デフォルトの名無しさん [2018/08/29(水) 09:22:23.43 ID:o37zBcM2.net] >>264 ありがとうございます その「使用メモリサイズ」というのは タスクマネージャーの「メモリ」という所を見ればいいのですか?
277 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 09:30:37.55 ID:SgdWV5FD.net] vmmapを使った方が良いかも HeapWalkerを使えるようになればなおよし
278 名前:デフォルトの名無しさん [2018/08/29(水) 09:55:10.31 ID:o37zBcM2.net] >>266 windowsデフォの管理ツールに「リソースモニタ」ていうのもありますね これでもいいのかな? 初耳な分野なので全く分かりませんが調べてみます ありがとうございました
279 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 21:29:00.98 ID:xKUAwzTF.net] C♯にて数あるエクセルファイルの中身を読み取りあれこれしたい時、早く開いて読み取って閉じる方法ってありますか?
280 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 21:43:41.82 ID:bGCoQXPI.net] >>268 何と比較して?
281 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 22:02:30.99 ID:XA15QLm3.net] >>268 「あれこれ」じゃなく具体的に何がしたいか書かないと やりたいことが多くなるほど「じゃあエクセルで直接開いた方が早いね」になるだろうけど
282 名前:デフォルトの名無しさん mailto:sage [2018/08/29(水) 22:14:58.95 ID:dev0xKTh.net] 前提条件やマシン構成で大きく変わるので思いつく手段を全部書いて実測
283 名前:デフォルトの名無しさん [2018/08/30(木) 03:48:10.84 ID:Aa4o8Duk.net] >>268 バイナリーで読み込むのが最速
284 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 07:21:13.96 ID:oIUtx1rS.net] >>270 @シート名の読み込み。 A指定シートの指定列の読み込み。 B指定シートの指定行の読み込み。 こんな感じのを各エクセルに@〜Bを繰り返し行う。 ネットを参考に見て普通に開いて閉じるだと遅くて...
285 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 09:55:38.76 ID:l8OdYu1h.net] >>273 ExcelDataReaderでも満足できないレベルに遅いの? だとしたらほぼ無理かと Excel側で予め必要になる情報をVBAとかでtxtファイルに出力しとくとかで対処するしかなさそう
286 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 12:24:59.82 ID:8MIxRZMr.net] >>273 ネットで参考にした情報はOLEでExcelを起動して読み込む方法かね? それは遅いからOpen XML SDKでも使って直接ファイルを読んだ方がいいね
287 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 17:27:14.97 ID:Cn/2yBNm.net] 質問させてください! VisualStudio2017のC#Formアプリで自分用のテキストエディタを作ろうとしていて、 「改行した時、一行前の行頭に全角スペースがあった場合次の行頭にも全角スペースを挿入する」 というちょっとした自動インデントのような動作をさせたいのが目的です。 探り探りで一応目的の動作をするコードは書けたのですが、 「KeyUpからエンターキーの場合のみ分岐して座標をひとつ戻してから改行かどうかを確かめて、 行数を調べて一文字切り出してからカーソル位置を戻して比較して……」 をはじめとする行程で相当に回りくどいことをやっているような感覚があるので もっとスマートな方法はないものかと思い質問に来ました。 どうぞよろしくお願いします。 https://ideone.com/8J7uBK
288 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 18:25:03.14 ID:iISOYGhU.net] エディタはそんなもん 作るの超めんどい
289 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 18:56:29.70 ID:2QdSuJnz.net] task難しすぎない…? 非同期が難しいのは当然だけどこんな躓いたのc#が初めて
290 名前:デフォルトの名無しさん [2018/08/30(木) 19:01:33.74 ID:16om6f/5.net] スレッドのシーケンシャル図みたいなのに書き出すといいよ まあスレッドセーフな構造を理解してるのが大前提だけど
291 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:0
] [ここ壊れてます]
292 名前:5:11.47 ID:syYDPcaO.net mailto: >>278 Taskを使わないと更に難しくなる [] [ここ壊れてます]
293 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:16:12.27 ID:r/TRQYs/.net] task自体は簡単だと思うけど async/awaitは誤解したまま使うとハマる
294 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:19:23.09 ID:JgfkbZf2.net] >>275 いや普通にOSSのライブラリ使えよ
295 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:25:02.55 ID:2+/sJ3kY.net] >>276 読み辛すぎるw っていうか、これ本当にちゃんと動く? KeyUp発生した時点で入力したキーがTextに反映されてる前提になってると思うけどそうだっけ?
296 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 19:34:27.48 ID:r/TRQYs/.net] windowsの仕組み上不定な気がする
297 名前:デフォルトの名無しさん [2018/08/30(木) 20:37:16.45 ID:4drhoSMA.net] >>276 行頭に全角スペースが入力されたときにフラグ立てる というのはどうかな 文字列型フラグ変数に行頭に入力された全角スペースを突っ込んでおいて 改行でフラグ変数の値を行頭に挿入とか 行頭全角スペースが削除されたらフラグも空文字列にしないといけないけど
298 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 20:42:40.52 ID:2QdSuJnz.net] https://ideone.com/0aD1lJ >>278 で質問したものだけどコードで書いたので下の疑問が正しいのか教えてください A:ここで並列にダウンロードできているのか? B:Resultを使うとデッドロックすると聞いたけどawaitしていれば大丈夫?
299 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:00:14.61 ID:Assw0OKp.net] >>285 行全部のフラグ作るのとテキスト読み込むときにフラグ作る必要があるが 何万行とかで構成されるテキストでもそれやるの? 動くのなら>>276 の方がまだ楽だと思う
300 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:07:07.68 ID:cD6Bz7+B.net] >>282 ん? Open XML SDKってOSSなんだが w https://blogs.technet.microsoft.com/microsoft_office_/2014/06/25/open-xml-sdk-goes-open-source/
301 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:24:36.54 ID:VlraDHRu.net] >>288 え、生でそれ使えってか?
302 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:26:02.80 ID:Yh+aUVCO.net] >>286 A: DownloadAsyncが真っ当に実装されていれば並列ダウンロードになる (真っ当ではない例: 同期的にダウンロードしてTask.FromResult) B: Task<TResult>.Resultはタスクが終了済みなら即座に値を返すので、デッドロックしない ちなみにTask<TResult>.WhenAllはTask<TResult[]>を返すから return (await Task.WhenAll(tasks)).ToList(); でも行けるはず
303 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:26:33.91 ID:qGVo2Ysa.net] Open XML SDK生で使ったことあるけど、もうちょっと頑張れなかったのかと言いたい 中のファイルメモリに乗っけてシートごとの並列処理出来るかと思ってたのに全然だし、セルの位置はR1C1限定とかマジで死ねよ
304 名前:デフォルトの名無しさん [2018/08/30(木) 21:27:27.97 ID:jRU2Egdi.net] >>288 Open XML SDKはWordなんかも含むOffice製品全部のSDKちょっと直感的じゃないから ラッパーで多少はExcel VBAライクなClosedXMLとかNPOIとかの話と思われ
305 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:27:50.35 ID:2+/sJ3kY.net] >>276 まあケチ付けるだけなのもあれなんで 俺ならこうかなあ 無駄なフィールドを作らないために無理矢理ラムダ式使ってるけど本当はこういうのよくないかも class TextBoxEx:TextBox { protected string GetIndent(int line) { var s = Lines[line]; var m = Regex.Match(s, @"^[ \t]*"); return m.Value; } protected string GetIndent() { return GetIndent(CaretLine); } public int CaretLine { get { return GetLineFromCharIndex(SelectionStart
306 名前:); } } [] [ここ壊れてます]
307 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:28:10.88 ID:2+/sJ3kY.net] protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); if(e.KeyCode == Keys.Enter) { var indent = GetIndent(); EventHandler eh = null; eh = (sender, ea) => { TextChanged -= eh; SelectedText = indent; }; TextChanged += eh; } } }
308 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:41:05.42 ID:cD6Bz7+B.net] >>289 , >>292 だからそういう話ならもっと便利なOSS書けよって話 >>282 だと単なるバカか文句しか言えないクズにしかならん
309 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 21:46:27.28 ID:2QdSuJnz.net] >>290 勉強になりました c#は書き方いろいろあってむつかしいです
310 名前:デフォルトの名無しさん [2018/08/30(木) 22:15:02.92 ID:jRU2Egdi.net] >>295 >>282 はSDKという単語に対してライブラリという単語を使ったんだだと思うぞ (それにOpen XML SDKはソース公開されてるものの MSしかコミットしてない実質プロプラなのでOSSと呼ぶの違和感あるのもあると思う) >>275 の質問レベルに対してSDKを出すのは それこそもっと便利なOSS書けよって話 ここ初心者スレだぞ
311 名前:デフォルトの名無しさん mailto:sage [2018/08/30(木) 22:26:00.43 ID:R+j2ccwX.net] >>282 が的外れで意味不明なのが悪いということ
312 名前:デフォルトの名無しさん [2018/08/30(木) 23:39:14.89 ID:4drhoSMA.net] >>287 そう言われるとそうだな もっとよく考えないとダメだったな テキストエディタ舐めてたわ
313 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 00:01:56.93 ID:4iUWs/UZ.net] var config = new ConfigurationBuilder() .AddEnvironmentVariables(prefix: @"XXX_") .Build(); services.Configure<MyOptions>(config.GetSection("MyOptions")); class MyOptions { public int Foo { get; set; } public int Bar { get; set; } } ---env--- export XXX_MYOPTIONS_FOO=1 export XXX_MYOPTIONS_BAR=2 ヒエラルキーを持った設定を環境変数に入れたいのだけどコロンを環境変数の識別子に使うとOSに怒られる アンダーバーにすれば環境変数をセットできるけど今度はIOptionsパターンがヒエラルキーを認識してくれない なんかイケてる対処法ないんか?
314 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 00:12:53.87 ID:0MAifXJX.net] >>299 ギガ単位のテキストファイルを編集できるエディタって意外とないのよね ログファイルとかで需要はありそうなのに 昔、探したけど無かったからけっこう苦労して自作したわ
315 名前:デフォルトの名無しさん [2018/08/31(金) 00:14:40.87 ID:4ZfpOo1s.net] そんなもんをエディタで編集しようというのが そもそもの間違い sedで十分
316 名前:デフォルトの名無しさん [2018/08/31(金) 00:18:44.01 ID:4ZfpOo1s.net] ギガ単位のファイルなんか 結局検索しないと編集箇所を特定することなんかできない もしかしてギガ単位のファイルを目視で編集箇所特定してんの どんだけ頭悪いねんと。。。
317 名前:276 mailto:sage [2018/08/31(金) 03:32:18.34 ID:ogs0aMAV.net] >>277 こんなもんなんですね!? テキスト入力を広げていくだけだから初心者向きだと思って始めたのですが びっくりです……でも組み上げていくのは楽しい…… >>283 >>293 当方プログラミング3日目ゆえ……読み辛くてすまぬ……すまぬ…… コードありがとうございます! すでに用意されているものを組み合わせることしか考えてなかったので Textboxのクラスごと作ってしまう方法は目から鱗でした! GetLineFromCharIndexメソッドの存在すら知らなかったので これだけで無限に簡略化できそうな気がします…… 本当にありがとうございます、色々弄ってみます! >>285 既存のファイルを読み込んだ時に改行しやすくするのが目的なので >>287 さんの言うとおり一行一行フラグ立てていく方式は厳しいかなと思いました……! リアルタイムで少ない文章を入力していくならそのぐらい簡素でも いいと思うのですけれどね! むずかしい! おかげで先に進めそうです、ありがとうございましたー!
318 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 03:47:24.61 ID:ogs0aMAV.net] れんとうしつれいします いざググって調べてclass TextBoxEXの意味を勘違いしていた事に気付いたため レス内容は笑い流してあげてください 正しい意味を知って本当に目からウロコでした ありがとうございました!!
319 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:16:33.32 ID:WaaqYsvL.net] >>298 たぶん>>297 と同類でOpen XML SDKがOSSなのを知らなかったんだろうな 実質プロプラとかわけわからんこと口走って恥の上塗りしてるし w
320 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 06:36:54.02 ID:7Lf8QxyM.net] 実質プロプラw
321 名前:デフォルトの名無しさん [2018/08/31(金) 07:41:37.25 ID:Sw5Wccxa.net] >>304 3日目なら他にやることあるだろ
322 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:23:57.84 ID:ogs0aMAV.net] >>308 どんな技術も取り敢えず自分がやりたい事から始めて 壁にぶつかったら都度必要な事を調べていけば上手くなると思っているのですが違うのでしょうか……? どうにか自力で一応の形にして目的を実現するところまではやって、 本当にそれが正しいのか調べて見つけることができなかったから質問させて頂いた状態なので 他にやる事と言われても何をすればいいのかわからないです、すみません……
323 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 08:44:51.07 ID:6aCB/3AZ.net] >>304 普通はこんなもんじゃないよ テキストボックスにデータを持たせるんじゃなくて別にプログラム内部にデータを持たせて それを表示に反映させる感じ
324 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 12:29:19.65 ID:iUPXUGud.net] >>309 それでいいんだよ、そうやって覚えていくのが一番いいと思う とにかく作ってみないとわからないからね 作る喜びを感じられれば伸びていく リファクタリングもバージョンアップもどんどん やってみるのがいいと思う
325 名前:デフォルトの名無しさん [2018/08/31(金) 13:51:05.81 ID:Sw5Wccxa.net] >>309 取説読まずにサポセン電話する迷惑なタイプ
326 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 15:13:11.36 ID:ogs0aMAV.net] >>310 な、なるほど! そうすれば一行毎に表示を弄ったりとかの細かい事もできそうですね! でもリアルタイムで打ち込んだデータを内部に移しながら表示領域に戻して……とやるのは結構 大変そうな気がします。世の高機能テキストエディタはそういった苦労の上に作られているのですね……。 >>311 ありがとうございます、頑張ります! 実際スレに貼って頂いたコードの正規表現命令が通らないことで Text.RegularExpressionsの存在を知ったりと無知ゆえの見落としも結構あるのですが、 自分の知識と思いつく検索ワードで詰めれるところまでは自分でやって成長していきたいです! >>312 可能な限り調べきってから問い合わせてはいるのですが なにぶん取説が広辞苑レベルなので……索引力不足、恐縮です どうにもならなくなったらまたご迷惑かけます
327 名前:263 [2018/08/31(金) 16:29:19.58 ID:vo9ITXw3.net] 先日デストラクタについて教えてもらった者ですが やはりメモリリークしてましたwww 起動時は6Mくらいだったのが終了時には10Mになってました 少しだったから大きな問題にならなかったってことですorz でも「実用上は問題無いけどゴミいっぱいまき散らしやがって!」 って怒られますよね・・・ でデストラクタを勉強し始めたのですがさっぱり分からん! マーシャリングして使ってるAPI関数が問題なんだろうとはわかるけど どのタイミグで何処でデストラクトするのかとか IDisposableイベントの発生のさせ方とか C++から勉強しないとダメかな? 先は長いなあ
328 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 16:33:50.31 ID:7EVWbyOU.net] いや6M→10Mはメモリリークしてなくても.NETならそんなもんだぞ 長いことモニタしてればわかるけど、フルGCが走れば減る
329 名前:デフォルトの名無しさん [2018/08/31(金) 16:48:31.15 ID:vo9ITXw3.net] >>315 え?そうなの? その程度じゃメモリリークしてるとは断定できない? もう一度検証してみますだ
330 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 17:39:33.85 ID:cQtmAsyE.net] >>314 つ https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/dispose-pattern ただし和訳は機械翻訳だから読めるなら英語版おすすめ WINAPIで取得したリソースはアンマネージリソースだから、上の記事のComplexResourceHolderのように Dispose(bool disposing)内で、disposingの真偽に関わらずアンマネージリソースを解放するのが正解 あとC++とC#ではどちらもデストラクタという用語はあるが C++のデストラクタはC#ではDisposeが対応する概念 C#のデストラクタはDisposeし忘れた場合の救済措置
331 名前:デフォルトの名無しさん mailto:sage [2018/08/31(金) 17:43:15.60 ID:dU0KocTd.net] >>314 盛大に勘違いしてそうだけど、C#のデストラクタは そのクラスのインスタンスを利用するプログラマがDisposeを呼ぶコードを 書き忘れた(つまりバグ)場合のフェイルセーフ以上の意味は通常はないっすよ つまりIDisposableを実装しないなら普通はファイナライザも必要ない ファイナライザは何か不思議な力でリークを解決してくれるマジックじゃありませんw 初心者がごちゃごちゃ頭の中でくだらないこと考えても意味ないよ どうせそんなの盛大に間違ってるw そんな暇があったら理解できなくても少しでもドキュメントを読んだ方がいい