ノードエディタって各ノードのプロパティを接続するけど、GUIはともかく「接続する」というビジュアルスクリプディングの中の動作ってどういう感じになるんだ? コードを動的に生成してc#で実行する感じかね
この人は自分で調べようとせずに一から十まで人に聞いて 結局何も作れない人だから答えても意味がないぞ > listviewの使い方について、超初心者向けに解説してるサイトを教えてください > ファイラを作成しているのですが、ツリービューでPC内のフォルダを検出する方法について、 > ソフト上でファイルにアクセスして、フォルダの中身などを表示したいのですが、まず何のフォームを使えばいいんでしょうか? > c#でスクリーンショット撮影するソフトは不可能ですか? > 個々のサンプル通りにゲームを作成中なのですが、paintイベントハンドラってなんでしょうか > c#のフォームで、タイルマップエディタのようなものを作りたいのですが、どのような情報を調べたらいいでしょうか 前スレから適当に拾ってきたけどこんな有様で何一つ出来ちゃいない
>>11 気に入らなきゃ君が放置すりゃいいだけ 馬鹿じゃないの >>10 作れますよ なぜ作れないと思ったのですか? 理由を述べなさい >>12 罵倒レスはやめてくださいってテンプレ読めないんですか? >>10 C#で「イベントを設定して、処理を設定」は動的にも追加できる もしくは「つないである(フラグがある)場所に対してだけ処理をする」でもできる 回答してくれた>>13 にケンカ売ったんだからけじめ付けてくださいね >>14 罵倒は良くないらしいぞ ダブルスタンダードは改めてくださいね >>11 やりたいこととレベルがあってないんだろうな ツリーやリストの使い方って俺もどこで覚えたのか忘れちゃった 確か入門書には書いてなかったと思った GUI ToolKit(?) だけでも、少なくとも、 WinForm, WPF, Xamarine があり、それに加えて .Net Core, .Net Standard などなどがある。 めちゃくちゃ分かりにくい。結局どれ使えばいいのか。
Javaの場合、native コードより遅くなっても、Swingを使っていれば、 本当にほとんど全てのPlatformで動いた。ブラウザの中ですらも。一方、 C#は、起動も起動してからも遅いし、文法やライブラリもVBと似たように ごちゃごちゃして上に、Multiplatformですらもないようだ。
>>17-18 AWT、Swing、JavaFX がありそれに加えてOracleJDK、OpenJDK(Adopt/Zulu/Corretto etc.)、などなどがある。 めちゃくちゃ分かりにくい。結局どれ使えばいいのか。 ををー。SwingじゃAndroidアプリは作れないかい!!? >>21 それは、Swing 一択で決まり。美しいし速度面も十分で、完全Multiplatform で特に欠点が無い。それに、新しい仕様が出てくる速度もゆっくりだし。 それに比べて、C#は全く違う。どんどん仕様が出てくるのに、どれもこれも 汚くて欠点を含む。新しいのが出てきたら、とんでもない欠点を含む。 問題ばかり。 >>22 新しい方のJavaFXがゴミ過ぎてWPFでなくWinformsが使われてるC#といっしょなんですね >>23 でも、C#の方が混乱が大きいように感じる。 .Net 1つにしても、多種類あり、すぐに方針が変わって、誰もよく理解できてない。 ToolKit に関しては、Java だと Swing 一択で問題ないのに、C#は、誰も1つに 絞り込めないでいる。しかも、C#ではMultiplatFormは現実的には無理。 Javaは、ずっと前からMultiplatformだったのと対照的。 >>24 >C#ではMultiplatFormは現実的には無理 なにか深刻な理由があるのでしょうか?ぜひ伺いたいところです マイナーバージョンが一つ違っただけで大騒ぎする WebLogicなんて無かったんや
>>24 > .Net 1つにしても、多種類あり、すぐに方針が変わって、誰もよく理解できてない。 最近もOracle JDKの有償化に伴い派生の多い代替の選択に混乱している言語があるようですね > Java だと Swing 一択で問題ないのに 私がここでWinforms一択で問題ないと宣言することと何も変わりませんね Sun時代はSwingへの投資をトーンダウンさせるほどJavaFX推しの流れも一時期ありましたが Oracleに移りJavaFX ScriptからFXMLへの移行などWPFなんぞよりよほど混沌とした変遷を経ています そしてOracle JDKから分離され公式に格落ちになったかと思われたJavaFXですが しかし上記にある選択肢の一部で同梱は継続され何よりOpenJFXはまだまだヤル気です >>28 そういう問題じゃないんだよ。Javaの場合、Swingなんかは、IDEなしでも コードから簡単に記述できる設計になっていたのに対し、C#のはそうなって ないだろ。IDEと共に使う設計になっていて。 だから、初心者はどれを使っていいか分からず迷惑極まりない状態になって いる。複雑でプログラムをする前に挫折してしまう人もいるだろう。 MSは元々そういう設計をする会社だったけど。 それ以前にJavaをGUIアプリ作るのに使ってる人なんて「いない」 その事実についてはどう考えてるの?
JavaでGUI作ったりIDE拒否したり20年くらい前からタイムスリップしてきたのかな
まあ従来のIDEについては最近はMS界隈でも否定論が主流になりつつあるけどね IDEはコーディングとデバッグのためだけのツールでよい、 IDEにコードを自動生成させたくなるような作業があるならフレームワークの設計の方を見直すべき、 というのが今時の流れだよ
.Netじゃwindows/mac/linuxのクロスプラットフォームGUIがいつまでたっても作れないから 仕方なくjavaで書くんやで javaが10数年前にとっくに実現してる事なんだからいい加減追いついてくれー
完全敗北を認めた今ならマイクロソフトがGUI toolkit作るならクロスプラットフォームになるだろうが winrtの登場の頃はまだmicrosoftは敗北を認めてなかったからクロスプラットフォームにならなくて残念..
>>32 XAMLやらAndroidのレイアウトXMLやら手書きでも十分かけるけどIDEでイメージ確認しながら書いた方が効率よくね? >>34 Electronがまさにそうでしょ 今や事実上MSが開発してるようなもんだ >>29 > そういう問題じゃないんだよ おや、急に問題がすり替わりましたね > どんどん仕様が出てくるのに、どれもこれも > 汚くて欠点を含む。新しいのが出てきたら、とんでもない欠点を含む。 Javaの新しくて汚らしく欠点だらけのJavaFXを忘れてらっしゃるようなので説明を追記したまでですよ Swingで良いならWinformsで良いとも言わないのが不思議ですね IDE? SwingをIDE無しで問題ないというのと同程度にWinformsも問題ないですね >>35 それは否定しないけど、完璧なGUIデザイナ作るのって大変なんだよ WinFormsのデザイナはVBやDelphiから受け継がれた長年のノウハウの集大成だし、 WPFにいたっては10年開発しても結局ゴミのまま開発終了 今のPC向けGUIアプリの主流は言うまでもなくWebだけど、現代のWebの開発スタイルにフィットするデザイナをMSが開発し始めたとして、 それが使い物になる頃には開発スタイルはすっかり変わっていて時代遅れの廃棄物になってるわけ 従来型のIDEは技術の進化や流行に追いつけなくなってるんだよ >>29 WPFもJavaFXも開発者しか画面デザイン出来ないのが問題になってて、デザイナーに投げられるようにコードから分離する目的で作られたのに。。。 最初から素人用の作りじゃ無い。 多くの人がUIデザインのセンスが無いのに、xxML直書きが主流のせいで更に悪くなってる気はするな C#に限ったことじゃないけどさ
>>41 企業で開発する場合ならその方が良いかも知れんが、個人開発だと、 そういう風にGUIとプログラムを全く分けてしまうのは、面倒なだけ の事が多い。 >>43 君は個人開発でどういうものを作っていて具体的にどういう面倒があるの? >>43 最初から素人用の作りじゃ無いって書いてるのに、その回答は。。。 >>44 >具体的にどういう面倒があるの? プログラムで論理的に配置した方が柔軟性が増すし、デザイナーを使う 場合よりも作業も短時間で済む事が多い。 >>47 だから具体的に あなたは何を作っていて何の作業が短時間に済んだのですか? MS には潰れてほしいので、MSに今後の方向性を与えるような情報葉与えられない。
プログラミングの需要の大多数は企業またはチーム開発だからそっちの方に使い勝手を合わせるのは当然だわな
DIとグローバル変数おじさんって何が違うのか分からなくなってきたぜ よく考えたら大して変わんなくないかこれ?
>>55 単体テストのときに差し替えるのが目的 テスト書かないんなら普通にnewすりゃいいよ ASPはなにからやればいいの? winFormsとMVCってなにがちがうん?
>>59 全くの別物 WebFormsはWinFormsモドキ MVCはRuby on Railsモドキ 今始めるなら、英語に抵抗がなければ最新のMVC系フレームワークであるASP.NET Core 英語ダメならオワコンRailsかPHPでもやっとけ >>61 >英語に抵抗がなければ というのが、どのくらいのレベルなのか、には興味があります…最近は英語よりも古代語(ラピュタの黒石に刻まれているあんな感じのやつ)のほうに興味があります ムスカの台詞「読める!読めるぞ!」を私も味わいたいと考えているのです プログラミングに限らず技術系の文章の英語なんか普通に受験して大学入った 人間なら誰でも読めるw 英語英語言ってる人は逆にいうとその程度の事で自分を差別化できると思ってる人なんだと 思った方がいいよwww
読めなくても良いけどさ 堺筋線 -> Sakai muscle 3両目 -> 3 eyes 天下茶屋 -> World Teahouse これくらいは変だと自分で気付けないと恥ずかしいぞ
アップキャスト分かりやすく教えて 何言ってんのかわからん
>>65 正しいじゃないか。さすが大阪。間違いを恐れてはいけない >>66 むしろ何が分からんのか分からんのだが… class A { } class B : A { } クラスAから派生したクラスBがあって B b = new B(); A a = (A)b; // 暗黙にキャストできるので (A) は不要 B型のインスタンスをA型として扱うこと 型の集合としての包含関係が感覚的に理解できるまでにはわりと時間がかかる 継承とは元のクラスを拡張することであるという言葉に惑わされてはいけない
数値によって変数を使い分けることに関してわからないことがあるので質問させてください 【以下引用】 int型を慣習的に使用することで、他のデータ型に変換する機会を減らすこともできる。 小さい値を扱うことがわかっている場合は、int型よりもbyte型のような小さい値を格納できる型を使う方がメモリの消費量を減らすことができる。 しかし、宣言される変数の多くはスコープが狭く、メモリ上に存在する期間が短いため、メモリの消費量はあまり重要ではない。 ↑ これはつまり、数値を扱う場合の変数は基本的にintを使ったほうがよく、必要があればbyteなどの変数を使ったほうがいいということですか? それともどんな数値でも変数の使い分けをせず、intを使ったほうがいいということですか?
>>70 一般論として、ユーザーコード内で宣言した単独の変数のメモリ消費量が問題になることは「全く」「無い」 巨大な配列を必要とする場合を除けばintでよい >>71 わかりました 親切に教えていただきありがとうございました ちょっと上で英語の話題があったついでに用語について教えてほしいんだけどさあ Concurrency = Asynchronous processing って理解であってるん?
>>73 間違ってる シングルスレッドでも非同期プログラミングは必要 Concurrency ∈ Asynchronous processing こんな感じ?
>>75 間違ってる 並列処理だからといって非同期プログラミングが必要とは限らない fork-joinなんて普通に同期処理 確かにそうだわ ただなんかしっくり頭に入らないんで、良い図かなんかないかな
soapのUserAgentの追加だけど自己解決したので書いとく OperationContextScopeにsoapのInnerChannelを渡してOparationContext.Current.OutgoingMessagePropertiesを設定すればよかったみたい
↓こういうデータを保持するためのクラスってなんていうの?EF使わない場合DTOって言わないね? class Hoge { ID { set; get; } Name { set; get; } Age { set; get; } Biethday { set; get; } }
たすけて! Parallel.Forから Staticなプログレスバー呼びまくったのに一度も実行時エラーでなかったの なんで?正常な流れなの・
>>85 プログレスバーはWin7のころの タスクバーのプレグレスバーなんだよ Nugetでこれ入れて出せるようになるやつ Windows7APICodePack これな using Microsoft.WindowsAPICodePack.Taskbar;
>>80 パット見、見た目が、JavaScript の JSON 形式に似てる。 UIスレッド外からいじったのにエラーにならなかったけどなんで?って質問じゃないのか
>>92 そうそう、そういうこと Parallelで進捗バー増やしてったのに 順調に増えてって正常終了した TaskbarクラスはStaticでクラスライブラリ(.dll) なんか理由わかる人いませんか? ソース見てみたらITaskbarList3::SetProgressValue呼んでるだけだし アプリ内のウィンドウというよりシェルへのアクセスなら 元々UIスレッドで呼ぶ必要ないんじゃねえの 検証してないけど
>>94 あーシェルの可能性か なるほど uiスレッドどころか別プロセスか 盲点だったわ ありがとう、中身見れたら見てみる >>95 エディタ本体つくるのは簡単 各種画像ファイルフォーマットの読み書きが面倒 >>97 今はnugetでだいたいのフォーマットのライブラリは取得できるんじゃないかな てか、Windowsなら標準のBitmapクラスでメジャーどころは扱えるか
>>97 がんばります ペイントイベント使うだけですよね DrawImageやBitBlt地獄が待ってるんだろうなw
お絵描きに限らないけど、手順を記録するようにしないとundo実装できなくなるよw 何で偉そうにそういう非常識なことを言うかね
>>103 何の話しているの? 「図形」じゃなく「ドット」エディタで「手順」記録すると大変なことになるよ undoは任意の時点のデータを退避したらどうにでもできるよ 自分の経験上、Undo、Redoは、プログラミングが難しいことがある。
参照やポインタの値は、一般にはUndoすると変化するので、Undo、Redoを 任意回数行った場合には「識別子」として役立たないことになる。 だから、Draw系ツール、3Dモデラ、3D-CADなどではポインタ値だけで 直線の接続先などを識別するのは難しい。だからと言って座標値だけで識別 できるかというとそれはそれで無理がある場合が有る。だからID番号を付ける 必要が出てくるかもしれない。 CADで、点が1万個有る場合に全選択してから Move した場合の Undo 情報は、 1万個に上る、と言ったような問題点も耳にした。
ツール上では削除しても、内部的には削除せずにメモリ中にずっと残しておけば、 参照やポインタ値は変化することは無い。これを利用する手もあるかもしれない。 ただし、その場合、プログラミング中、オブジェクトを自由に削除できなくなるので、 未来永劫、そのことに気を使い続ける必要がある。
3Dソフトの操作履歴って入れ替え可能だからな(可能な操作のみだが) それすらすごい 例えばベンドデフォメーションかけた後にオブジェクト同士をマージ この操作順を普通に入れ替えられる 操作をフリーズ(固める)しない限りどんな操作でも入れ替え可能 そして上記の履歴操作は機能のうちのほんの一部
ボタンを押すと、計算してその結果をリッチテキストボックスに表示する、構造的にはシンプルなイベントを作ろうとしています。 private void button_Click(object sender, EventArgs e) { リッチテキストボックス.Text=(見出し); ◆計算◆ リッチテキストボックス.AppendText(ここに計算結果を表示); } 自分としては見出しを表示→◆計算◆(数分かかります)→計算結果表示と、上から順に処理されることを期待しているのだけど 実際は◆計算◆が終了するまで最初のテキスト「見出し」も表示されないのですがどうしてなのでしょうか?
連続した削除は統合したり、塗りつぶしは開始点を覚えたり 色々小技もあるので、一概には言えないと思うけどなぁ 本格的に勉強したいなら、paint.net か pinta のソース読むのお勧め
ドット絵なんて"■"をフォントサイズと色変えて 200x200でやるとかじゃアカンの? 商用?趣味?
お前の息子みたいな小さい世界の話はしてねえんだよ保育所に引っ込んでろ 入れなかったのか?じゃあ死んでろ
>>109 イベントハンドラーの中で計算しているから、UIスレッドを掴んだままになってる。 非同期処理化すれば解決するが、計算中もUIを触れるから別途対策が必要。ウィンドウかボタンを無効化とか。 private async void button_Click(object sender, EventArgs e) { this.Enabled=false; リッチテキストボックス.Text=(見出し); await Task.Run( () => ◆計算◆ ); リッチテキストボックス.AppendText(ここに計算結果を表示); this.Enabled=true; } >>108 速度的な問題点を無視すれば、 編集ソフトでファイルを読み込んだ直後から人間が操作したコマンドの履歴を 全て記録しておいて、ファイルを読み込んだ直後から、最初から最後の1つ手前 まで、その履歴のコマンドを順に再実行するようにすればUndoは実現できる 事は出来る。 この方法だと、操作の途中に重たい処理が挟まっていた場合が問題となる。重たい 処理が行われた場合は、処理の最初と最後でデータをファイルに保存してしまって、 Undoするときはそれを「起点」にする方法も考えられる。ただし、この場合は、 ファイルへの保存に時間がかかる問題が残る。 簡単ですか?くらいの質問する相手なんだから112が言うような実装で良いと思うけど 高機能にしようと思えばいくらでもできるだろうけど既存のドットエディタ使えば?って気もする 勝手に質問を高機能に寄せてああでもないこうでもない言ってても仕方ないよね
>>116 ゲームの専門家に聞いたんだけど、実はドットエディタは使ってなくて、 1つのファイルに複数のキャラクタ画像をまとめて、普通のPaintソフトの 拡大鏡機能で作っておいて、ゲームプログラムの方で部分的な四角形領域 を座標で指定して複数のキャラクタとして扱っている、と聞いた。 そして、透明部分は、1つの色を「透明色」として扱ってMaskパターン を作っていると。WindowsのBitBlt系のAPIなら、透明色をそのまま 指定できるタイプのものも確かあったと思うけど。 >>115 しかし3Dソフトは激重アプリなのにサクサクとundo redoできる 設定では1000回まで戻れるようにしている しかも全部メモリに管理しているんじゃないだろうか 設計が凄まじいのだろう >>117 そういうやり方だってあるしドット絵エディタで全て作ってるのだってあるし普通の絵をドット絵チックに変換するツールを使う場合もある >>118 多分、普段のUndo、Redoはメモリ内のみで行っている。 そして、>>108 のように、操作者が順序を入れ替えた場合のみ、 どこかの時点を起点として操作をリプレイするようなことをやってる。 だから後者の場合のみは時間がかかるんじゃないかと思うが、滅多に やることはないので問題ないと考えられているのではなかろうか? >>122 3Dソフトはそもそもディペンデンシーグラフで履歴ノードが自由に繋ぎ直せるし、インプットアウトプットもしまくるから わざわざファイルに出してることはないはず そしてそれら膨大な数のノードがリアルタイムで動作したりするからなあ ほんとどうやったら普通のPCでもそれなりに高速に動くようなあんなシステム作れるんだ ちなみにスクリプトやAPIでも履歴作れるんだよな openChank closeChankの間に入れ込んだ操作の履歴を一つにしてくれる >>123 履歴のコマンドの順序を入れ替える操作を高速にするアルゴリズム、今、分かった。 1. 操作を変更する時点は、現在の状態からは近いことが多いはず。 2. だから、ツールの内部処理で、現在の状態から小数回 Undoを繰り返せば、その地点にいったん 戻ることが出来る。 3. そこからは、新しい順番でコマンドを「Replay(再生)」すれば、目的の結果が得られる。 >>124 ・例えば、現在の状態が、ファイル読み込み時点から、1,000回の操作の後だとする。 ・現在の状態になる20回前の操作を変更したいとする。その操作は、最初からは980回目である。 ・ここで、(1,000回目の)現在の状態から 20回 Undo をすれば、上記の980回目の状態に戻れる。 ・この20回くらいの Undo ならば、大して遅くは無いはず。 ・出来あがった980回目の状態から、新しいコマンドの列を20回程度繰り返せば、目的のデータが 完成する。 >>80 プレーンオブジェクトと呼んだりするけどこれと言った決まりはない あとキャラ一体でこのノード数は当たり前 これが何体もいる上に背景やらエフェクトやら物理演算、アニメーションブレンディングとかも同時にエディタ内でやってる さらに裏側で動作させてるスクリプトも何百もあるし、APIとかも膨大に動いてる >>111 >>114 ありがとうございます なんとなくイメージはつかめました >>80 昔はバリュークラスと呼ばれてた C#的にはPOCOだな あとDTOはEFと関係無い azure durable functionをオンプレで使いたいのだけど類似のオプソフレームワークってあります? MQ使って再発明はダルいっす
>>132 オンプレなのに態々縛りプレイをしたい理由は? long-runningなスレッドでいいだろ 質問させてください。 win10でVisualStudioCommunity2017のC#WPFアプリでデスクトップ常駐ソフトウェアを趣味作成してます。 プログラミングスキルは、あちこちのサンプルソースやQ&Aのコードを参考になんとか期待通りの動作を作り上げてる程度の初心者です。 悩んでいる点は、本体右クリックメニューのチェックボックス付きMenuItemを選択した時にMainWindowクラスにprivate宣言してあるbool変数をトグル動作させているのだけれど、 タスクトレイアイコンの右クリックメニューに用意したチェックボックス付きMenuItemからも同じ事がしたいけど両MenuItemのチェック状態を同期させるにはどの様に作るのが良いのでしょうか? 本体右クリックメニューはMainWindow.xamlの<Window.ContextMenu>で作成、Sourceにproperties:Settings.DefaultをバインドしてClickにswitch切替関数を呼び出す様に設定してます。 タスクトレイアイコン右クリックメニューはMainWindow.csの_Loaded内でSystem.Windows.Forms.ContextMenu/System.Windows.Forms.MenuItemで作成してClickイベントをラムダ式(?)で記述してます。 説明するのに使う用語すらそこら辺から借りてきたもので大変恐縮ですがご指導の程宜しくお願いします。
最後の方、 「Clickイベントをラムダ式(?)で記述してます。」は 「Clickイベントを無名関数(?)で記述してます。」と言うべきだった気がしてきました。
他のクラスを承継してクラスを作る時、承継元のクラスのコンストラクタを呼ばないようにするのってどうすればいいの?
>>134 ・本体右クリックメニューの方は、xaml側でMenuItemにx:Nameを付けると.cs側で参照できる ・タスクトレイアイコンの方は、作成したMenuItemをフィールドに保持してあとで参照出来るようにする として、「switch切替関数」と「Clickイベント」でbool変数をトグルさせた後に 各MenuItemのIsCheckedを設定すればできそう 以下余談 WPFでは内部状態とViewの同期はBindingという仕組みを使えば楽できるんだけど(ただし使いこなせるようになるまでが難しい) タスクトレイ関係のコントロールが無いからWinForms側を使うしか無くて、結局Viewを直接触ることになるんだな…… >>136 無理 仮にそれが出来たら、継承元のprivate変数が未初期化のままコンストラクタが完了することになって 結局そのインスタンスは使い物にならない >>131 POCOは特定のフレームワークへの依存を持たない普通のオブジェクトを指す言葉で、 決して振る舞いを持たないことを意味しているわけではない うんだから 振る舞い無くてもPOCOでしょ 普段使いで貧血ドメインクラスなんてわざわざ言わないしな ただのデータクラスって言ったり わかる相手にはプレーンオブジェクトとか言うでしょ コンテキストによってはレコード型と言ったりもするし
アーキテクチャとか思想で呼び方は変わりそうね 3レイヤーアーキテクチャでアプリケーション層でのドメインモデルからview やjsonのための振る舞いを持たないクラスを俺はviewmodelかdtoとか呼んでるわ
>>137 取り敢えずフラグの切替、想定通りになりました〜(^^ x:Nameを付けた<MenuItem>を「MenuItem other = this.FindName("_AmenboModeMenu") as MenuItem;」で取得しました! ググってる際中x:Keyなるものも見かけたので追加で調べておこうと思いました。 タスクトレイアイコン側のMenuItemは、元はMainWindow_Loadedイベント内で宣言していたものを「class MainWindow : Window」のフィールド(private)にしました。 これも取り敢えずWindow_Closingイベント内で.Dispose()する様にしたけど既にobject構造体上より上位のNotifyIconを「notify_icon.Dispose();」していたので不要なのかな? .Dispose()、も少しちゃんと調べようと思います。 余談、ありがとうございました! 何やら理由があってタスクトレイアイコンにはWinFormsのメニューを使うのだと漠然と覚えていた所に 「WPFにタスクトレイ関係のコントロールが無いから」と明快な回答が得られてスッキリしました。 解説サイトの教科書的で読みづらい文章に比べて口語体で語って頂けたことですんなり入ってきました(^^v さて、次は肝心の中身に取り組まなければ!! >>142 x:Nameを付けたら this._AmenboModeMenu とフィールドとして扱える インテリセンスが効くし、そのままの型で使えてキャスト不要になるし .xaml側でx:Nameを変えて.cs側を変え忘れてもコンパイルエラーで気づけるから .FindName()を経由するよりもフィールドで扱ったほうが楽 >>143 インテリセンスとかキャスト不要とかコンパイルエラーとか、間違いなくそちらの方が良いですね! 体系的知識皆無のコード切り貼りマンの自分では容易には辿り着けない領域・・・ ありがとうございます!早速書き替えてみます! List<List<T>>型のフィールドを含むオブジェクトのディープコピーを作る方法で、定石みたいなのがあったら教えて!!!
まじか、なんか無駄な作業してるような気もするけどこれは楽ちんだわ ありがとう!
.NETって、既にMSにレガシー扱いされているらしい。 老害って言葉を使うのが好きな若い人、良い経験だ。
レガシー .NET Framework WinForms WPF ASP.NET Classic ASP.NET MVC Entity Framework Notレガシー .NET Core Windows Runtime ASP.NET Core Entity Framework Core
>>153 Windows Runtimeじゃないからレガシー do { ch = (char)Console.Read(); } while (ch == '\n' | ch == '\r'); この文章の意味が分からないのですが改行と入力された文字が等しければってどういう意味でしょうか? 独習C#のコードなんですが…考え込まないで次に進んでも差し支えないですかね
>>157 久しぶりなんで自信ないけど、先頭が改行な文字列(そんな文字列は改行だけ入力された場合だけ)が入力される間ループし続ける処理かな。 逆パターン(改行だけなら終了するループ)なら割とよく作る。 先頭とかは気にしなくていいが 要は改行も文字の一種だからConsole.Read()で返されうるということ
>>160 いあ、ごめん。 ReadLineと勘違いしてた。 Readは1文字入力だ。 例えば >abc と入力しても chには’a’しか入ってこない。 なので >[Enter]で改行 で chに\nが入る。 (OSによっては\rが改行) 参考までに、漏れは、Ruby で、 ファイルの最後の1バイトが、改行コードかどうか? という処理を作った CR(復帰、0x0D)、LF(改行、0x0A) Windows は、CRLF, \r\n Linux は、LF, \n 古いMac は、CR, \r last_line = nil File.foreach( "abc.txt" ){ |line| last_line = line } p last_line.end_with?( "\n" ) # 末尾が、\n か?
>>163 C#初心者スレで誰に対しての参考なんだよw ここも次スレはタイトルに [Ruby禁止] が必要だな
>>164 他のスレにもよく出没するruby気違いだよ。 ところ構わずrubyの話を始め、大した知識もないのに話に首を突っ込んで場を荒らす迷惑もの。 いくら叩いても消えないゴキブリのような存在だよ。 仮にサンプルコードがrubyじゃなくても大した参考にならないレスだということに驚きを隠せない
厳密にいえば>>157 だって C言語レベルの質問だよな いくら初心者用のスレとはいえさ。。 ふらっと C#,C♯,C#(初心者用(ただしC言語習得者に限る)) にすべき >>168 コンソールの話であってC言語かは関係ない タイトルに書いたところで来るのでNGワードRubyでおk
c#でデストラクタってスコープ外れたときじゃなくてGCが動くときに呼ばれるんだよね? だとしたらみんなどういう処理に使ってるの?
スコープ外れたとき呼ばれようがGCの時呼ばれようがデストラクタはデストラクタだ。後処理が必要な時使えばいい。 例えば、メモリ動的確保したら後処理として解放する処理が必要だが.NETはGCで勝手にやってくれるし。 他にネイティブのハンドルとかオープンしたらクローズとか。 いつ呼ばれようがただのデストラクタだ
IDisporsableに書く処理を2重に書いておいて using使わずにそのクラスを使われてしまった時の保険とか?
>>172 積極的リソース解放をし忘れた時の保険 つまりDispose呼びだしとロギング それ以外の使い道は見たことないな c++だとコンストラクタで割り込み禁止してデストラクタで割り込み禁止解除することで割り込み禁止解除の忘れを防ぐとか色々便利なんだけどね 呼ばれるタイミングがわからんとなるとクリティカルな処理はできないよね
そういうのはusingとDisposeでやればいい
>>176 C#ならIDisposableを実装してusingステートメントで使う 変数の保存先なのですが、ローカル変数 = スタック、インスタンス実体 = ヒープらしいのですが、 以下のように、クラスに直接登録された変数/インスタンスはどこに保存されるのでしょうか? class A { int a = 0; static string b = "テスト"; CLS cls = new CLS(); }
>>183 値型と参照型の区別はついてる? 値型の変数には値型全体を表すためのメモリが割り当てられる 参照型の変数は参照先を示す値(=IntPtr)分だけメモリが割り当てられて、実際のインスタンスはヒープ中に割り当てられる 少し違う話になるけど、配列の場合について、要素が値型か参照型かでの図があったので貼っとく https://www.atmarkit.co.jp/fdotnet/csharp_abc/csharp_abc_005/csharp_abc02.html 例示されたAの場合、 まずbはstaticなのでどこかには確保される、詳しくは俺は知らない A型のインスタンスは、Aが参照型なのでヒープ中に割り当てられる aは値型なのでA型インスタンスの中に割り当てられる(=ヒープ) clsは多分参照型だと思うけど、A型インスタンスの中には参照先を保持する分だけ割り当てられて(=ヒープ)、実体はヒープの別の箇所に割り当てられる もっともC#だけで完結するコードなら、この辺の事柄は気にしなくてもいいとは思う P/Invokeやunsafeを触りだしたら必要かもしれない 結局居DLLってなんなの? クラスライブラリとかいってるけど結局動的な変数Orクラスってだけじゃない?
IL見ろ ILとかよくわかんないっていうなら君はヒープだスタックだを気にする必要が一切無いと言うことだ
関連するクラスを集めたものがライブラリで、それを(動的に)再利用しやすいように格納したファイルの形式がDLL
>>186 COM+とかの話見ると、C#のおとんおかんが凄絶な恋愛してたことがわかるから visual studioってコードの修正案提示してくれたりしてマジすげぇなと驚いてるんだけど最近のideってどれもこんなものなの? ずっとsakuraとコンパイラで開発してきたから至れり尽くせり感に驚愕してる
>>186 例えば、sqlite3 をダウンロード・解凍して、Ruby から使う場合、 sqlite3.dll を、Ruby内で読み込んで使う。 これは、同一プロセス内でのライブラリのロード 一方、sqlite3.exe を先に起動しておいて、Rubyからプロセス間通信する事もできる この場合は、別プロセスとなり、sqlite3.exeがサーバー、 データベースへの問い合わせを行う、Rubyがクライアントとなる つまり、dll・exeの違いは、同一プロセスかどうか なんでc#スレでrubyをわざわざ例に出すんだ? c#で説明すればいいだろ
>>194 そいつ、どこでもrubyの話を持ち出すアホであちこちで嫌われている奴なのよ。スレによっては>>1 にわざわざ書かれるほどの迷惑行為の常連者。 realmとlistboxを連携させたいのだがやり方がよくわかりません やりたいこととしては realmからデータを引っ張ってきてlistboxで表示 listboxの操作でrealm内データの削除 です
なんかGUIのツールを作ろうとしたときに、c#の対抗馬になるものってある?
Electronの開発を主導してるのMSだしな C#は生みの親に後ろからケツを全力で蹴られている格好
javascript嫌いだからHTML+CSS+C#にしてくんねーかな
vs codeで利用してるかが、Githubを買収したらもれなくついてきだけだろ。 まさか、github買収はelectronが目当てだったとか?
>>210 .NET CoreにはGUIのフレームワークがないんだわ 一応UWP、WPF、Windows Formsと組合せて開発できる(現状はWindowsのみだったはず)けどそれなら普通にC#使うし… >>212 へ?フロントフレームワーク好きなの使えばいいじゃん おまえいつの時代に生きてるんだよ >>213 話の流れぐらい読めよ… >>>201 >> なんかGUIのツールを作ろうとしたときに、c#の対抗馬になるものってある? >>214 だからそのフレームワークがどれもイマイチって話な もとの質問がスレ違いなのにいつまでやるの 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
なぜUWP・WPFというクソを生み出してしまったのか
>>216 GUIって表現がおかしいことを認めようとしないクズ pythonで実装できるからと思ってtkinterに浮気してみたけどやっぱ.netってすげぇ便利だったんだなと思えたよ GUI開発は開発環境含めて評価すべきだわ
iPhoneでAppstoreが成功して、カッコ良ければ売れるんだと思い、 ググルプレイが成功して収益管理まで提供したら売れると思ってたら 窓電話は不発、デスクトップでストアアプリ探さないから売り物さえ並ばない。 成功者は金の回りを用意して市場を作った。 MSは市場を作ろうとして壁を作った。
C#は、関数の引数は基本的に値渡しということですが、これ本当ですか? unityで、引数にrefをつけて参照渡ししてるサンプルって見たことがないです。 すごくメモリ効率が悪い気がするのですが・・・
どうせいつもみたいに値渡しだからオブジェクトが全部コピーされちゃうよ〜 みたいな奴だからうんざりする
巨大な構造体の場合は値渡しがボトルネックになる場合もなくはない クラスの場合はどんなにデカかろうが参照しかコピーされないから関係ない 値渡しなのに参照なんですか?とか聞くな うるせえなそういう仕組みだと思ってろ
>>224 クラスは参照型で、引数にした時は参照の値渡しになるから、心配するようなことにはならない。 構造体は値型だけど、あまり使わない。 c#の構造体って書き方がほぼクラスみたいなもんだからcの構造体と比較するとすごく違和感ある ここまで書くならクラスでええやん
インスタンスを設定したがわが保持って置かないと死ぬときもあるしそうでないときもある ループで生成しまくる処理のときはこちらでインスタンスを管理しないと 表示するたびに生成しまくって 前のは消されてない ライブラリの中でほじってるらしくて 消そうと思っても消えない って状態になることも多い
>>231 これあるあるだわ 管理ダルいからスコープ決めてインスタンス作ってるわ >>230 既定のアクセシビリティの差しかないC++の悪口かな? 構造体て値の全コピーが楽なぐらいで無理に使う必要ない
GCの起動サイクルがクリティカルに影響したりネイティブとの相互運用等 無理してというより必要な時のみ使うものだからね
サブフォームFORM2を作って右上の×で消した時どうすれば(どこを調べれば)よいですか? FORM2 form2 = new Form2();
>>232 そうやってもライブラリの中の人まで死ぬ保証はないかもしれないしあるかもしれない >>236 質問の意味がよく分からん 閉じたときに何かしたいならFormClosedイベントだけど >>237 さすがに広く使う変数は パラメータークラス作って使いまわしますよ >>238 意味不明な文章ですみません。聞きたい質問は以下のことです。 サブフォームFORM2を作って右上の×で消した時とサブフォームを消してない時は どのようなコードを書けば判別できますか? >>240 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき? >>240 「右上の×で消した時」はわからないが フォームがDispose(Close)されているか form2.IsDisposed フォームが表示されているか form2.Visible 具体的に何が目的かを書いてもらった方が答えやすいと思う 多分form1からボタンクリックでform2を開いてそのform2が閉じられたことをform1で検知したいってことなんじゃないか?
var変数って便利だけど初期化必須だから惜しいなと思うことがある 例えばとりあえず広いスコープで宣言しといて後のfor内とかで使おうとしたときにここはfloatで扱いたいな→結局宣言箇所をfloatに書き直すのか・・・ってなったり 書きながら考えるときの補助として使おうとすることが間違ってると言えばその通りだけどね
非同期処理A内でタスクBを生成した場合について教えてほしいのですが、 Aのスレッドが抜けてしまったり、あるいはAのタスクが終了してしまった場合でもタスクBは生き続けるんですか? Aの終了とともにBも終了させるようにはできないのでしょうか?
>>247 CreateLinkedTokenSourceで複数タスクにまたがるCancellationTokenSource作ればいいんじゃね >>243 form2.IsDisposed で閉じたかどうか判定できました。ありがとうございました。 文章が分かりにくいみたいですが243みたいな超能力者がレスしてくれれば良いのです。 >>245 の説明の通りですが「教えてください」って書いても放置されることが結構あるので神レス243のほうがありがたいです。 >>246 ああ、良くないと思うぞ。 変数が必要になったら想定される範囲でなるべく小さいスコープで宣言して、それで足りなければスコープを見直すか設計そのものを見直すくらいのがいいと思うよ。 >>250 意味不明な質問してたらそりゃ放置されるわな >>250 放置されることが結構あるということは、これまでも質問のしかたが下手だったか、態度が悪かったか、頓珍漢なことをいっていたか、等々、なんらか自分側にも問題があるとは思わなかった? 答えてくれない方が悪い!ではいつまでたっても改善しないし、周りも困らせることになるよ。 マネージャーがまさに自分の視点でしか話をしないから意味を推察するのにめちゃくちゃ苦労してる しかもマネージャーだから放置も無視もできないしめんどくせぇ
>>248 教えてもらって悪いんだけど、一体どういうことなんだぜ? 実現したいならタスクBが走ってるスレッドを殺すしかないが その場合ILが半端なところで止まってクリーンアップ処理が正常に走らないからリークする 嫌なら249が言ってるような方法でタスクが自発的に止まるしかない 好きにしたらいい
>>254 そうじゃなくて、質問して「質問は・・ということなの?」的なレスが返ってきた状況のときに 「そうです。解決方法を教えてください」ってその人にレスしても放置されることが多々あるという経験を書いただけ。 別に質問の大半が放置されたわけではないよ。 あと理系の人が書いた本とかマニュアルは難解でも当方は理解しますし「分かりやすく書けや」とはそれほど思いません。 理解しやすい文章を書けと思う人は経験不足です。 でも>>236 と>>240 ってわかりにくい云々の前に 頭がおかしいレベルだよね? 流石に今後の人生のために改善したほうが良くね? 質問の意味を確認される時点でそもそも伝わりにくい文章だと思うけど。 コミュニケーションは相対的なものとはいえ、相手に負担を押し付けるやりとりをしていることに気づいてないのでは。
>>260 一緒にしたら失礼。 難解な本は読み手に前提となる知識が足りないから読み難いが、書くべきことはちゃんと書いてある。 あなたのは書くべき情報が欠落していて単に文章として破綻してるだけ。ついでにその後のコミュニケーションも酷過ぎる。 240見直したけど 「サブフォームFORM2を作って右上の×で消した時」が分かりにくいかな? ※1 form2 = new Form2(); ※2 form2.Show(); 「サブフォームFORM2を作って※1表示した後※2にFORM2の右上の位置の×をクリックしてFORM2を閉じた時」 って書かないと駄目だったのかな?でも回答を教えてくれた人居るし分かってほしいな〜
いや、動作がわからないんじゃなくてお前さんがやりたいことがわからないって話な
小手先に頼らず全部書け 質問に関係なさそうなところも全部書け 関係ないと断言できるだけ知識があるならそもそも質問は生まれない だから頭からケツまで全部書け 全部書いたつもりでも情報は足りないんだから小学生に伝えるつもりで書け
いわゆるバカの壁だねw 彼はたぶん自分の何が問題なのか本気で分かってない。 仕事で取引先とかとメールでやりとりしてる人なら同意すると思うけど、 日本人は案外彼みたいな人が多い。 多いというか、日本人全体を母集団にとるとたぶん90%以上が彼みたいなタイプだw これは(実は案外昔から指摘されてるんだけど)日本の初等教育に問題があるんだよねw 日本の国語教育は何であんなくだらない文学観賞と子供を嘘つきにする作文に偏重してるのか。 思いっきりスレ違いなのでこの辺で
>>260 理系の人が書いている文章は、内容が難解であっても文意は明確で読みやすい。君の文章はそうではない。むしろ逆で、平易なことが上手く伝えられず理解してもらえない。 君が「難解だが上手い文章」を読みやすいということと、他の人が「君の下手な文章」を理解しにくいということはまったく別のことだが、何でそこから他人を経験不足だと断じる結論になるのだろうか? 君の方が、他人とのコミュニケーションについて経験不足なのでは? 他人に理解してほしいというのは自然な欲求だが、相手に労力を求めるのでなく自分が理解される努力をしなよ。 >>266-269 要するに、やったことが無いから何故俺がそれをやりたいことがわからないんだね。 でも回答を教えてくれた人居るし・・。 >>240 は「右上の×で消した時」が分かる人には引っ掛け問題になってるな 単に「サブフォームが閉じられたかどうかを判別したい」なら問題なかった 初心者スレだから質問者の文章が分かり難くてもある程度はしようがないし >>240 もその範疇だと思うけど、>>250 はあり得ない 叩かれまくってるが自業自得だ >>270 何度も書かれているけれどお前の説明が致命的に下手すぎるのが原因 >>260 >質問して「質問は・・ということなの?」 っていうのは、おまいさんの質問文そのままじゃわからないので経験を加味して質問文を解読して少しでも回答できるやつを増やそうとしてくれてるんだよ。 おまいさんの質問文そのままじゃ超絶エスパーがスレに降臨するまで話がすすまないよ。 いろいろな人がいろいろな表現で指摘しているけど、 結局のところのお前が程度が他人とコミュニケーション取るレベルに至ってないって指摘だ 早く人間に達しろゴミクズ
>>270 > 要するに、やったことが無いから何故俺がそれをやりたいことがわからないんだね。 逆、下手に「右上の×で消した時」とか書くからやりたいことがわからないって話 フォームの閉じ方は「右上の×で消す」だけじゃないから知ってる人は特別に「右上の×で消した時」を区別したいのか?とか思うんだよ >>242-243 でも指摘されてるだろ > でも回答を教えてくれた人居るし・・。 >>243 はかなり親切だからいくつかのケースを書いてくれてるけどそれでも > 具体的に何が目的かを書いてもらった方が答えやすいと思う って書かれてる意味を考えなよ >>275 >242 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき? 242には触れたくなかったけど、こんなこと240に書いてないし242は馬鹿なんだと思う。 それをおかしいと思わない275もどうかなと思う。close()で閉じてもIsDisposedで判別できるし 何で気にするか分からないな。ていうかウィンドウの右上にXが無いのかな? >>277 日本語が拙いから推測されただけだろ。エスパー求めてるのに何言ってる。 ここまでいろんな人が指摘してるのに論点が噛み合わないのは逆に逸材なのでは なんかモスバーガーの包み紙のスレを思い出した
初歩的な質問で申し訳ないのですが、c#のガベージコレクション機能は循環参照状態にあるインスタンスも破棄してくれるのでしょうか? 暫く調べたのものの「リークするから弱参照を使う」「GCに頼っていい」「javaなど一部言語は破棄する」など多くの話があり混乱しています より専門的な、ガベージコレクションの内部的な仕組みそれ自体を説明しているサイトは私の知識では理解できませんでした 例えばa→b→c←→dという向きで参照しているインスタンスの組み合わせがあったとして、 aからbの参照を切ってもGCで回収されるのはbだけでcとdの組は残り続けるのでしょうか
でもさぁ、サブフォームをXボタンで閉じた時と閉じてないときの判別方法を聞いてるのに >242 Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき? で選択肢が1個増えて余計ややこしくしてるだけだし 本当に240だけの問題なの?241=242=262の頭に問題は無いの?
じゃあ、もう一回確認な サブフォームFORM2を作って右上の×で消した時 どうすれば(どこを調べれば)よいですか? を A=サブフォームFORM2 B=右上の×で消した で置き換えたとき Aを作ってBのとき どうすればよいですか? って何言ってるのかさっぱりわからないよね? これで世の中渡っていけると本気で思っているのか?
>>281 じゃあ、質問に答えてね サブフォームFORM2を作って右上の×で消した時どうすれば(どこを調べれば)よいですか? >>284 そんなの考慮する必要ない だって彼にもその気はないんだから >>281 いったい何に拘ってるんだ?そこまで自分に非があることを認めたくないのか? >>241 ,242で君の説明が理解されなかったのは別に変でもないし頭がおかしいという訳ではないぞ。>>262 も攻撃的ではあるが頭がおかしいというのとは違う。 誰も>>241 等のレスに無関係に、君の一連のレスに対して、説明が下手であること、態度に問題があること、それについて君がいっこうに理解できていないことを指摘しているだけ。 >>280 そういう単純なケースならc,dともに回収されるので気にするな >>280 GCの方式が参照カウンタ方式というものなら循環参照があると回収されないけど C#(.NET)は世代別GCという方式だから循環参照があっても未使用なら回収される > 例えばa→b→c←→dという向きで参照しているインスタンスの組み合わせがあったとして、 > aからbの参照を切ってもGCで回収されるのはbだけでcとdの組は残り続けるのでしょうか b, c, dが他から参照されていなければ、b, c, dすべて回収される >>277 う~ん、引っ込みがつかなくなってるのか本当に初心者で何を指摘されてるのか理解できてないのかよくわからんけどここ初心者用だから初心者として仮定して… Xボタンでフォームを消すと言うのはどちらかと言うと一般的じゃない(普通のフォームならOk/Cancel/閉じるボタン等を配置するよね)ので「右上の×で消す」と書くとなにか特別なことをしようとしてるのかと思われるの ただ初心者だとXボタンで消すのが当たり前と思ってる人もいるから確認の為に>>242 みたいなことを聞いてるわけ あとそもそもサブフォームの状態を調べると言うのもあまり一般的じゃない GUIだとイベントで処理するのが普通だから>>238 みたいなことを言われる >>280 初歩的な質問じゃない気がするがw まあこのスレとしては「GCに頼っていい」が正解かな >>289 も書いてるけどGC持ってる最近の言語の実装は世代別(と言ってもたいてい2世代だけど)GCになってるのが多く最終的にはマーク&スイープで回収されるのが一般的なので全部回収されると思ってていい Listboxにデータをバインディングするときに、XAMLにBinding記述する方法と、コントロールに名前を付けてコード上からやる方法がありますが、どちらがよいのでしょうか
好きにすれば良いけど転がってるサンプルコードはほぼXAMLでやってるな
GCがちゃんと動いてオブジェクトが解放されたのかは、デストラクタに Console.WriteLine("解放されますた!"); と書いておくと安心できる。 メモリリーク発生の可能性も減る。
>>295 心の安寧が欲しいなら止めないけど C#では、パフォーマンスを低下させるため、プログラムの動作に必要がない ファイナライザを実装すること自体が推奨されないことは、知っておいた方がよい パフォーマンスが低下するのは、ファイナライザの実装されていると GC時にファイナライザキューを介してファイナライズが行われるが このファイナライズを行う際はStop the worldする必要があるためだ ファイナライザを保険として実装した上で、前述のパフォーマンス低下を避けるには 自分でファイナライザ相当の処理をした上でSuppressFinalizeを呼び出しておく必要がある この場合、ファイナライザは実行されなくなり、パフォーマンスの低下も起きない デストラクタにはなるべく頼らないようにしようぜ デストラクタを記述するにしてもDispose()されたときにGC.SuppressFinalize(this)しようぜ >>295 出力の有無でメモリリークに気づける可能性はあるが「発生の可能性も減る」について詳しく 既にスレを荒らした状態になってるから、もうこれで最後にするけど >>290 の上8行「右上の×で消す」という書き込みは初心者が使うフレーズだから 中〜上級者の俺様は深読みして間違えたと解釈したけど 本物の中上級者でも「右上の×で消す」の意味は「右上の×マークをクリック して窓を消す」以外ありえません。そういうわけであなたは 初心者でも中〜上級者でもない別の何かです。 初心者の書く「右上の×で消す」の文が不満で何で 「Xボタンで消したときと、Xボタン以外の何らかの方法で消したとき?」 何で選択肢が増えるんだよw プログラムより国語の勉強しないと。 回答側に回りたいなら模範回答できる質問だけにしてください。 >>298 > 「右上の×で消す」の意味は「右上の×マークをクリックして窓を消す」以外ありえません。 どうしたらこんな頓珍漢なレスができるんだよ… 誰もその意味がおかしいとか言ってるわけじゃないぞw >>299 何でイベントのclosedでは駄目かというと、閉じた瞬間の情報が欲しい訳ではないからです。 窓閉じてしばらくして閉じたかどうか知りたいってことなので。なんでそんなこと知りたいんだよ(怒) って言われても別にいいだろとしか。c#はイベントで処理するからって考えの人にあれこれ 言う義務は俺には無いよ。 昨日今日はどのスレもこんなのばっかりだぜ 金払ってスクールでも通えよって
>>300 別に閉じてるかどうかを知りたいことがないわけじゃなくて珍しいって話な たいていの場合はなにか設計がおかしい可能性が高い まあ俺に影響あるわけじゃないから好きにすればいいと思うけどw >>301 回答は貰ったんだよ。 質問はその後訂正してる。他の上級者は理解して神回答を頂きました。 >>281-285 見たら誰が問題か分かる。284に変なレスしてる奴。 C#はイベントだけで処理すると考える学生がイベントのclosedで解決すると思ったら 解決しないから発狂してキチガイとか日本語が変とか難癖つけたんだろ。 ゴミクズにレスつけてる奴も死なねえか お前のせいで終わらんのやぞ
>>304 質問内容に >>300 中の「閉じた瞬間の情報が欲しい訳ではないからです。窓閉じてしばらくして閉じたかどうか知りたい」 という内容も書かれていたら、最初から正しいIsDisposedの回答だけが得られたかもしれないね 「学生」を罵り言葉として使っているということは社会人かな? その態度を貫けるくらいには沢山エスパーが居る会社なのかな、凄い環境だなあ >>298 え?じゃあ聞くけど サブフォームFORM2を作って右上の×で消した時どうすれば(どこを調べれば)よいですか? FORM2 form2 = new Form2(); オフショア開発してるけどこんな訳わからない質問ばっかで気が狂いそうになるよ エスパー能力欲しいなぁ
>>306 まあ引っ込みつかなくなってるんだろうね 学生云々は不問にするとしても > C#はイベント「だけ」で処理すると考える とか誰も書いてないことを言い出してるしw >>310 なるほど。この無価値な議論の中身を気にして参照してるのはもはや当人同士の循環参照のみだから、>>289 に書かれている通り世代別GCで回収されるわけですな。 引数について質問させてください ref と out の違いってなんですか? どういうときに ref を使うのか、out を使うのか、よくわかりません
>>312 ref引数は、呼び出し先関数で、引数を使うし設定もする場合に使う out引数は、呼び出し先関数で、引数を設定するだけの場合に使う この違いにより、refで渡す引数は初期化しておく必要があるけど、outで渡す引数は未初期化でも構わない .NET Framework中にある実例としては int.TryParse()の場合、文字列の数値を引数に設定するだけで、引数の元々の値は使わないから、out引数でいい 難しい例だがInterlocked.CompareExchange()の場合、引数の値を返すし引数に設定する必要もあるため、ref引数が必要 値型と参照型の違いも知っておいたほうがハマりにくいかも >>314 めんどくさいので out は忘れて ref ばかり使っていますが問題ありますでしょうか!? コンストラクタでテキストボックスの値でフィールドを初期化しようとしたら怒られた これダメなのか…
コンストラクタでテキストボックスの初期化、俺じゃなきゃ見逃しちゃうね
>>317 デザイナーで置いたテキストボックスのインスタンス構築や、各種プロパティの設定は 実際はInitializeComponent()メソッドの中で行われる InitializeComponent()よりも前で値を読もうとしてNullReferenceExceptionが出ているのなら InitializeComponent()の後で値を読めばいい までエスパーした C#でProcess使ったコンソールの標準入出力処理書いてるんだけど printf("値を入力1:"); scanf("%d",&i); printf("値を入力2:"); scanf("%d",&j); printf("%d %d", i, j); みたいな処理のプログラムを動かしたとき、コマンドプロンプトだと 値を入力1:3 値を入力2:4 3, 4 ってなってるのに対して、OutputDataReceivedだと 値を入力1:値を入力2:3, 4 って標準入力が全部完了されたあとにまとめて文字列渡されるのって何でなの?
>>324 試しに全部のprintfに改行入れてみたけど、それでもscanfが全部終わるまでOutputDataReceivedイベント発生しないっぽい。 C#側で標準出力を受け取ってstringに追加 ー> exe側は入力待機 ー> C#側からStandardInput.WriteLineで標準入力 ー>exe側は処理続行 みたいな コマンドプロンプトからのの実行と同じような動きをする処理って、C#じゃどうやるんだろう? stdoutがパイプに繋がってるとprintfは改行があろうがバッファし続ける setbuf(stdout, NULL)しとくか、printf後にfflush(stdout)するか
>>326 setbufでもfflushでも何故か入力待機状態が終了するまでOutputDataReceivedイベントが発生しなかったからあきらめてテキストファイルにログ出力してそれ読み込むことにするわ 教えてくれてありがとう >>313-316 だいぶ返信が遅れてしまいました まとめてですみませんが、親切に教えていただきありがとうございました C#関係ないんだけどシングルトンの使い場所がわかりませぬ こんなクラスがあるとして、 class a{ Dictionary<string, string> hoge; public string getHoge(key) {return hoge[key];} } hogeにはDBから対象の精々100くらいの全レコード取ってきて格納しておきたい 複数インスタンスが必要にはならないようなデータ 外部からのsetは許可しない こういう時ってシングルトン使ってnew時にDBからデータ取得とかしていいのでしょうか? もっと賢いやり方あります?
>>330 シングルトンはテストを困難にするアンチパターンだから忘れていい 単一のインスタンスが欲しい場合はDIを使う >>331 DIとシングルトンは全く別の概念やぞ… >>332 DI使ったことないの? 単一のインスタンスを共有するのは大抵のDIコンテナでサポートされている一般的な機能だよ シングルトン大好き。 状況的に複数インスタンス生まないクラスは必ずと言っていいほどシングルトン。
class名.staticメソッド、static変数を多用。
>>333 お前こそプログラミングしたことないやろ…インスタンスの意味から調べてこい >>334 get setでなんか仕掛けるでもしない限りはstaticでいいよな >>339 ユニットテストでモックしたいときどうすんの? シングルトン的なことがしたいときの今時のやり方はDI使うことだな
>>330 言語レベルで単一インスタンスの強制を保証する必要が 本当にそんなにしばしばあるのかなとは個人的には思うね。 要は共有方法を明確にしておけば十分じゃないかと。 そもそも共有されるオブジェクトを各々が勝手にnewするのがおかしいわけで。 具体的には、例えばWindows FormならVSが自動生成するProgramクラスの staticな読み取り専用プロパティとして実装する約束にしておけば済む 俺もそう思う べき論としてみんな口々に言うけどそこを懸念するとかどんだけ連携がないチームなんだよ
>>341 ただ、DIもシングルトンの一形態という記述は見たことが有る 以前に書いたプログラムを元に加筆修正して別のプログラムを作った時 フォルダもソリューションも別名で保存したいのですが VisualStudioはそういう保存はできないのでしょうか? 今は力業であらかじめ別名フォルダにコピーしたソリューションから作り始め ソリューション名、プロジェクト名、アセンブリ名、空間名 等を書き換えてからプログラムの修正を始めるのですが 時々何かがおかしくなってバインディングが外れたり 破綻してしまうこともあるので 何か安全に書き換える方法があるのかな?と質問しました
>>346 うーんちょっと調べただけだけどヤヤこしそう・・・ それにバージョン管理とは違うんだよなー ワープロを元にデータベースを作ったからフォルダもソリューションも変えて保存したい って感じなんだけど レベル下がったなこのスレも VB.NETとJavaが終わりつつあるから流入してるのか
>>347 慣れたら自然にそんなアホなことをしようとは思わなくなるから気にしなくていい 俺も初心者の頃はそうだったから気持ちはよくわかる >>348 レベルの高い時期があったみたいな言い方だな >>347 ソリューションを変えるのはわかるけど > プロジェクト名、空間名 とかは変えなくても良くね? >>351 そうなの? とりあえずその方がコードも分かりやすいから exeとタスクトレイに表示される名前だけ反映させるには アセンブリ名とアセンブリ情報の中だけでいいのかな 7.2で加わった、条件付きのref式って意味がわかんないんだけどさあ これrefがついていようがいまいが同じように動作しないの??? なんなのこれ
>>353 int a, b, c; void Reset() { a = 1; b = 2; c = 3; } Reset(); ref int x = ref a; x = (true ? b : c); // 普通の条件演算子 x = 4; // xの参照先はaのままなのでaが変わる Console.WriteLine($"{a} {b} {c}"); // 4 2 3 Reset(); ref int y = ref a; y = (true ? ref b :ref c); // 条件演算子の2項目と3項目にrefはあるが、条件演算子の前にrefはない→参照でなく値が代入されるだけ(上と同じ) y = 4; // yの参照先はaのままなのでaが変わる(ここでハマってそう) Console.WriteLine($"{a} {b} {c}"); // 4 2 3 Reset(); ref int z = ref a; z = ref (true ? ref b : ref c); // 条件演算子の前にrefがある→zの参照先が変わる z = 4; // zの参照先がbになったのでbが変わる Console.WriteLine($"{a} {b} {c}"); // 1 4 3 // https://ufcpp.net/study/csharp/sp_ref.html?p=2#conditional-ref もどうぞ この言語は、見かけはC++の兄弟分のような顔をしたVBだな。
>>354 こんな機能追加されてたんだw でも積極的な使い方を思いつかんなあ >>358 最近追加された機能は効率重視でちょっと分かり難いのもあるから、 そういう風に見えるのも分からないでもない。 言語の価値って開発環境も含めて評価すべきじゃない? 自分は別に他の言語でもよい処理をついついc#でやっちゃうのはやっぱりIDEの強力なサポートがあってのことだわ
>>363 これはRuby先輩を呼び寄せるための撒き餌ですか? C#は、CとC++の系列のように外見を装っているが、実際にはVBのほうが似てる言語だろう。 CやC++に対しておこがましさを感じる。
>>363 言語の基本文法のみ良し悪しとか、標準ライブラリまで含めての評価とか、議論の対象をどこまでとすらかは文脈によるだろうし、君が開発環境まで含めた話をしたいというならそういう話題をふって話を進めればいいよ。 言語単体での話をしている時に「いやいやIDEが〜」とか言い出すと話が発散するから、議論の対象は明確に区切って意識した方がいい。 >>358 .NET 1.1 の世界から出てくるな 今の時代、言語だけ語っても意味はないよなぁ 使えるオプソのバラエティとか、コンテナとの親和性とかの評価は避けて通れない
先日windows7からwindows10にOSの入れ替えをしたのですが、win7では動いていたPostMessageが動かなくなってしまいました。 (送り手は自作のソフト、受け手は市販のソフトで、Win7でもWin10でも同じものです) あるアプリケーションに PostMessage(hWnd, WM_KEYDOWN, VkKeyScan("0"), 0); のようにして数字を送信していたのですが、これが反応しなくなりました。 ウィンドウハンドルの取得とかは問題がないようです。 これ以外でも PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0); 等すべてのキーが送れません。 対処法がありましたら教えてください。
正確に言うと(正確かどうかはわかりませんが)、 送り手側でエラーが出るわけではなく、受け手側のテキストボックスを一応選択はしているので、 送り手側としては送っているつもりですが受け手側が反応しなくなっている状態だと思います。 送り手の発信方法を変えればいいのでしょうか?
すいません、解決しました。 管理権限の問題でした。
新しいバージョンたくさんあるけど業務だとどの辺まで使ってるところが多いんだろ valueタプルとかみんな使えてる?
>>374 ようやく4.5.2が許されるようになったよ・・・ >>374 .NET Core 2.2/C# 7.3使ってるよ うちも最近やっと3.5.1縛りが解けて4.5.2になったよ
>>374 うちは.NET Core2.1、C#7.3 次のLTSは3.1だっけ てかVisual Studioをちゃんと更新してればC#のバージョン上げるのは全然問題なくね?
最近?が多くて辛い null条件演算子でも目眩がするのに null合体演算子なんか使われたら頭いたい ところでcoalescingてなんて読むんや
Windows7のサポートが切れれば少しはましになるのかねぇ
>>381 だから「C#のバージョン上げるのは」って言ってんのに とりあえずVSのバージョンだけでもあげてほしいわ 今時2008とかもう
>>385 こっそりあげちゃえよ。だれもお前のことなんかみてないからさ。 2015ってアンインストールしても平気かな。SSDの空きがかつかつで2019インストールするなら2015は消したい
VS2010からVS2017に上げたら変数名に全角の・使ってるところがビルドエラーになったわ。 こんなの変数名に使うなよと思いながらVS2010で名前変えまくった。
フォームから自動生成したイベントハンドラの頭文字が大文字じゃねぇぞって怒られてるんだけどデフォルトでこうなの?
>>388 ユニコードのせいね C#6.0の時のやつ ドット絵エディタを作りたいんですが、win formでやってます ピクセルを描くベースとなるフォームはどれを使用すればよいのでしょうか。
>>391 コントロールなら画像の描画に使うのはPictureBoxでやっとけば調べるのも楽だよ 書き間違いでなく何か別の意味で「フォーム」って書いているのならよくわからない >>391 ピクセルを書くなら Paint だろ。 VIDEO pictureboxかpaintですね ありがとうございます
コントロールとクリックイベントはどのような関係になっているんでしょうか。 コントロールは関数で、そのローカル関数がクリックイベントでしょうか?
インテリセンス表示してみろ vscodeとかならリファレンス表示しろ Control "クラス" って書いてあるだろうが
>>399 クリックイベントなどのイベントはそのクラスのデリゲートな 最初は、関数ポインタ+アルファぐらいに思っておけば 後で騙された〜になるけど
>>400 イベントとデリゲートは全く同じじゃないけどな Javaでnull参照した時にNullPointerException投げてくるうちは現役だろ(適当
List<T>から要素を1つずつ要素を取り出して処理し、例外が起きたらその要素だけリストから消したいんだけどさあ なんかいい手段ってないのかな? 雰囲気としてはこんな感じのが書きたいんだけど・・・・おらの頭じゃうまく書けんだ・・・・ foreach(var o in listOfObject){ try{ 例外処理以外では対処が難しい怪しい処理(o); } catch{ 例外が起きた項目だけlistOfObjectから消したいが、ちゃんとforeachも回って欲しい(); } }
新しいList<T>作ってcatchしたときにAddして foreach終わった後でRemoveしていく
>>410 foreachじゃなくfor (i = listOfObject.Count; i > -1; i--)とかじゃだめなのか 頑張ってforeachにしてもめんどくさくなるだけの気がする var erroredItems = new List<Hoge>(); foreach (var item in originalList) { try { ... } catch { erroredItems.Add(item); } } foreach (var item in erroredItems) { originalList.Remove(item); }
listOfObject.RemoveAll(obj => { try { ・・・・・・なんか処理 return false; } catch { return true; } });
リストに追加前にtry処理したらダメなん? それができないなら俺も415のやり方が良い
public class MyUtil { public static bool Try(Action a) { try { a?.Invoke(); return true; } catch { return false; } }} var b = a.Where(x => MyUtil.Try(() => ThrowableMethod(x))) .ToList();
このスレ的にはぬるぽではなくぬるりなのか。エロいな。
配列のソートのアルゴリズムが難しくて覚えられないんですが 簡単な書き方はりますか?
>>421 プログラミングには適性があります。 貴方には向いていません。 >>410 foreach(var o in listOfObject){を foreach(var o in listOfObject.ToArray()){ と配列にコピーしてから実行するのが定石です そのループの中では既に列挙は終わっているから listOfObjectにAddしてもRemoveしても例外は発生しないし列挙の順番にも影響を与えません >>421 一度リストで書いて、配列だとどう書くだろう?と考える。 アルゴリズムって基本リスト前提だからね。 >>424 いやソートアルゴリズムの殆どは特定のインデックスに対するランダムアクセスにO(N)を仮定するから配列前提だぞ >>421 今時そんなの覚える必要あんまりない気もするけど、 試験勉強ならがんばって覚えるしかないね >>423 そもそも列挙と同時に削除をするって発想が筋悪。 別に列挙後ゆっくり削除すりゃあよい訳で、>>413 がやってるように2つを分離する方が 考え方として自然で分かりやすいと思うけどね 処理と例外が出たものを除去は別の仕事だから処理も分離してるほうが好き
>>415 が質問者のしたいことにドンピシャなのに初心者スレだからラムダ式にアレルギーある奴が多いのかな まず、2分探索を、2分ヒープで作れば? O(log N) 2^10 = 1,024 だから、千のデータを、10回で探索できる。 2^20 = 百万 のデータは、20回! リストは、次の要素しかわからないから、ランダムアクセスは、O(N) になる。 例えば、1から5を見つけるのに、1,2,3,4,5 と、リンクをたどらないといけない O(1)にするには、アドレスは計算式で求められるものだけ。 各要素が4バイト使うなら、1が100番地として、5は116番地みたいに
>>427 覚える必要ないんですか…List型のソートメソッドを使っていても後々問題にならないですかね >>435 基本的なデータ構造とアルゴリズムは一通り理解して自分で書けるようになっておくといいぞ。 標準的な物はライブラリ等で用意されているから実際に業務等でコードを書くときはそれを使うが、独自の問題の解法を自分で考える際に、適切な速度や使用リソース量と工数の兼ね合いで良い方法を選択するには、基本は一通り押さえておく必要があるよ。 必要な時に必要なものを覚えるだけでOK 最初から全部覚えようとしなくてもいいよ
ソートに関しては基本情報処理技術者試験の教科書でも読めばいいんじゃないの
ソートは自分なりに考えてlコードを書いてみてその後にいろいろ学ぶと勉強しやすい
>>440 出来合いのソート処理を利用するなとか誰か言ってんの? 独習3版読んでないとーしろはqueueも実装できないし、回帰とかも理解しないんだろ。
>>440 初心者がソートを勉強しないと自分の書いたコードがなぜ遅いかわからない ソートが魔法か何かで何でも一瞬で並び替えられると思ってしまうと終わり そこから進展はない ソートの回数を減らすように考えたりソート自体を行わないでうまく処理することを学ばないといけない ソートがボトルネックになった時に最適化を迫られたら弄るしかないじゃんね
ソートがボトルネックになったらじゃなくて普通にソートを使うときには必ず気に掛けるべき ループの中にソート入れてるコードがあったりする ループ出た後に一度やればいいだけなのにと思うがそういう所に思いが至らないんだろう
メソッドの中でソートして戻り値返してるのにもらった側でもソートしたりとか 無駄なことをする可能性はどこにでもある 他人に見られたときにこいつ馬鹿だなと思われないようなコードを書く練習をしよう
>>444 それは細かい最適化よりも設計を見直すべきだと思うよ 物事を大域的に見ることができず小手先のハックだけでなんとかしようとするのはプログラマが陥りがちな非常に悪い癖だから注意 小手先のハックじゃなくて基本だろ どこでソートするかなんて基本中の基本
無意味な仕事を無くすように働きかけるのではなく、無意味な仕事を無駄に最適化しようとするのは低学歴な意識高い系プログラマあるある
ソートはプログラムを覚えるために勉強するもので 実用上はライブラリ使えばいい ただ、勉強するネタとしては割と上質なもの
こういうの、listにロックをかけたのに何で同listを使う後続処理がすぐ実行されちゃうの? https://paiza.io/projects/e/EbjQiWv8ebNkW4bbkAY_YQ using System.Collections.Generic; using System.Threading.Tasks; using System; public class Hello{ public static void Main(){ var list = new List<int>(); for(int i=1; i<=1000; i++) { list.Add(i); } Task.Run(()=>{ lock(list){ Task.Delay(10000); } }); Console.WriteLine(list[123]); } } >>455 lockの使い方が間違ってる(>>457 )のと、Task.Delay()の使い方が間違ってる。 Task.Delay()は通常awaitして使うがlockステートメント中では使えないので、Task.Delay().Wait()するか代わりにThread.Sleep()にする。 後、Task.Run()で作ったタスクが実行開始されたか考慮していないから、大抵はConsole.WriteLine()が先に実行される。 ありがとう、このコードだと欠陥だらけなのか・・・・ 使用箇所ごとにLockが必要なのか、それとタスクより先に次の行が実行されてる可能性が高いのは全く気づいてなかった ただ、 >Task.Delay()は通常awaitして使うがlockステートメント中では使えないので、Task.Delay().Wait()するか代わりにThread.Sleep()にする。 っていうのはどういうことなの?Lock外にスレッドを返されちゃうのかしら?
>>460 Task.Delay()だけだと完了を待ってないから、実質無いのと同じ >>460 ピーコックアンダーソンの非同期動画みてみればすぐに理解できるぞ 速度がどうとか言うんだったらc#なんか使うなよと少し思いました
ソートってポインタやmalloc, memcpyとか使ってこねくり回すのが楽しいのにC#だとイマイチだよね
独自に作成したユーザコントロールをdataGridViewのカラムに追加する処理を作成しているんですが 追加したものをそのまま削除するとうまく削除出来ず、一方のユーザコントロールが必ず画面上に残ってしまうんですが なぜでしょうか?原因がわからず悩んでいます どなたか教えてください //@ひとまず空のデータを作成してdataGridViewに格納 DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[] {new DataColumn(), new DataColumn(), }); dt.Rows.Add(new object[] { "", "" }); this.dataGridView1.DataSource = dt; //Aユーザコントロール1をdataGridViewに追加 UserControl1 userControl1 = new UserControl1(); this.dataGridView1.Controls.Add(userControl1); userControl1.Location = this.dataGridView1.GetCellDisplayRectangle(0, 0, true).Location; //Bユーザコントロール2をdataGridViewに追加 UserControl1 userControl2 = new UserControl1(); this.dataGridView1.Controls.Add(userControl2); userControl2.Location = this.dataGridView1.GetCellDisplayRectangle(1, 0, true).Location; //C追加したユーザコントロールを削除→何故かユーザコントロール2だけが残る dataGridView1.Controls.Clear();
ちなみに私が試したのはvisualStudioの2017です
c#だと遅くて無理みたいな高尚なプログラム触ってないからよくわからん cppとc#でどれくれい違うん?
>>471 何するかによるし言語仕様理解せずにコーディングすればC++だろうがC#だろうが遅くはなる 早くしたけりゃどの言語だってコンパイラが吐くコード見ろになるし極論アセンブラしてろになる シビアな演算速度求められるようなソフトじゃなきゃ気にするような速度は無い 個人的にいろいろ開発してて速度面で困ったことはない 特定のアプリを監視して表示された文字(画像)をテキストにするアプリ作ったけど c#だとチェックに1秒、c++とGDIのDLLだと0.01秒とかそんな感じだった c#で作って必要ならc++にコンバートするのでいいと思う
画像処理とかその部分はunsafeとかcだろ。それぐらいは当たり前
別にC#でいくらでも早くできるけどそれしないでC++より遅いってそりゃそうだよねとしか GCの恩恵受けてunsafe使わずセーフティな状態でしょ 突き詰めたC++と突き詰めたC#なら.NETで動く分C#が不利なのは仕方ない 突き詰める必要がない部分で恩恵を受けられるんだから、処理速度以外にメリット感じないなら速い言語やればいい 言語なんて所詮道具なんだから適材適所
sleepが1ms単位指定なのに平気で30msくらいかかったりする
>>477 Windowsの仕様なのでC#と関係なく発生するよ >>473 そりゃあおまえさんのコードが糞なだけや OSにクロックはないでしょうw いやスケジューリングとかタイムスライスとかそんなことが言いたいんだとは思うけど
awaitのついた文の次の文を実行する際に、await前と同じスレッドに帰ってきてもらうことってできないの?
元のスレッドがそういうことできる機能を持ってればできるよ WinFormやWPFのGUIスレッドはメッセージループで実現してて それらの場合はGUIスレッドでawaitすればGUIスレッドに戻ってくるのが既定だし
Pythonでカラー画像をRGBごとに分割して出力するスクリプトを書いたんだけど、 opencv使わずにC#でも出来るのかな? C#でもnumpyみたいなの無いの?
>>485 コンソールアプリ等だとなかなか難しいんかな >>490 Task.WaitAnyとかでできんもんか? >>484 いやいや最初から同じスレッドですからww そもそも同一メソッド内で別のスレッドを起動することはあっても 実行中に途中のスレッドに切り替わるとかそんなのありえへんwww ネタじゃなくて本気で変な誤解してるのか... メソッドの途中で行が変わると別のスレッドで実行されるとかそんな言語怖くて使えないよwww
お前は勘違いしてる GUIとCUIで仕様が違ってる
await/asyncは単なるTask非同期処理を簡易的に書ける糖衣構文 次にawaitの次をどのスレッドになるかはその時の状態次第 GUIではそれでは困るのでデフォルトで同じスレッドが処理をするようにしてあるだけ
訳のわからん勘違いをしてるのはどっちだよ 自信満々で馬鹿じゃないマジで
勘違いをしているのは俺の方だった... 申し訳ないですw
同じスレッドに戻ってきてもらうのに、簡単な方法ってないのかな・・・・
>>505 >>490 を見るに、コンソールアプリで特定スレッドで処理したいみたいだけど、どういった理由? GUIなら、時間がかかる処理は別スレッドで、画面更新は絶対にUIスレッドで、といった使い分けがあるけど CUIで特定スレッドを意識する理由がちょっと思いつかないんだ >>506 WebAPIサーバを作りたく、その中で扱うデータについてトランザクション処理みたいなことをしたかったんです 通信関連でAwaitが多用されている中でも、データのロックをできるだけ減らしたい、またうっかりミスしてロック外に出ないでほしいと思ったんです >>507 それを聞いても、「特定スレッドで絶対に処理したい」が主目標にはならない気がする 「ロックにReaderWriterLockSlimを使っていて、ロック取得と解放は同じスレッドで行う必要がある」のような状況ならまだ分かるんだけど もしもこの状況であるなら、SemaphoreSlimでロックするようにすれば、WaitOneAsyncで待つスレッドと、Releaseするスレッドを別にできる(=間でawaitできる) 万一本当に何か理由があって特定スレッドで処理を続けたいのなら、Taskをawaitするのでなく.Wait()で待つようにすれば、スレッドは切り替わらなくなる > うっかりミスしてロック外に出ないでほしい これが「ロックを取得したけど、解放を忘れる」ことを指すのであれば try {} finally {} や、ラップクラスを作ってIDisposable実装してusing() {} するのが対策になるかもしれない 取得と解放がメソッドを跨いだりするなら面倒くさくなるけど…… 19行目にも同じ構造があるけどそっちはすんなり入ったんだろうか
>>510 メソッドを呼び出したob1のメンバってことですかね? 理解できました。ありがとうございます コンストラクタ内で例外をthrowするのはご法度ですか?
>>514 ご法度ではないし、むしろインスタンスを正しく構築できないなら積極的にthrowしてほしい 例えばStreamReader(String)の場合、ArgumentException系列から FileNotFoundExceptionやDirectoryNotFoundExceptionのIOException系列までthrowする 悪いとは言わないけど、最近はあまりコンストラクタで例外投げるような処理やらなくなったなあ 何故かと考えたら、async/awaitのせいだと気付いた コンストラクタではawaitできないから、昔みたいにコンストラクタでファイル読んだりするのはほぼ無くなった
あとDIと相性が悪い DI使ってると、コンストラクタで例外投げたらそもそもアプリが起動しない
ドキュメントもコンストラクタで投げる可能性のある例外一覧が必要になるけど 実際あげきれなくて手薄になりがち そうなると設計できない 例外の種類でその後の動作をハンドリングしたいときに動かしてみて キャッチの種類を分けるしかない 仕様書に書いてあるこのエラー出せないんすけど? このときの例外増やしてもらえます? →入れた引数から判断できるでしょ?とかキチガイかよって
>>519 例外の種類を完全に把握できないのはコンストラクタに限ったことではないだろ >>520 そもそも例外嫌いなんよ俺 ビジネスロジックだとほぼ全部把握しないといけないのに 丸っと渡されると困るだけじゃん その例外を全部把握しなきゃいけないというのがアホな考えなんだよ 予期できないのはExeceptionとしてまとめてキャッチして処理しとけばなんの問題もないね
>>522 設計書になんて書くん? 俺んとこ例外使うなら設計書に書いてない例外出しちゃうと大変なんだよ MSのドキュメントも全部はねーし マジ厄介 でもお客の言い分もわかる気がするんだよね 流石に何が来るかわかりませんってのはどうなの? って思う 例外の発生要因なんてあらゆるものがあるんだから全部明示しろというお客の主張が不条理 設計書に例外全部明示しろとか要求されたことないね
規約が足かせになってる場合は無視したほうがいい スキル低い人が大昔に作った規約かもしれないし 例外は復旧可能かつ復旧したいものだけキャッチして対処 それ以外はアスペクトでまとめて処理すればいいよ
>>529 .NET Frameworkクラスもコンストラクタで例外投げるのに? >>529 C++のその説は迷信だけど、C#では事実としてawaitができないという重大な制約があるからなあ コンストラクタで例外を投げてはいけないわけではないが、そもそも例外を投げる可能性のあるような処理をコンストラクタでやらせることができるケースが少ないのは間違いない もちろん、ArgumentNullExceptionのようにバグを検出してアプリを落とすことを目的とする例外は別だよ そういうのを除けば、例外を投げうる処理ってのはだいたいIOを含んでいてawaitが必要になるケースが多い
いまだにオブジェクト倶楽部のをベースにしたC#コーディング規約なのかな 10年くらい前の時点でも悪評ぷんぷんだったのにどれだけ時代遅れなことしてるんだ コーディング規約作ってる奴のスキルが低い/古すぎ/多言語の知識しか持ち合わせてなくて クソな規約になってることはよくある コンストラクタで例外吐くのが望ましくないのはC++の話であってC#ではそんなこと全然ない 例外すべて列挙しなきゃいけないのはJavaの話であってC#にもそれを持ち込むのはナンセンス でも大抵規約のクソさ加減と規約作成者・組織の老害度は比例するんだよな 指摘しても直ることはないだろうから「これはクソなコードだ」と自覚を持ったうえで 規約通りのコードを書くしかない
>>527 それって制御できないって言ってるんだよね? その時はtry catchで握り潰せばいいんだけど 君はどうなればいいと思ってるの? ある日例外が起きてアプリが止まっちゃってもそれは時代の流れでしょうがないと思ってるってこと? >>534 予期せぬ例外が起きたら発生箇所のスタックトレースを表示させてバグ修正に役立てるよ 客もその画面キャプチャを送ってくれる Execeptionにはそういうデバッグに役立つ情報入ってるからマジ便利だわ コンストラクタで例外を出すのが妥当なら出すべきだ しかし、例外を出すような責務は得てしてファクトリやリポジトリなど外部のクラスが担うことが多い傾向にある なので正確に言うと、オブジェクトの生成という責務を分離してない汚いプログラムはダメだ、なんだけど それが誤って拡散した結果、コンストラクタで例外を出すプログラムはダメだ、に拡大解釈されてしまったのだろう // コレは生成責務が分離されてないからダメだ class Hoge { public Hoge(int id) { var dto = DB.FindHoge(id); // 例外なげる m_id = id; m_name = dto.name; } // コレは責務が分離されてるからOK class HogeRepository { public Hoge Find(int id) { var dto = m_db.FindHoge(id); // 例外なげる return new Hoge(id, dto.name); // 実装次第で投げたり投げなかったり } // コレもOK 例外投げるが責務としては妥当 class Hoge { public Hoge(int id, string name) { if (id < 0) throw new BadHogeFormat("id"); if (UTIL.NotMatch(@"^H\d{8}$", name)) throw new BadHogeFormat("name"); m_id = id; m_name = name; }
>>533 > コンストラクタで例外吐くのが望ましくないのはC++の話であって そんな話は聞いたことないが? C+の話は C+のコンストラクタとデストラクタの言語仕様をよく理解してない奴の誤解だから もともと正しくない
>>539 お前はさっきから何の言語の話をしているんだ? ダメも糞も引数が不適切なら例外投げるしかないねそもそもw もちろん(注意喚起とか)何らかの意図を持ってあえてコンストラクタではなく ファクトリーメソッドやTryCreateXxxxにする方法もあるけど、 少なくとも誰が考えても引数が不適切なら例外発生が予見できるなら コンストラクタで例外投げて何も問題ない
どこならokとかngとかじゃなくて例外が発生したなら吐かなきゃ駄目 例外の前提を変えちゃ駄目
>>543 基本的になし デストラクタの意味がなくなるから デストラクタって解放し忘れたアンマネージドリソースの解放をするためにある奴でしょ? ただそれだけの処理に例外とか要る?
>>547 どんな想定かわからないし入れたい人は入れればいいんじゃないの C#のデストラクタは実行タイミングが不明な上に 他でキャッチできないからそのままクラッシュする事になるが それが目的なら
デストラクタであろうと例外が発生したなら吐くべき デストラクタで例外なら大体最終的にアプリ落とす結果になるだろうけど 普通に設計すりゃまずデストラクタで例外が必要にはならんとは思うが
そりゃどこでも例外が出りゃ吐くべきだろ。デストラクタで出た例外は握りつぶせとでもいうのかよ
デストラクタの例外は運用に入ったらログ吐いて握り潰すしかない 開発中にどれだけ発見しきれるかが勝負
馬鹿しかいないのかな デストラクタで例外をキャッチすべきかじゃなくて デストラクタで例外を投げるべきかだろ
どうみても例外をデストラクタで握りつぶすなんて話はしてない デストラクタで挙動がおかしな場合そこから自前で例外を投げるかどうかだろ どうしてこんな前提すらわからないのか?
デストラクタで例外投げるのは出来るけど デストラクタの呼び出し元はファイナライザースレッドになる故 デストラクタ以外の場所でキャッチして ログ記録したりは出来ないが、よろしいか?
ところで、C#ってコンストラクタで例外吐いたとき、インスタンスは生成されて戻されるの? そのインスタンスのデストラクタは(実装してればどこかで)実行されるの?
>>554 お前黙ってろよ… > デストラクタで挙動がおかしな場合そこから自前で例外を投げるかどうかだろ そんな話は>>545-546 で既に終わってる 今の話は例えばデストラクタでファイルクローズした時そのメソッドで例外送出されたらどうするかって話な > どうしてこんな前提すらわからないのか? わかってないのはお前だけ >>556 > ところで、C#ってコンストラクタで例外吐いたとき、インスタンスは生成されて戻されるの? されない > そのインスタンスのデストラクタは(実装してればどこかで)実行されるの? されない ファイルクローズなんてデストラクタの仕事じゃないからクラス設計が間違ってる もしそうせざるを得ない理由があるならアプリ終了するだけ アプリ終了されて困るなら正しくクラス設計すればいい
>>559 例えばの話してんだからそこに文句付けるのはお門違い 年甲斐もなく疲れた お前らこんな所で何をやってんだ青瓢箪か?
ここでは例外の話でドンパチ よくのぞいてるVBAスレでもOn Errorの話でドンパチ どちらを見てるのかわからなくなってくる
>>559 > アプリ終了されて困るなら正しくクラス設計すればいい 具体的に書けないなら黙ってろってw デストラクタの中でファイル操作やクローズするのは間違ってるな そこで例外でたらどうしようもない ログ取るのも同じ
メンバ変数を仕様上どうしてもDBから引っ張ってくるデータで初期化するしかなく、 コンストラクタ内でDB処理異常時に例外を吐く処理があります。 この場合コンストラクタ内では何もせず、インスタンス生成後にInit()のようなメソッドを 呼び出してもらうほうが使う側は楽でしょうか?
そもそもC#でデストラクタに処理を書くこと自体が基本ありえないと思うんだけど・・・ リソースの解放なら(まともな構造のソースであれば)Dispose時に済ませるだろうし デストラクタにわざわざ処理を書いて、しかもその処理が例外を引き起こすパターンって 具体的にどんなのがありうるんだ?
>>566 コンストラクタで例外を吐いてください。 >>566 Init()を呼び忘れて使うリスクが出てくるので、インスタンス生成時に済ませたい派 ただDB関連では >>531-532 が言うように非同期処理をしたいだろうから 「コンストラクタはprivateにして、public staticなasyncファクトリを提供」が良いと思う インスタンス生成時に例外出る場合だと変数の宣言と初期化が分離するけど、C#だと初期化し忘れはエラーになるから許容範囲じゃないかな Foo foo; try { foo = CreateFoo(); } catch(BarException) { 何か復帰処理 } // 以下fooを使った処理 器が小さい奴はすぐ引っ込みが着かなくなるから困ったものだ
>>572 どう扱うも何もアプリ終了させろってだけだが? ハンドリングすべきではないものをどうこうしよとしないで >>566 上にも書いたけど、あえてコンストラクタではなくstaticなTryCreateHogeみたいなのだけ提供して 注意喚起する方法もあると思うよ >>567 デストラクタの存在理由はClose/Disposeを忘れた場合のフェイルセーフなんで アンマネージドな共有リソースを占有するオブジェクトの場合はほぼ必須だし、 例外を投げるかどうかはともかく、デストラクタの中で例外的な事態が 発生することも普通にありえるとは思う。(例えばデバイスのクローズに失敗) どんなに丁寧に処理したって完全に例外を対応するなんてことは不可能 599の最後でちゃんとやれば良いokみたいに書いちゃったのが良くなかった ちゃんとやったって無理なことはある
>>577 何がダメ? フェイルセーフって意味分かりますか? 無関係だけど一応答えるよ フェイルセーフって言うのは失敗しても安全な状態に落ち着くこと 例えば信号が壊れても青信号になるんじゃなくて赤信号になるような設計 ファイルクローズは別にフェイルセーフの概念と関係ない tryのfinallyはフェイルセーフじゃないよ
>>574 ああ、お前じゃ無理だったな、すまんw > アプリ終了されて困るなら正しくクラス設計すればいい とほざいてた>>559 、出てこいやー リソースのライフタイムの管理とリソースを使用して何かする責務を別の責務として分離したほうがいい リソースの取得だけを分離する場合はファクトリーパターンが使われる ただしこの場合はリソースを閉じる責務とリソースを使用する責務が同じクラスに混在してしまう 結果としてデストラクタでの例外といった問題が連鎖して発生する これに対応するためにはファクトリーアイソレーションパターンを使う このパターンならリソースのライフタイム管理とリソースの使用を完全に分離できる コンストラクタでもデストラクタでもリソースの開閉に由来する例外は発生しなくなる
デストラクタでたとえば解放忘れの大きなメモリを開放するとしても その前に他で大きなメモリを確保しようとすると死ぬ デストラクタでファイルのクローズ忘れをクローズしようとしても その前に他でファイルを開こうとするとエラーになる デストラクタでいろいろ開放しても何も助けてない 役に立ったとしても偶然であって実質はバグを握りつぶしてるだけ
今までアンカー売ってないけど>>579 向け デストラクタで何か開放してもバグの温床になるだけ >>580 関係あるからw 同じことをくどくど書くのは嫌いだが、デストラクタの存在理由は コードの利用者がClose/Disposeを呼び忘れる、というヒューマンエラーに対するフェイルセーフ。 これは議論の余地はないよ みんなフェイルセーフって言葉を使うけど大体意味間違ってる
ああ、Dispose呼び出し忘れ対策のデストラクタか それなら、自分の場合は ・デストラクタには「Dispose(false)」以外書かない(trycatchもしない) ・Dispose()側が例外を投げるかどうかは解放するリソース次第 ・デストラクタの中に延々とリソース解放処理なりtry-catchが必要な処理なりを書いてるのだとすれば そのソースコードは根本的におかしい
>>585 だから、デストラクタ「で」積極的にClose処理をするんじゃないの。 Close処理は普通にDispose/Closeに書くに決まっているわけだが、 使用者がそれを呼び忘れても最悪GCのお片付けのタイミングで Close処理が行われるようにするための仕組みがデストラクタ ごめんもいっこ ・IDisposableなオブジェクトをDisposeせず使用している時点で実装不備とみなしてよい (フィールド変数だったらポカミスで解放し忘れはあるかもしれないけど、 少なくともローカル変数ならusingを意図的に使ってない時点でコーダーが悪意を持ってると判断する)
>>586 いつまで勘違いしてるのか? フールプルーフとフェイルセーフは別物だからwww >>590 DIに管理させるからusingもDisposeもしないという構成は非常に多い 自分の使ってるコードで完結してるのにデストラクタでアンマネージなどのリソースを 開放するのは間違った使い方 いくら自信たっぷりに書いてるのか知らないけど間違ってる
>>593 知らない他人が何年後かに使うかもしれない だとしたら誤った使われ方でも最低限の安全性を確保できるように作るべき デストラクタでリソースを解放するのはアリ >>582 そんなレスしかできないなら黙ってろよw >>594 IDisposable無視して放置する人を野放しにしないためにもデストラクタは不要だと思うわ デストラクタが呼ばれたか呼ばれないかで意図しないタイミングで不具合が出たりでなかったりするだけだろ そんなの余計に邪魔だろ さすがに自前で生成してない(解放しなくていい)オブジェクトはわざわざ解放しないよ んーと、デストラクタを書かないといけないような処理があるならDispose(false)だけ書く、んだけど なにか間違ったこと言ったかな
>>590 > コーダーが悪意を持ってると判断する) お前の判断なんてどうでもいい MSはそんな判断してないからデストラクタからDispose呼んでるんだろうし 書く必要がないデストラクタなら書かずに済ませるというのは同意 というか普段アンマネージドリソースなんて滅多にさわらないし まともにデストラクタを書いたのはいったい何年前だろう
どうしてもデストラクタ使うなら解放忘れを解放するんじゃなくて デバッグ中に解放忘れてるぞコラということを伝える仕組みを作るほうがまともじゃないかな? 自分の考えは>>584 がほぼすべて >>566 ファクトリーメソッドを作って その中でInitすれば良かろう 解放忘れを本気で潰そうと思ったらさっき書いたようにファクトリーアイソレーションパターンを使う Task ExecuteAsync(Func<ISomeResource, Task> job) { using (var resource = new SomeResource()) { await resource.OpenAsync(); await job?.Invoke(resource); await resource.CloseAsync(); } } サービス利用者には生成も解放もインターフェースを提供しない ExecuteAsyncを通さないとリソースにアクセスできないようにすれば解放忘れを完全に予防できる
>>591 フールプルーフ(ばかちょん)は何をやっても致命的にならない、 というニュアンスの方が強い。 この場合はどっちでもいいと思うけどね >>603 ばかちょんじゃなくてバカヨケだぞ 適当なこと書くなよ >>604 それは直訳で、日本語では昔からばかちょんと言うんだよ 昔からというか昔はかもしれん。 俺もおじいさん先生からしか聞いたことない言葉だし まあポリコレの時代だしね バカヨケ 失敗しないような仕組み バカチョン 誰でも使える
>>592 コンテナdisposeしたら、ついでに中身も自動でやってほしいよな・・・ 横からすまんがさあ DIにMicrosoft.Extensions.DependencyInjection使ってるんだけど、これってコンテナから生成されたオブジェクトって永遠と生き続けるの? どうやって開放するん?
基本的に生成元になったスコープをDisposeするとスコープ管理下のオブジェクトがまとめて消える スコープはCreateScopeで再帰的に生成できる BuildServiceProviderで作ったプロバイダーはルートのスコープに生えてるプロバイダーと考えればいい アッドシングルトンで登録したやつは親子関係にある全てのスコープで1つしか作れずルートスコープと寿命が同期 アッドスコープドで登録したやつは各スコープ内で1つしか作れず作ったスコープと寿命が同期 アッドトランジエントで登録したやつはスコープ内で何個でも作れて作ったスコープと寿命が同期 ASP.NET Coreでは暗黙的に1つのリクエストに1つのスコープを割り当てる 訂正あったらヨロ
Scope = Asp.net用みたいな気になっていて全然知らなかったよ、ありがとう ただDIなしの場合にusing句で書けるようなのはDIありでも簡単にかけそうだけど、オブジェクトを扱う箇所が数箇所に分かれてるときは難しそう・・・・ ScopeをDIコンテナに突っ込んだら突っ込んだでまた問題が増えるのかな・・・・
System.Globalization.JapaneseCalendarでeraを取得しているんだけど Rが入ってこない・・・ Windows10でWindowsUpdateも最新なんだけど、何で入ってこないんでしょう
まずまだアップデートはオプション段階だが、KB4493443入れてる? 正式なWindowsアップデートは5月以降だよ
もう元号とかやめて欲しいよねほんとw いい加減役所も西暦に一本化しろよ
>>616 訂正ありがと 手元にあるのが8.1で全部おんなじかと 皆さんレスどうもです まだ対応待ちってことですね・・・ とりあえずいまはテスト用にレジストリいじれるしかなさそうですね
インデクサーってpublic T this[int I]{}みたいに定義するらしいけどさあ ここに出てくるthisの部分って、this以外も入りうる余地ってあるの?
>>621 無いよ this以外にするとインデックス付きプロパティって意味になると思うけど、c#には無い ありがとう 無いものについてパッとわかるとか驚くぜ
そういうのはQiitaでやれ(Qiita警察激怒)
メモ系ツールなんて山ほどあるのにわざわざこんなところに書くのか 俺こんなの調べてんだぜすごいだろ?みたいな承認欲求なのかね?
初心者ですが、乱数系列の初期化(Randomクラスのオブジェクトの生成)は どこに書くのが正解なんでしょうか? 関数の中に書くと、関数が呼び出されるたびに初期化されるんじゃ?と思えるのでちょっと拙い 関数の外側にプログラムの初めの辺に書いておけばいいのかなあ?とも思うのですが、それもカッコ悪い
依存性 注入で検索したらいろいろ出てきたので調べてみます
>>628 最近のは年月日時分秒を整数にして種にしてるっぽいから、 毎回初期化の方がランダム性が高まるんじゃないかと思ってる。 >>628 仕様次第 乱数の仕様を設計書に明記する必要がある >>628 訳分からん解答が続いてるけど、素直に インスタンス固有である必要があるならコンストラクタに staticでよいなら静的コンストラクタに 書けばいいだけ。かっこ悪いとか、くだらないことに悩むのは時間の無駄。 この場合は不要だと思うけど、静的コンストラクタが実行されるのはそのクラスの 静的メンバーに初めてアクセスされたタイミングだと思ったので、その点は場合によっては注意 >>633 嘘を教えるな そんな馬鹿な使い方をしたらテストできなくなるだろ private staticなら単体テストには支障ないだろ 厳密な再現性を求めるなら本来はシードを固定するべきだが
>>633 そもそも因果関係が逆だよな キモメンが書いたコードがダサい >>636 staticだとコンストラクタで実装を差し替えられないから単体テストの邪魔になりやすいというのは一般論としてはある Randomを差し替える必要があるケースは極めて稀だが、上で述べたように厳密な再現性が求められるケースならありえなくもない >>635 直近のN回が特定の数列の場合のテストとかしにくいだろちったあかんがえろ >>636 テストしねーのかてめー?終わっとるな >>639 横からすまんが、そのテストしにくい例ってのをコードで見せてくれんかな 学習のためにどうか頼むわ >>640 例えばガチャを作ってるとして、0-999の乱数で0-9が出たらSSRを排出する仕様なら、 0と9と10くらいを決め打ちでテストしたくなるだろ? まあそのために乱数生成器をモックしなきゃいけないような設計には再考の余地があると思うが、状況としては普通にありえるだろう だから質問者はそんなこと聞いてないって... どんだけ独りよがりの妄想展開するんだよ
現在時刻とか乱数みたいな制御しにくい値はインジェクションする これ常識な 勉強になったねきみたち
>>644 カッコイイか悪いかだから って問題があってカコワルイ ってつければ質問者の望む回答 >>639 本末転倒だろう。 作るべき物の要件に合わせて乱数生成の挙動を定義して設計するのが優先すべき事項で、その実装をテストするためのコードは必要に応じて用意すればいいだろう。 教えてください。 以下のコードで、x の定義は問題ないのに y の定義だけコンパイルエラーになってしまいます。 == const Exception e = null; const bool x = e == null; // エラーなし、true が設定される。 const Type t = null; const bool y = t == null; // CS0133 y' に割り当てられた式は定数でなければなりません。 == 何が原因でこのような違いがでるのでしょうか。 また、y を定数のままエラーが出ないように修正することは可能でしょうか。 よろしくお願いいたします。
>>652 結果によってtrueやfalseになるようなんは定数と呼ばん >>652 例外はTypeで==演算子が再定義されてるからみたいなので、 const bool y = t == (object)null; 一応これで文句言われないみたい あ、なんか例外とか意味不明なこと書いてるけど突っ込まないでねw
言語仕様の「定数式」の項を見れば別に不思議はないんだけど、 他人の書いたコードでこういう式を見たら一瞬「何の意図でこんな式を書いてるんだ?」 と思っちゃうね。
>>653 レスありがとうございます。 定数のまま、というのは const を付けたまま、という意味のつもりだったのですが、 表現が不適切だったかもしれません。失礼いたしました。 >>654 ありがとうございます!うまくいきました。 ちなみにいろいろ試してみると、 string は == が定義されているもののエラーが出ないようです。 さすがに string は特別ということのようですね。 (ただ、typeof(string).IsPrimitive は false にだったりして いまいちしっくりきませんが。。。) == const string s = null; const bool z = s == null; // エラーなし、true が設定される。 == 何にせよ、問題はすっきり解消いたしました。 適切なアドバイスどうもありがとうございました。 >>657 実際に const を使いたかったわけではなく、 問題の切り分けを行った結果として >>652 のように質問させていただいたのですが、 言われてみれば確かに何がしたいのかわからない・・・。 もう少し元の問題に近いコードを提示するなら、以下のような感じです。 == const Type t = null; if (t == null) Console.WriteLine("t is null."); else Console.WriteLine("t is not null."); // 警告なし const Exception e = null; if (e == null) Console.WriteLine("e is null."); else Console.WriteLine("e is not null."); // CS0162 到達できないコードが検出されました == >>659 いやいやいや、俺はおたくにケチつけたわけじゃないよw const bool y = t == (object)null; こういうのはぱっと見て意図が分からないと言っただけ。 むしろ「マジックナンバー」を避けるのは良い習慣ですよ >>658 >string は == が定義されているもののエラーが出ないようです。 上にも書いたけど、その辺のモヤモヤはC#の言語仕様の「定数式」の箇所を見れば解消するよ。 VSのインストールフォルダに入ってる ひょっとして、ES6あたりの感覚で代入onlyの変数を宣言したくてconstキーワードを使おうとしてるのかなと思ってみたり readonlyなローカル変数みたいな構文ってC#にはまだないんだよね
>>660 > const bool y = t == (object)null; > こういうのはぱっと見て意図が分からない そうですねw 式の意味を考えるなら t == (object)null は ReferenceEquals(t, null) と書くのがわかりやすいんでしょうけど const うんぬんの話の中でこれはダメですし。 ちなみに今ふと思いついて試してみたんですが、 t is null も == の定義には依存しないものの定数扱いにはならないようです。 >>661 ありがとうございます。 言われてみると、そもそも C# と CLR の役割自体が正確に区別できていないような 気がしてきたので、これを機会に勉強してみようと思います。 >>662 質問させていただいたのは、 >>659 のコードみたいに CS0162 の警告が出てほしいのに 出てくれない場面があったからです。 でもたしかに readonly なローカル変数はあってもいいですよね。 あと、引数のみに依存して副作用もないメソッドについて ↓みたいな書き方が許されたらいいのに〜とか妄想しましたw == static class MathEx { public const double Square(double x) => x * x; } static class MyConstants { public const double SquarePI = MathEx.(Math.PI); } == 何度もすみません。。。上の妄想コードは間違いです。 正しくはこちら。 == static class MathEx { public const double Square(double x) => x * x; } static class MyConstants { public const double SquarePI = MathEx.Square(Math.PI); } ==
実質的に定数ならJITコンパイル時に定数に置き換わるからそんなものは要らん
List.Addって、複数のスレッドから同時に呼び出したらデータが壊れる可能性ってあるの?
>>670 スレッドセーフじゃないからlock制御を自前で持つか、System.Collections.Concurrentのコレクション使うべき Queueの出し入れもlock必要だし、マルチスレッドはめんどいよな。 なんでConcurrentDictionaryはあるのにListは無いのか
個人的にはスレッド自体に特定のスレッドからのデータを受け取る処理がある方が好き
別々のスレッドから生成された値を集めたいなら、 各スレッドで別のバッファ(List)に値を書き込んでから最後に単一スレッドでマージするのが定番
スレッドセーフって実はどういう動作するのかよく知らないぜ
>>676 わかる エラーがでなかったらそれがスレッドセーフ!! APIのマニュアルにおいて「スレッドセーフ」という言葉が用いられる場合、たいていは「複数のスレッドからアクセスされても例外を出さない、プログラムがクラッシュしない」というような意味です。 しかしプログラムの目的によっては、例外が出ないだけでは不適切です。 例えば対象が、100個のデータを管理する変数だとします。 その100個のデータに対して、1つ目から順に処理するスレッドと、50個目から変更するスレッドが同時に動いたらどうなるでしょうか? 結果は不定です。 この例では、排他処理 (C#なら lock ステートメントなど) と呼ばれる処置が必要になります。 ってググって出たサイトで拾った
つまり for(int i=0;i<lst.count;i++) { unk un=lst[i]; 略 } みたいなプログラムを組んだとき どっかでいきなり要素をゼロにされて死ぬってことは スレッドセーフだろうがどうだろうが可能性はあるってことだよね ってことを考えるとスレッドセーフである意味ってあんまりなくて 排他処理は絶対実装しないと駄目だよね?ってこと? 誰か違うと言ってくれ
スレッドセーフはメソッド内などで一貫性を保てる作り 排他制御が必要な場面でやってないなど作り手のロジックミスには対応出来るわけがない
スレッドセーフである意味 あるオブジェクトがプロパティAを持っててメソッド内で b=aaa(A)+bbb(A); を計算しようとしても複数のスレッドからアクセスされることを考慮されていなければ 最初のAと次のAが違う場合があり計算結果が期待したものにならないかもしれない スレッドセーフはこういう場合でもちゃんと計算される仕組みを持つ
>>679 その処理は要素数チェックと要素アクセスが分かれているから、間に他スレッドからの処理が割り込み得る System.Collections.Concurrent系のコレクションは、 例えば「要素があるなら取得」のようなまとまった処理がatomicになっているので、他スレッドからの割り込まれない(=スレッドセーフ) どっかのスレッドで詰めて、別のスレッドでループ処理、がやりたいのならBlockingCollectionが楽 >>679 厳密に他のスレッドとの同期を取らなきゃいけないなら>>682 の言うようにBlockingCollection使うか毎回ロックだろうし、 ループ中は他のスレッドによるlstの変更を反映しなくていいならループに入る直前だけロックしてコピーしておけば済む ケースバイケースだよ 一つ一般的なアドバイスをしておくと、並列処理のコツはデリケートな前提をなるべく設けずに極力ロバストな設計をすることだ 要件が許す限りにおいて、少々処理の順番が入れ替わったり処理間の同期が取れてなかったりしても問題にならないつくりにするのが理想 非同期処理は複数のスレッドが同じデータを弄ろうとすることによる不整合は起きないけど コールスタックは複数になるから 同じデータに触ると訳ワカメになる事があった
(||゚Д゚)ヒィィィ!(゚Д゚||) じゃあ>>679 みてーな処理を書いたら スレッドセーフなんて関係なく バグるんだね こぇえええええ じゃなくて終わったわ 今まで組んだもんでテキトーにやった箇所全部終わってる気がする まあ複数スレッドで同時並行処理するときにはそのへん慎重を期さないと 再現困難なバグを埋め込んじゃうからねえ 同時に読み書きする可能性のある変数を安易に書き換え/差し替えしちゃダメ
マルチスレッドの恐ろしさは、たまにしかバグらない事。 ほとんどは正常に動くから、質が悪い。 必ず、バグらないだろ それで喧嘩になる事も多い。 マルチスレッドは、ベテランでもバグるからやめろと言っても、 ほら、バグらないでしょ? と、突っかかってくる その時には、バグらないと言うと、 千回実行しても、バグらないでしょ? と、突っかかってくる。 でも、その時にはバグらない バグる立証をするのが難しい だから、Ruby をやった人は、関数型言語のElixir をやる。 他の言語の人は、何を言っても、そのテスト回数でバグらないと言ってくるから、質が悪い 1万回実行しても、10万回実行しても、その時にはバグらないものなんだよ。 何回バグらないで実行すれば、正しいと認めるのか、と問われても困る
>>687 喧嘩になるのはマルチスレッドのバグのせいではなくお前の頭がバグってるから >>687 マルチスレッドはバグるからやめろってなるのでなく、バグが無いように作れよ。 あと、お前の意見を相手が聞き入れず喧嘩になるのは、お前がいつもバカなことを言うから相手は当然受け入れる気にならず、お前にはその自覚がなくて「何でアイツは僕の言うことを理解してかれないんだウワアーーー」ってなってるからだぞ。 >>687 なんでバグが起こってるのか原因特定出来てなくてワロタ スレッドセーフは単発のメソッドが競合しないだけで 一連の処理についての動作保証をするものではないと マルチスレッドはやらなくていいならそれに越したことはないけど 絶対に駄目というわけではなく 排他処理を組まないことが害悪
排他制御をしなくても安全に並列処理できるように設計することが大事 まずはロック、クリティカルセクション、ミューテックス、セマフォ、といった待ち時間を発生させるタイプの機能を使ったら負け、というルールで設計に挑戦してみるといい 大半の並列処理でそんなものは必要ないこと、それらを使わないほうが圧倒的に設計とプログラムが綺麗になることを体験するべき
ぱられるふぉーってのを使えば良いんじゃね? 知らんけど
>>694 うーん、でも>>679 みたいなこと やった時点で終わりってまともじゃねぇよ コードで一瞬でもすきを見せたら終了みたいになっちゃうじゃん お前の理想はなんかあるんだろうけど 他人が叫ぶスレッドセーフに頼っちゃ駄目だよ アプリの仕様として排他処理を盛り込むべき >>697 だからさ、>>679 みたいなforループ自体をスレッドセーフにする一番簡易な表記方法がlockなんだよ これ以上簡単に書くことはライブラリをどんだけ上手く作っても無理 >>698 それって記述が簡単ってだけでしょ? ロック中にアクセスしたらどういう動作するの? 次回に回すの? 待機して待つの? そういうのってスレッド毎にステータスを持たせて マトリックスで管理しないと制御できてると俺は認めない ジジイだから VisualBasic大先生を怒らせてしまったようだな
>>698 だからさ そんな不安定なロジックを書かなくても良いようにちゃんと設計するのが並列処理の王道なんだよ lockブロックは最初の一回を書くときは楽かもしれんがだんだん難しくなるぞ そのコレクションを使う全てのプログラマが並列性を意識して正確に排他制御をコーディングしなければならない これは実用的なシステムの規模になるとかなり大きな負担になる そもそもロックって論外なんだわ 世の中の並列処理の目的ってのはほぼ2種類に分類されるんだよ @インフラストラクチャ処理中にCPUを待たせたくない A消費コア数を増やして暇なCPUを働かせたい よーするにCPUを無駄にしたくないわけ でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう ロックすると並列処理をする目的そのものに反してしまう なのでロックは基本使わず最後の手段ってわけ この辺りは(やや古い本だが)Microsoft Pressのプログラミング.NET Franework第4版やEffectiveシリーズでも解説されてることだね どちらも良書なので脱初心者を目指しているだろう君達は是非とも読むべきだ
その通り 極端な話、並列処理なんてそれぞれ別のサーバーで実行させりゃいいんだよ それがレイテンシやコストなどの問題で無理なら代わりにプロセスを分ければいい そもダメならリクエストやワーカー単位でスレッドを分け、といった具合に、共有するリソースを最小限にすることを優先する
非同期処理全盛の時代にこれじゃ、世の中やばいコード(or非同期処理のつもりが同期処理されてるコード)だらけだろうな Qiitaとか見ててもやばい奴だらけだ
>>705 今時lockだもんな、笑えない深刻さ お前のコード、めちゃくちゃブロックされてんだけど、って同僚の誰かが教えてやればいいのに見て見ぬ振りは可哀想だ そもそも、世のサンプルプログラムの多くが欠陥品なのが諸悪の根幹なのかもな 劣化コピーしちゃうQiita屋とかコピペプログラマが全部危険なコードを書いてしまう
一番パフォーマンスの良いMutexを使ってる人がどれだけいるやら
>>708 よくねえよw OSリソース消費する処理に速度を期待するな webサーバでスレッド一個で処理を完結するようにはなっていないだろ
Mutexは相変わらずスレッドをブロックするうえにMonitorよりも消費リソースが大きい その代わりプロセスを超えて待機処理を実装できるというものだ よーするにlockよりもっと遅いんだよ
>>712 実務で使ったことないんだろ 黙っとけや 自分だけの小さなアプリしか作ったことないんだろ >>713 もう無理だよ笑わせないでw もっともパフォーマンスの良いミューテックスwwwwwww 実務で使ったことないだろwww 学生さんですかwwww Mutexはロックがいらないスレッド同士でもロックしちゃうのが使いづらいな 回避できるのかはしらんが
そもそもスレッドがとまると言ってるけどCPUのスレッドと.netのスレッド混同してそう
> でもロックしちゃうと問答無用でCPUが何もせずに止まっちゃう これ笑う所?
ロックしちゃうと問答無用でCPUが何もせずに止まっちゃうわけないだろw
え?lock中にアクセスしようとしたらどうなるの?
>>719 うるせーなスマホで長文書くとミスるんだよ スレッドがブロックされるってことだ >>726 lockとMutexのパフォーマンスのベンチ比較して 結果を出せよ それまで書き込みするな >>727 はぁ? 言い出しっぺのてめーがパフォーマンス一番良いミューテックスのベンチ出せや 一番ってんならロックと比較なんてケチくせえこと言わんで他の排他制御機構とも比較しろよ? どう見ても間違っている内容で煽られると人はどう思うのか どう考えても仕組み上Mutexのほうが遅い
>>725 普通に取得できるのを待ってるな まあ、ロックが取得できるまで制御を戻したりはしておらんわ >>730 だよね ちょっと調べてるけど 普通の排他処理組んでおきたくて lock ReaderWriterLockSlim UpgradeableReadLock なんか普通の排他処理したいだけなのに たくさん出てきちゃったぞ これ全部使っても ん?排他処理できてんのか? って疑問が晴れない この言語非同期処理の対応手薄なんだよねまだ 時期尚早として触らんことにしたw LockやMutexは初心者本の範囲内だからしらんのはまずいよ
並列処理なら.netなんだからF#でSTM使え。 何で関数型言語が注目されたんだよ。 並列処理に有利だからだろ。
マルチスレッドなんか無理! だから、Ruby の人は、Elixir を使う 作るのに何百年も掛かる、人類の成果、Erlang VM + Ruby = Elixir。 ErlangVMを、Rubyでラップしたもの Elixirの小プロセスなら、10万プロセスも余裕! パイプラインと同じ 関数型だから状態を持たない。 ただ、データを変換していく関数をつなげていくだけ!
>>736 Rubyにマルチスレッドは、無理! RubyはいわゆるGILといって、同時に複数のスレッドが走らないような排他制御がVMレベルでかかっている これはVM自体がスレッドセーフでないクソ実装であることに起因する制約である もちろんC#にはそんなものはないし、ベンチマークだとErlangより速い Windows8.1/10の令和対応アップデートでWinFormsの画面レイアウトが崩れるらしいね
お前んとこのWinformsいつもレイアウト崩れてんな
>>738 俺のとこも昨日発生した AutoScaleModeをNoneにして対応できたから令和のせいではないと思う >>739 は?崩れてねーし OKボタンが画面外にいって押せないだけだ >>743 デザイナ表示壊れてんのなら.Designer.csの中身書き換えるしかないんじゃね AutoScaleMode.FontをAutoScaleMode.Noneに全部置換したらいい >>744 ありがとう form1.csのデザインのAutoScaleModeをNoneにしたけど何も起こらなかったからあきらめてたけど、そっちを修正したら解決したわ。 >>740 令和を1文字で表すやつのために、フォントをいじったんだが、そのときに既存の文字の幅が変わったらしい なのでまあ、令和対応のせいだと言えばそうなんじゃね つか明日からどれだけ影響出てるか考えると鬱だわ 納期直前でGW返上してる最中にこの不具合対応しなきゃいけなくなってかなりイラッとした
>>748 すげーな。20年以降毎年バージョン上がる予定か 2020 .net5 2021 .net6 2022 .net7 2023 .net8 .net4で停滞した10年とは一体 Java interoperabilityって何なんだよ…
>>748 出来損ないは過去に葬った方が世の中のためだぁ バージョンを頻繁に上げるのは、 成熟していないってことでは?
FrameworkからCoreに移行できないのはどういう場合ですか?
.net frameworkからcoreなんてどこかちょろっといじったらいいだけじゃないの? VB6からVB.netほどの変化はないんだろ?
>>753 そんなワケのわからんもん使こて何かあったらどないすんねん!責任取れるんかい! わりとこれ 別に移行しなくてもいいですけど保守には特別料金いただきまっせ
あと技術的な最大の障害はWebFormsだろう WebFormsは.NET Coreではサポートされてないし、される気配もない 既存資産の移行もさることながら、.NETドカタはWebForms頼りで標準的なWeb開発のスキルを持たない奴も多い 彼らはWebアプリケーションの開発が不可能になり、路頭に迷うことになる
すまんが、Stream型って前の方だけメモリを解放するとか器用なことは出来ないの?
>>761 意味不明 お前の考えはどうでもいいから具体的に何が問題になっているのか、もしくは何が気になっているのか書け >>761 Streamクラスは抽象クラスだけど、MemoryStreamクラスを想定してるのかな。 何となくMemoryMappedFileクラスが要望に合ってるような気がする。 C#でwindowsPCのマイク音量設定を設けたアプリを作りたいんですが情報がいまいち出てきません 今現在どのような方法が推奨として使われているのでしょうか
RPgエディタみたいなタイルマップを配置する機能を作る場合、画像を配置するフォームは何が適切でしょうか? 前にも聞いた気がするんですが、レスを忘れてしまって、、、
モデリングソフトに決まってんじゃん 2Dでもプラグインあるからプロならモデリングソフト 個人製作ならエクセルで代用しとけ ってスレ違うやん
いや、すまん、質問内容取り違えてたw ピクチャーボックスで
>>769 Panelを継承したカスタムコントロールのOnPaint内で描画する事だな >>771 ピクチャボックスですね 毎回忘れちゃうです 質問するだけで自分でやらないから忘れるんだよ >>772 継承させる意味が分からないしOnPaintならPanelでなくてもいい visual studioのhddへのアクセスは制限できますか? 激重です SSDにしろって話ですけどね
>>774 picturebox自体を何個も並べるんですか? picturebox1つの中に複数の画像を並べるですか? >>776 どっちでもいいよ どのみち今の君のレベルで作ってもまともに使い物になるようなものにはならないから、うだうだ考えるより手の届く範囲で経験値を積んだ方がいい 行き詰まる頃にはだいぶレベルが上がってるはずだから、また作り直す 三周目くらいになればまともに作れるようになってるよ 低レベルな質問で申し訳ないのですが、循環バッファって凄い便利だから 全ての配列は循環バッファで実装すればいいと思うのですが、デメリットはあるんでしょうか? Delete Insert Add が全てO(1)で出来るって凄くないですか?
>>779 俺は必要になったことないよ どんなときにいいの? 下手の考えなんとかつってなー 高レベルになってから言ってくれ
>>779 >***全ての配列は***循環バッファで実装 配列のままの方が良い場合もあるが そうしたいならそうすればいい ただし配列以外の構造が必要になるケースでは使えないぞ >>779 トークンリングとイーサネットの 違いを理解してから再度質問を >>779 Addは、reallocationを考慮しても償却定数時間で出来そうだが Delete, InsertがO(1)だというソースをくれ、「末尾」という指定がない以上任意位置だよな? 途中要素をDelete,Insertしたら要素の詰め直しが必要でO(N)になると思うんだが O(N)になるならList<T>で十分という話になる 考え直したらQueueやStackのことを言っている気がしてきた それらのデータ構造がもうあるんだからそれ使えば良いんじゃね
すべての配列は〜というのが考え方が そもそも乱暴で 目的に合わせてデータ構造を選ぶものじゃ
Visual C#で電卓を作ってます。 ある数字ボタンをクリックしたとき、(Button)sender).TextでTextran欄の文字を取得できますが クリックではなく、キーボード入力で同様にしたいのですが、どうすればできますか?
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(@"C:\Users\◎◎\Desktop\volly.gif"); this.pictureBox1.Image = bmp; パスについてなのですが、相対パスは使えないということがあるんでしょうか。相対パスだとパラメータが違うというエラーが出ます。 フォームアプリケーションなので、form1.csにコードを書いています form1.cs img(フォルダ) └volly.gif という構造になっています しかし、img\volly.gif だとエラーになります 何が悪いでしょうか。
>>790 .\img\volly.gifじゃね? デバッガでブレイクしてイミディエイトウィンドウとかで Environment.CurrentDirectory確認すると良いよ
>>790 相対パスとかの以前の問題 実際の環境にimgフォルダが作られているか? *.exeと言った実行ファイルのある場所を見てみたらいい 多分作られてないしその中にgifファイルも作られてない >>790 >>794 を参考にするべきだけどパスの位置を確認したいのなら読み込む前のところで MessageBox.Show(System.IO.Path.GetFullPath(@"img\volly.gif"));//指定しようとしているパスを入れる とでも入れとけばその相対パスがどこを指しているのか絶対パスが表示される 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる >>795 > 相対パスはソースファイルの位置からじゃなく実行ファイルの位置から作られる これは正しくないよ。その時のカレントフォルダが基準。 何もしていなければ多くの場合は実行ファイルの場所と一致するから、結果としてそうなることが多いけど。 >>796 それならexeと同じディレクトリのところから使うには System.IO.Path.GetDirectoryName(Application.ExecutablePath)とか使って必ず絶対パスに直さないと危ないってことか Console.WriteLine(System.Environment.CurrentDirectory); としても出力には何も出てこないのですか? 出てこないです 作業フォルダっていうのはform1.csとは別のファイルのことなんですね
console覗くか traceあたりに出力しないとでは
おっ いけました '2d_engine.exe' (CLR v4.0.30319: 2d_engine.exe): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ja_b77a5c561934e089\mscorlib.resources.dll' が読み込まれました。モジュールがシンボルなしでビルドされました。 これで正しいのかわからないですが、なんで実行ファイルがこんな場所にあるんでしょうか。プロジェクト内にあるのかと思ってましたが
>>798 WinFormsアプリはそのままではConsoleを使用できない Consoleを自分で準備すれば使えるが、通常は使わないかな フォルダ(≒ディレクトリ)とファイルは違うぞ >>800 その絶対パスは実行ファイルじゃない その表示されているところにConsole.WriteLineで書き込んだ内容出てくるはず そのgifファイルは実行ファイルが作られた場所に自動でコピーされてないので コピーされるようにgifファイルの設定帰るしかない
>>800 勘違いしてる。Console使わず、 MessageBox.Show( System.Environment.CurrentDirectory ); ってやってみてよ。 >>800 カレントディレクトリはexeのあるディレクトリとは別物だからです System.AppDomain.CurrentDomain.BaseDirectory を使ってください >>800 プログラムの実行ファイルがある場所とは別に、プログラムの実行時に「どのフォルダでプログラムを実行するか」という概念があるのは分かる? そもそもカレントディレクトリを表示させる必要があるのか? 画像をPictureBoxに表示するのが目的じゃなかったのか
そうなんですが、そのために相対パスを設定したいんです 絶対パスでも別に不自由しないですが、ソフトを作るときは相対パスも使うと思うので
>>790 VisualStudioでF5実行やデバッグをすると(何も設定を変えてなければ)ビルド出力先がカレントディレクトリになる 相対パスでエラーになる原因はビルド出力先にimg\volly.gifが存在しないから なのでimg\volly.gifをビルド出力先にコピーしてやれば相対パスで読み込めるようになる プロジェクトエクスプローラーでimg\volly.gifを右クリックしてプロパティを開いて 「ビルド時のアクション」を「なし」に変更 「出力ディレクトリにコピー」を「新しい場合はコピーする」に変更 これでビルドすると出力先フォルダにimg\volly.gifがコピーされるようになる >>813 実は業務ではカレントディレクトリをあてにした動作はさせない なぜなら制御できないから なので相対パスをプログラムで取得したら 自分が基準とするディレクトリパスと自力で連結させて絶対パスにして使う 画像ファイルがたくさんあって1こ1こ設定するのがめんどくさい場合は imgフォルダを右クリックして同じようにコピーの設定をする そうすれば1つの設定でフォルダごとまるごとコピーしてくれる
OpenFileDialogなどを使うだけでカレントディレクトリは変わるし EXEのショートカット経由で起動する場合は任意のカレントディレクトリ位置に出来るし 他プロセスからWorkingDirectory設定無しで起動される場合も考えたりすると プログラム中で内部的に相対パスを保持するのは構わないけど IO系APIを呼び出す時は、AppDomain.BaseDirectoryなどと結合して絶対パスにしてから渡したほうがいい
なるほど 自分で絶対パスを1つ決めて、そこを起点にすると
関係ないんですけど、コードってどこに保存してますか? 普通にテキストエディタに保存してますけど
>>820 一般的にはGitを使ってGitHubで管理する だけど今の君のレベルではそんなのは必要ない 今の君のレベルで書いたコードなんて一ヶ月後にはゴミであり、大切に保存する価値などない 一ヶ月後のレベルの上がった君から見ればゴミだという意味であり、決して悪い意味じゃないから勘違いするなよ 自分の環境の場合、プロジェクトフォルダ\bin\debug\hoge.exe という場所に実行ファイルが作られるようです Cフォルダの直下あたりに作られるという説明がされちえますが、何か間違ってますかね //カレントディレクトリの取得 MessageBox.Show(System.IO.Directory.GetCurrentDirectory()); 場所ってのは自動的に決まる感じですか
>>823 日本語で 何を言ってるのかさっぱり分からんよマジで >>822 gitサーバーはいろいろ使われてるのにGitHubが一般的は言いすぎだろw この人はソースをテキストエディタに保存していると言ってるから iOS使いなんだろうなと思う
壮大な計画立てて時間だけがかかって何も完成させられない典型的な例
LINQ勉強しててよくわかんないんですけど範囲変数ってあれ事前に宣言しなくていいんですか? マイクロソフトのサンプルとか見ても例えばselect score in scoresとか出てきてscoreどこから出てきたってなるんですけど 全体的な印象ですけど、SQLはちょろっとかじったので列名無いのにSQLっぽく書いてるLINQってなんかしっくりこないんですよね……
>>829 Linqはクエリ式よりメソッド構文の方がとっつきやすい。 クエリ式はSQLに似てるけど、C#の文法に照らすと異質だしな scores.Select(score => ・・・); scoreはどこから出てきたの?ってことならまずはラムダ式からじゃないかな まずLINQとクエリ構文は別物だぞ > select score in scores select句はクエリ構文の最後に抽出するものを指定するんだからこんなのはあり得ない select句じゃなくてfrom句だろう scoreはそのクエリ構文内で使うローカル変数的なものなんだからクエリ構文内で出てくるのが当たり前 列名が無いってのは単に数値の配列とか相手にしてるからじゃね SQLは二次元相手にしか使わないがLINQ/クエリ構文は1次元相手にも使えるからな scoresがclass Score { public string Name; public int Value; }の配列とかなら from score in scores select score.Value みたいに「列名」が出てくる あと重要なことだが、クエリ構文は使いどころがあんまり無い 基本的にLINQには拡張メソッドを使う
>>834 それを学ぶのがその章の目的じゃないの? Nameプロパティの定義は71行目 163行目のshapes[0].Nameは引数で指定された"right"がセットされる。 164行目のshapes[1].Nameは省略時引数により139行目のコンストラクタを経由して"rectangle"がセットされる。 165行目のshapes[2].Nameは省略時引数により134行目のコンストラクタを経由して"rectangle"がセットされる。 166行目のshapes[3].Nameは省略時引数により106行目のコンストラクタを経由して"trizngle"がセットされる。 >>836 そうなのですが でもvalueで代入してないのに何故Nameプロパティが機能してるのか分からなくて… setとgetの中身を記述しなくてもプロパティは機能するのですか? public string Hoge { get; set; } は private string _Hoge; public string Hoge { get { return this._Hoge; } set { this._Hoge = value; } } の省略構文みたいな感じになる (実際にはこの_HogeはC#からアクセスできない名前にコンパイルされる)
>>837 string Hoge { get; set; } は自動実装プロパティと呼ばれるもので、 内容は>>838 の通り。 vsを軽くするセッティングはないでしょうか? 重くなる原因はhddへのアクセスが100になってしまうからです SSDはないです
object 型の変数 x に int 型にキャストできる型(short 型や byte 型など)の値が代入されているときに その値を int 型にキャストしたいのですが、(int)x とすると InvalidCastException が投げられてしまいます。 x に代入されている値が例えば short 型だと分かっているなら (int)(short)x でうまくいくのですが、 この方法だといちいち値の型を調べる必要があるのでもっとスマートな方法があれば教えていただきたいです。 一応自分でも考えてみたところ int.Parse(x.ToString()) なら x の型によらずうまくいったのですが、 値の変換をするだけなのに文字列を経由するのはすごく無駄なことをしているような気がします。 よろしくお願いいたします。
private void Form1_Load(object sender, EventArgs e) { var but = new System.Windows.Forms.Button(); but.Name = "button1"; but.Text = "押せ"; but.Location = new Point(0, 0); but.Size = new System.Drawing.Size(80, 20); Controls.Add(but); } コードでコントロールを追加したいのですが、ボタンは追加されませんでした エラーでも出てくれればいいんですが、エラーは出ません エラーは出ないけど、思い通りに動かない場合、何をヒントにしたらいいでしょうか
ググりゃいくらでも記事出てくるやんけ そいつらは試したの? 自身の環境も書かない、何を試したかも書かない、知識不足なのに勝手に要因を決めつける 初めて質問するならまだしも散々してきといてそれ?
出てきました 場所が悪かったようです ごめんなさい
>>843 そのコードをコピペして試してみたら私の方では問題なく表示されました。 そちらでうまくいかない原因は ・Form1_Load が呼び出されていない ・追加したボタンの上に別のコントロールが重なってしまっている あたりではないでしょうか。 とりあえず Form1_Load が呼び出されているかどうかを確認するために Form1_Load の最後に MessageBox.Show("呼び出されてるよ"); を追加してみて、 メッセージボックスが表示されるかどうかを確認されてみてはいかがでしょうか。 >>844 問題はhddへのアクセスです これは公式のサイトでは、SSDへの交換を推奨しています それ以外の手段はないかなと思って質問しました >>847 ありがとうございます 位置が0 0だと左側に隠れてしまうようでした >>849 解決したようでよかったです。 私も勉強中の身なのでお互い頑張りましょう。 ついでに聞きたいんだけど、このボタンの描画ってUIスレッドで実行されることは保証されてるの?
>>842 Convert.ToInt32 >>851 それがUIスレッドの仕事なんだけど、何を心配してるの? >>852 まさに探していたものです! 最悪の場合、型ごとに場合分けしてキャストするメソッドでも 作ろうかと思っていたのですが、実にスッキリ解決できました。 どうもありがとうございました。 >>838-839 詳しくありがとうございます。 前の章にも書いてありました。自分の勉強不足でした… PCからのサウンド出力をイヤホンが刺さっている刺さっていないに関わらず、内部スピーカーかイヤホンか選択して出すにはどうしたらいいでしょう NAudioを使っていろいろ試してるんですがうまくいきません OS Windows10 サウンドデバイスがSpeakers/Headphones Realtek だとサウンドデバイスがスピーカーとヘッドホンに分かれていませんが、これだと無理なのでしょうか
それは間違った機能だから出来たとしても実装するな イヤホンが刺さってたら絶対イヤホンで出せ
public Form1() { MessageBox.Show("form1"); } private void Form1_Load(object sender, EventArgs e) { MessageBox.Show("form2"); } フォームアプリについてなんですが、この2つ関数の違いはなんですか? タイミング的にはform1関数が先なんですが、どう使い分けるんでしょうか?
>>857 先に言語の入門本やサイトなどを読むべき そうすればクラス名と同一名のメソッドには特別な意味があることが分かるし そのキーワードと一緒にイベント名で検索すれば関連する話題も出てくる 何度も何度も基礎からやれって言われてもずっとやらんのだからもう無理だと思う こういうのが才能とかセンスみたいなもんなのかね
調べた限りでは フォームが作られるときと、作られて読み込まれたとき という差でしょうか
>>855 普通は物理的に切り替えている(ジャックにプラグを差し込むとSP出力が物理的に切断される)から無理でしょうww 恐らくソフトウェアでそれをやってるマシンはないと思うよ >>857 だから入門用の本を読めと何度も言ってんだろうが >>856 >>861>>862 ありがとうございます 無理ですか。。 Audio Switcherなるものがあるのでソフトウェアからの制御もなんとか出来るかと思ったのですが >>864 ハードウェア的にスプリッターを使ってライン出力かヘッドフォン出力を 二股で取り出せるようにする方が賢明でしょうね 100均で売ってるよ プラグが刺されるとオープンになるジャック使ってるのは、プラグが刺されたらスピーカーから音が鳴らなくて良いものだけだろ。 テレビでも最近のはそんなジャック使ってないわw ジャックにプラグ刺されてるか判定してるだけ。 お前はどんなラジカセで書き込みしてるんだ?
>>869 確認してから書いた方がいいよ。 特殊な業務用とかフィリップスみたいなところが作ってる超高級品は知らんけど、 大概のTVはそんなもったいぶったことしてないの。する意味がないでしょ >>870 WindowsだとUSB経由とかS/PDIDとか有るし、そこに必ずSPが繋がっているとも限らないから 音声の切り替えはソフトでやっているのよ イヤフォンの切り替え機能って俺の記憶だとWindows10 が最初だよ >>870 あと、Windowsの機能で切り替えるのは標準の出力先だけだが、当然APIで標準以外の出力先に音声流すことも可能だ >>871 それはオーディオデバイスが複数ある時にどれを有効にするかって話と違うの? あと、高級品のサウンドカードだと複数系統の出力があってそれぞれボリュームコントロールが ついていたりするかもしれないが、そういうの使ってるならこんな質問してないと思うよ。 普通に考えてオンボードのサウンドしかついてない普通のPC前提の質問じゃないの? なんかググるとM/BによってヘッドホンとSP(ライン出力)が排他になってるのと そうでないのがあるみたいだけど、質問者みたいに排他になってる場合は普通は 物理的に切り替えてるはずなんで、ソフトじゃどうにもならんと思うよ
>>873 普通のパソコンだってUSBのデコーダー付けられるだろ それがどうやって物理的に切り替えられるのか考えてくれよ それと俺は音楽プレーヤーソフト作ったこと有るから、恐らくあんたよりは詳しい >>875 USB接続のオーディオデバイスを使ったら M/Bのヘッドホンからはそもそも音が出ないと思うんだけどね普通は 複数のオーディオデバイスを同時に有効にして同じ音を出す、 なんて芸当できるんだっけ? 光出力が付いてる場合は排他にできるわけないね確かに。 でも質問者がそういう環境ならこんな質問してないわな
>>876 Windows10は普通にイアフォンとその他が切り替わるように仕様変更されている 勿論それがHDMI経由だろうがSP端子だろうが光出力だろうが >>877 つかWindows95の頃から、音声出力はソフトで切り替えるのが常識だよ ハード的に変えるほうが寧ろ珍しい >>878 いやちょっと何を言ってるのか分からないんだけど、 ハードウェアがそうなってなきゃソフトがいくら頑張っても手も足も出ないのよ 質問者の環境はSP出力とヘッドフォン出力が排他的になってる環境で、 その切り替えは普通はメカ接点で物理的に行われるものだから、ソフトじゃどうしようもないよ >>880 少なくとも今はHDMI経由でテレビから音声流す機能は標準搭載されているから 年代物のパソコンを除けばデジタル音声出力機能は標準搭載だよ それをどうやってイヤフォンと物理的に切り替えるのか考えたら無理だと判るでしょ Windows10から自動切り替えはできるようになっているけど、当然ソフトで制御しているし それをVista以降はAPIとしてプログラマーが簡単に触れるようになっている いやちょっと何を言ってるのか分からないんだけど、 メカ接点で物理的に行われるが、 SP出力とヘッドフォン出力が排他的になってるのは今時はソフトの設定でしょ?
>>881 だーから、その場合は普通はM/Bのヘッドホンからは音出ませんよ。 M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってるだから >>882 今時も糞もないってだからw M/Bのヘッドホン端子はオンボードのオーディオデバイスに繋がってて、メカスイッチでそれを ライン出力(スピーカー)と切り替えてるだけなので >>882 サウンドミキサーってのがWindows95には既に付いていて、それで音声の切り替えとかマスターボリュームを制御していたから XPまでのソフトでは大本の切り替えとか不可能だった しかしVISTAから全てソフトから見えるようになって、ソフトごとにどの出力から出すなどの指定ができるようになった 同じパソコンでイヤフォンとスピーカーから違う曲を流すことさえやろうと思えばできるんだよ >>884 Mixerを制御するAPIがVISTA以降に公開されたんだよ C#から制御したことも有るし >>885 えーっとですねえ、だからそんな芸当はHWが対応してなきゃできないんだってw 標準的なPCのオンボードのオーディオデバイスはオーディオ出力が一つしかないので、 そんな芸当は逆立ちしても不可能ですw 物理的な出力端子の数 = オーディオ出力の数 ではないのよ。 >>>887 Windows10なら右下のスピーカーマーク押して「サウンド」ってのを選択すると出てくるダイアログで 「再生」ってタブを押せば、そのパソコンで使える音声出力先が出てくるが 出力が1つしか無いなんて化石のようなパソコンは見たことないわ 最低限スピーカーとイヤフォンとHDMIぐらいは付いている >>889 まあどっちにしろそれは質問してる人が聞きたいことと違うと思うよ。 質問者はアプリごとに別々のチャンネルに音を出したいって言ってるんじゃないからね。 >>890 だから何度も同じことを言わせないで。 既定のオーディオデバイスは一つしか選択できない だからHDMIのモニターから音を出すと普通は同じ音をM/Bのヘッドホン端子から 出力することはできないの >>891 いや、889はイヤフォンが繋がっていてもスピーカーから音声を流す機能そのものだ 何も読んでいないだろ >>892 HDIMIとパソコンのイヤフォン端子をどうやって物理的に切り替えるんだよ 普通にソフトで切り替える機能が標準でついているんだよ >>893 どこをどう読んだらそうなるのw だから、何度も言うけどHW的に排他的になってたらソフトじゃどうにもならないってw >>894 ソフトで切り替える? 何を言ってるのか分からないよ。 単純な質問だ。 君のPCではHDMIのモニタを既定のサウンドデバイスに選択している時に、 同じ音をM/Bのヘッドフォン端子からも聞くことができるのかい? できないってw 今まで知らなかったのか >>895 string audioSelector = MediaDevice.GetAudioRenderSelector(); var outputDevices = await DeviceInformation.FindAllAsync(audioSelector); foreach (var device in outputDevices) { var deviceItem = new ComboBoxItem(); deviceItem.Content = device.Name; deviceItem.Tag = device; _audioDeviceComboBox.Items.Add(deviceItem); } コンボボックスで指定した出力先に音声を切り替えているだろ 頭弱いねぇ >>897 何を言ってるんだこの人。 その出力先っていうのはオーディオ出力のことであって 物理的な出力端子じゃないんだってば どんだけメカ音痴なのマジで >>896 それは質問と違うこと言っているよね 音声出力を標準以外からソフト制御で切り替えられるんだよ VISTAからね もうボケ老人の繰り言だけど、だから普通のPCのオーディオ出力端子っていうのは ヘッドホンとライン出力と2系統あるように見えるけど、実態は1つなんだよw 2つの別々のADCに繋がってるわけじゃないの。同じものをアナログ的に分配してるだけなの
>>900 だからね、質問者はそんなこと聞いてないのよ >>899 そこのdevice.Nameってのが「ヘッドフォン」だったり「HDMI」だったりするんだよ あんたが知らないだけで10年前からソフトで切り替えられる Realtekのオーディオデバイスならイヤホン端子とスピーカー端子はH/Wで排他になってないわな 設定で排他にするか切り替えられたはず
話し合ってるレイヤーが違うんだよ いい加減気付いて質問者のためになるレスをしてくれ 質問内容が不明瞭なら明確になる質問を返せ 想像で質問内容を決めつけて延々と罵り合ってるだけで肝心の質問は何一つ進展してないぞ
>>903 もうダメだなこの人。 だから何度も言うけど、それはHWが対応してないとできないのよ。 何度も言うけど、普通のPCのスピーカーとヘッドホン端子は同一のオーディオ出力に繋がってるの。 別々のオーディオ出力に繋がってるんじゃないの。わかる? 次いでいうと、これも何度も書いてるが、それ質問者の質問と全然関係ないの。 質問者さんの質問はスピーカーとヘッドホンが排他的に切り替わるのが気に入らないから ソフトで何とかできないか、だから。 何度もいうけど、普通のPCではHWで物理的に切り替えてるので不可能です >>906 パソコンにHDMIは最低限付いているから、音声出力が1系統しか無いパソコンなど滅多にお目にかかれません しかもUSBとかBluetoothとか音声を出す場所はいくらでもあるんだから、最低限ソフトでオフに出来ないと問題になる つか1系統でイヤフォンとスピーカーが物理的に切り替わるだけしか出来ないパソコンって存在するのか? 例えば何ていうパソコンのことか具体的に名前出してくれ 落ち着け。どっちも正しい。 イヤホンジャックの接続を確認して他のサウンドデバイスを黙らせるハードウェアも有る。 時々出力先間違えるドライバが有るな。 再生デバイスの先でイヤホンジャックが物理的にスピーカー出力を切る装置も有る。 後者はソフトではどうしようも無い。
>>907 何がいいたいの? まったく意味が分からん 質問者さんが何を聞いてるか、もう一度落ち着いてよく考えてよ >>909 イヤフォンつなげたままスピーカーから音声を流すAPIは存在するってことね SPとHPが共有だったとしても、他に出力する先は色々有る 何故物理的に不可能だと言い切っちまうの?APIが存在するのにさ >>910 意味が分からないよ。 だから、誰も最初からそんな話してないって 何で一人で「アプリごとに個別の出力先に音声出力が可能か?」なんて 誰も問題にしてない話をしてるのよ どっからそんな話が出てくるのマジでw ほんと意味わからんよ
>>870 たいがいのテレビもそうなってるよ。 確認してみた?自分ちのテレビ。 >>876 それをやるのがオーディオミキサーじゃん? 昔ならsndvol32とか。 >>916 なってないよ。 そういや思い出したけど、大昔のテレビはイヤホンジャックが2つあったんだよな で一つはSPの音を消さない仕様になっていた 普通に考えてその方が単純明快で親切だ ヘッドをンを差し込んでも音を消さないためには、何とかボタン押して設定画面出して この項目のアレを.... なんてまどろっこしいしヲタしか使えないしソフトもハードもコストがかかる >>917 何か根本的に勘違いしてるんじゃないの? それは同一のオーディオデバイスの複数の音源のボリュームを調整するんだよ。 複数のオーディオデバイスの音量を調整するんじゃないの。わかる? 他の人も書いてたと思うけど、ウィンドウズは複数のオーディオデバイスを持てるが、 既定のデバイスに設定できるのは一つだけだ(当たり前だけど) >>918 それイヤホンジャックじゃなくてLINE出力のことだろ? こんなところまでLINEが進出してるとは、韓国もやるな
>>919 TVはどうだか知らんけど、なるほどPCではソフトでヘッドフォン接続を検出して SP出力を制御してるタイプもあるんだな。 これは素直に知らなかった。 自作用M/Bだとリアパネルの端子の接続をソフトで検出するタイプは昔から結構あったけど。 質問した人のPCがこういうタイプならドライバのユーティリティーで設定変えたら解決するね。 ノート含めメーカー製のPCの大半はこういうタイプじゃないと思うけど wpfとwinformどちらがいいのですか? C#で検索するとほとんどはwinform向けのコードのような気がします 大部分は同じですけども
>>855 です 色々と議論頂いて申し訳ないでした しかしとても参考になりました ありがとうございました まさに>>919 がやりたいことなんですが、自分がサウンドデバイスとAPIの関係性がいまいち理解不足な気がしますのでもう一度しっかり見直してみたいと思います >>923 絶対winform wpfは資料なさすぎて辛いよ >>923 どっちでもいいけどまあとっつきやすいのはWinFormじゃない >>923 シンプルな画面ならwinformsかwpfどっちでもいい 複雑な画面ならwpf一択 >>923 デスクトップアプリ自体が時代遅れだから、基本的にはどちらもお勧めはできない。 しかしちょっとしたツールなんかで便利なことはあるから、覚えておいて損はないだろう。 その意味では断然WinFormsがお勧めだ。 WPFは習得コストが高く、デスクトップアプリという死んだ技術に対しては割に合わない。 確かに調べた限りではwinformのほうがサンプルが圧倒的に多いですね wpfは初学者にはきついかも、、 >>928 デスクトップアプリが時代遅れとはなんのことでしょうか 毎日使ってますが 横で申し訳ないのだけど、WinFormsが枯れて次に学習すべきは何がおすすめ? とりあえず簡単な業務用アプリくらいは作ってますが(データベースと連携あり) ASP.NETとかWebアプリに進むと、セキュリティの面でまた何かと面倒なのかなと躊躇しちゃう
>>924 Realtek HDオーディオマネージャーでやってるのは、 おそらくOSのAPIではなく Realtekのドライバーの独自機能を直接呼び出してると思う wpf始めたんですが、画像の表示について教えてください コントロールに紐付ける方法がわかりません private void Window_Loaded(object sender, RoutedEventArgs e) { var bt = new BitmapImage(); bt.BeginInit(); bt.UriSource = new Uri(@"C:\Users\◎◎\Desktop\programing\vs_project\0_practice_project\tilemap_wpf\tilemap_wpf\img\1.png"); bt.EndInit(); } ここまでは調べられたんですが、コントロールに紐付ける方法がわかりません コントロールの種類はimageで名前はimage_mです。 資料少なめですね
>>934 このbegininitで初期化をコントロールの初期化をするという説明がされていますが、なぜこの作業が必要なんですか? winformにはなかった手順なので、存在する意味がわかりません 自己解決したなら解決手法を書きましょう winformとwpfは異なるものなので手順も異なります
忠告されているのにわざと自分から沼にはまって助けを求める人
>>934 URL指定するだけで良いならnew BitmapImage(URL);でいいよ ロード前に色々プロパティ設定したいならBeginInit使う 固定の画像ならXAMLで<Image Source="URL"/>だけでもいい >>932 ありがとうございます 引き続き色々と調べてますが未だ出来ていません NAudioを使ってオーディオデバイスの取得をしていて、自分のイメージでは オーディオデバイスをスピーカーとヘッドホンのそれぞれで取得して、どちらかを既定のデバイスとして設定してあげれば出来るのかな?と考えてたんですが デバイスがSpeakers/Headphonesの一つしか取得できないのでPC側の出力状態になっているものしか制御できないのです この辺りがHWの制約によるものなのかドライバの設定でなんとかなるのかを現在調査中です >>940 引数 1: は 'string' から 'System.Uri' へ変換することはできません。 new BitmapImage(url) で指定するとこのエラーが出ますが、参考ページありますか? >>942 あなたは逆引き本を買って、コードをコピペしなはれ それがええで なんで一度uri変数に入れないといけないのですか?
treeviewのノードなくなってますけどどうやってノード追加するんですかね
URIとやらに便利なメソッドがいっぱいあるんだろう。知らんけど。
>>949 そういうものなんですね 型を適切なものにしないといけないと uriオブジェクトを作るという表現で少しわかった気がします >>949 例えば、urlが文字列とご認識されないようにこういう宣言をするってことでしょうか? >>952 突然Rubyを持ち出すこいつはこの板の名物キチガイだから触っちゃだめ ちなみにRubyはゆるふわ言語だからURIを受け取る引数に文字列を渡してもだいたいなんとなく動くようになっている(そして後になって予期せぬ不具合の原因になる)場合が多い オブジェクト指向では、何らかのクラスのオブジェクトを作って、操作するのが基本 例えば、URI オブジェクトを作っておけば、 そのクラスに定義されている、便利なメソッド・プロパティなどが使える それと、C# みたいな静的言語では、 引数・戻り値などに型が指定されていたら、その型を使わないと型エラーになる!
websoket通信でデータを受信して、それを別プロセスに渡すような処理をしたいのですが、MemoryMappedFileを使って共有メモリを見に行く方法は悪手でしょうか? 推奨されるプロセス間のデータのやり取り方法を教えてください。
WCFもどうなることやらな気はするけど。 俺は微妙だと思ってるから、よくembedioでhttpサーバ立てる。
WCFはやめとけ 今のところWCFサービスに.NET Coreが対応する予定はないから、このままいけば.NET 5では消滅する
>>954 例えばurlの場合整形したりしやすいってことですね ツリービューに小要素を追加したいのですが、wpfでは rootNode.Nodes.Add(childNode1) のように、nodeプロパティでの追加は出来ないようです 何を使うか教えてください あとマイクロソフトのリファレンスでwpfのリファレンスってあるんでしょうか? 調べてるんですが、情報がごっちゃな気がします
embedioならwebsocket鯖にもなる。 他の言語から叩きたくなったときに超ラク。 >>963 なんで? クライアントがイケてないから? >>962 magiconionでは? >>964 解決したました 英語サイトで調べたほうが遥かにわかりやすいですねw そもそもプロセス間通信をしようと思ったのは、websoketでデータ受信が忙しいからなんですが、マルチスレッドでも問題ないでしょうか?
パソコン内でのプロセス間通信ならIPCがお手軽かと思いますわ
>>967 それなら普通にマルチスレッド(というかTask)で良いと思うけど。 あ、話題のどちて坊やだったのか... 質問スレだから質問するのは全然OKだと思うけど、 何言ってるのか他人が理解できない質問とか、少しも自分で調べた形跡が感じられない 質問とかはちょっとマナー違反だよね
>>974 そうですね エクスプローラのツリーのように、フォルダを表示したいので フォルダに割り当てるパスを取得するにはドライブの情報が必要ですよね?
>>975 彼はおそらく調べようと思えば調べられるし 一人で進めようと思えばおそらくできるんだろう ただ、ものづくりに必要な孤独を楽しむ能力がないんだろう これまでたどってきた人生に依存する 人によっては精神を病んでしまうのでさっさと辞めることをオススメする 俺らの何がパンピーと違うかといえばおそらくそこ 転載制限が明示されないfreeは著作隣接権の放棄だと思っていました コメント機能まで考えなかったのでサーバー管理者の立場になることは考えが至りませんでした ファイル倉庫ではつまらないですよね 他人の著作物を基本にサイトを作ることは悩ましいですね 解説とリンクを書くだけならば問題が無いはず、と… いろいろ参考になりました ありがとうございます
>>979 何がしたいかですが、「エクスプローラのようなフォルダツリーの機能を作りたい」です >>983 それならツリーに必要な情報はそれぞれのディレクトリパスやファイルパスでドライブの情報じゃないのはわかる? エクスプローラーもそうなっているはず >>984 どうやら見当違いなことをしていたみたいですね ディレクトリパスで調べてみます >>988 Windows API Code Packって拡張をプロジェクトにインストールすると幸せになれると思うんだ あなたのやる気次第だが PowerShell のGet-PSDrive だろ
>>986 乙。そしてこっちはもう埋めよう docsはもうテンプレに入れた方がいいな。ただし英語の方w 日本語版は翻訳酷いだけじゃなく情報抜けてるの見たことある
mmp
lud20190918191408ca
このスレへの固定リンク: http://5chb.net/r/tech/1551908141/ ヒント: 5chスレのurlに
http ://xxxx.5ch
b .net/xxxx のように
b を入れるだけでここでスレ保存、閲覧できます。
TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「ふらっと C#,C♯,C#(初心者用) Part142 YouTube動画>1本 ->画像>9枚 」 を見た人も見ています:・ふらっと C#,C♯,C#(初心者用) Part132 ・ふらっと C#,C♯,C#(初心者用) Part138 ・ふらっと C#,C♯,C#(初心者用) Part141 ・ふらっと C#,C♯,C#(初心者用) Part144 ・ふらっと C#,C♯,C#(初心者用) Part143 ・ふらっと C#,C♯,C#(初心者用) Part141 ・ふらっと C#,C♯,C#(初心者用) Part140 ・ふらっと C#,C♯,C#(初心者用) Part136 ・ふらっと C#,C♯,C#(初心者用) Part139 ・ふらっと C#,C♯,C#(初心者用) Part129 ・ふらっと C#,C♯,C#(初心者用) Part146 ・ふらっと C#,C♯,C#(初心者用) Part145 ・ふらっと C#,C♯,C#(初心者用) Part133 ・ふらっと C#,C♯,C#(初心者用) Part130 ・ふらっと C#,C♯,C#(初心者用) Part137 ・ふらっと C#,C♯,C#(初心者用) Part134 ・ふらっと C#,C♯,C#(初心者用) Part134 ・ふらっと C#,C♯,C#(初心者用) Part131 ・ふらっと C#,C♯,C#(初心者用) Part135 ・ふらっと C#,C♯,C#(初心者用) Part152 ・ふらっと C#,C♯,C#(初心者用) Part147 ・ふらっと C#,C♯,C#(初心者用) Part151 ・ふらっと C#,C♯,C#(初心者用) Part119 ・ふらっと C#,C♯,C#(初心者用) Part148 ・ふらっと C#,C♯,C#(初心者用) Part128 ・ふらっと C#,C♯,C#(初心者用) Part120 ・ふらっと C#,C♯,C#(初心者用) Part121 ・ふらっと C#,C♯,C#(初心者用) Part148 ・ふらっと C#,C♯,C#(初心者用) Part150 ・ふらっと C#,C♯,C#(初心者用) Part160 ・ふらっと C#,C♯,C#(初心者用) Part155 ・ふらっと C#,C♯,C#(初心者用) Part157 ・ふらっと C#,C♯,C#(初心者用) Part154 ・ふらっと C#,C♯,C#(初心者用) Part156 ・ふらっと C#,C♯,C#(初心者用) Part127 [無断転載禁止]©2ch.net ・ふらっとC#,C♯,C#(初心者用) Part88 ・ふらっと Q#,Q♯,Q#(初心者用) Part 1 ・くだすれC++/CLI(初心者用)part2 ・ふらっと C#,C♯,C#(議論用) ・Webサイト制作初心者用質問スレ part251 ・Webサイト制作初心者用質問スレ part248 ・Webサイト制作初心者用質問スレ part248 ・初心者用・人形の素朴な疑問Q&A Part18 ・Webサイト制作初心者用質問スレ part252 ・Webサイト制作初心者用質問スレ part239 ・Webサイト制作初心者用質問スレ part247 ・Webサイト制作初心者用質問スレ part253 ・Webサイト制作初心者用質問スレ part244 ・【Esperanto】エスペラントの初心者用スレッド【国際補助語】 parto1 ・教えて、鯖管理の仕方(初心者用) ・ブラックなベンチャーについて語るスレ(初心者用) ・人狼ジャッジメント初心者スレ part12 ・PS4】ARK: Survival Evolved 初心者 part12 ・【プリコネ】プリンセスコネクト! Re:Dive初心者・中級者スレ Part142 ・【プリコネ】プリンセスコネクト! Re:Dive初心者・中級者スレ Part122 ・立憲民主党(政治初心者用)☆1 ・くだすれFORTRAN(超初心者用)その6 ・くだすれFORTRAN(超初心者用)その7
12:06:04 up 19 days, 13:09, 0 users, load average: 7.29, 8.38, 8.83
in 0.054143905639648 sec
@0.054143905639648@0b7 on 020202