ふらっと C#,C♯,C#(初心者用) Part147
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512 次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為) 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。 他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、 ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。 内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。 なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。 C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください >>980 を踏んだ人は新スレを建てて下さい。>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。 ■前スレ ふらっと C#,C♯,C#(初心者用) Part146 https://mevius.5ch.net/test/read.cgi/tech/1576069931/ ■関連スレ C#, C♯, C#相談室 Part95 https://mevius.5ch.net/test/read.cgi/tech/1508168482/ ■コードを貼る場合は↓を使いましょう。 http://ideone.com/ https://dotnetfiddle.net/ ■情報源 https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index https://docs.microsoft.com/en-us/dotnet/standard/class-libraries http://referencesource.microsoft.com/ ・Insider.NET > .NET TIPS - @IT https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html ・DOBON.NET .NET Tips https://dobon.net/vb/dotnet/index.html VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured 単にマクロ的に短く記述したいってことなら使用先のcsファイルの一番上にこれ書いとけばいい using static c = Properties.Settings.Default.Counter; Console.Out にデータを書く A.exe (ソース A.cs がある) と Console.In からデータを読み込む B.exe があるとき A | B で B.exe 側で A.exe が書いたデータを取り出せるところまでは確認しました そこで A.exe の中から ProcessStartInfo psi = new ProcessStartInfo(){ FileName="B.exe", Arguments="", RedirectStandardInput=true, RedirectStandardOutput=false, RedirectStandardError=false, UseShellExecute=false, CreateNoWindow=true, ErrorDialog=false}; Process p = Process.Start(psi); Console.WriteLine("test"); // p.WaitForExit(); // p.Close(); とすると >error: ファイルを格納しているボリュームが外部的に変更されたため、開かれているファイルが無効になりました。 というエラーが出てしまいます。 Console.WriteLine("test"); のところを p.StandardInput.WriteLine("test"); にすれば書き込めるらしいのですが出来れば A.cs の変更を極力したくないです あと Console.Out.WriteLine("test"); もダメでした RedirectStandardInput=false, もだめでした 何か使い方間違ってますか? IT掲示板群 ttp://x0000.net/forum.aspx?id=15 学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net 数学 物理学 化学 生物学 天文学 地理地学 IT 電子 工学 言語学 国語 方言 など simulationライブラリで純粋な関数式プログラミングをする ttp://x0000.net/topic.aspx?id=3631-0 UIライブラリ (C#, 2D) を作ったよ ttp://x0000.net/topic.aspx?id=3688-0 連続と離散を統一した! ttp://x0000.net/topic.aspx?id=3709-0 4Dエンジン ttp://x0000.net/topic.aspx?id=3677-0 matrixのライブラリ ttp://x0000.net/topic.aspx?id=3711-0 ある強力なFor関数 ttp://x0000.net/topic.aspx?id=3630-0 SQLライブラリ ttp://x0000.net/topic.aspx?id=3675-0 >>615 var tmp = Console.Out; try { var p = Process.Start(psi); Console.SetOut(p.StandardInput); Console.WriteLine("hoge"); p.WaitForExit(); } finally { Console.SetOut(tmp); } >>612 C++の上位互換で、わざわざ使わないだけで使おうと思えば使えるものだとおもってました、ポインタ >>613 さんくすね、それだとFoo.HogeHageDebuBakaが変化したときにやばいかなと >>614 さんくすね、プリプロセッサで置換みたいなので大丈夫だと思うけど、staticが入るとどう変わるんだろか ポインタは使えるけどC++と違ってstaticなオブジェクトですらガベコレによってアドレス変わる可能性が常にあるから 長寿命なポインタというのは自前でガベコレ管轄外のアンマネージドメモリを確保しない限り成立しない >>602 whileのロジックが足りない while((x != -1 && x < list1.Count) && list2[x].flag) にするとlist1の要素超えなくて見つからないと「-1」が返ると思うよ >>615 確認していないので適当だけど、ProcessStartInfoで自分の標準出力を相手に リダイレクトする指示をしているのに、自分の標準出力に書き出すメソッドを 使っているので、リダイレクトじゃない状態で出力されて相手がリダイレクト元を 見失っているんじゃないかな >>617 が書いてくれたのは書き込む前に自分の標準出力をリダイレクトに 切り替えているので、簡単にやるならば「p.StandardInput.WriteLine」を使うのが 良いんじゃないかな あ、どうしてもConsole.WriteLineじゃなきゃダメって言うならば>>617 の方法に なるだろうけど Ruby では普通に、print, puts メソッドで出力したら、 標準出力・$stdout に出力される どこに出力するかなど、考えたこともない 標準出力以外を使う場合は、標準エラーに出力する時だけ。 標準出力なら、パイプ・ファイルへのリダイレクトも使える a.rb | b.rb パイプ a.rb > b.rb 上書き a.rb >> b.rb 追記 >>619 なるほどね、実質ポインタは使い物にならないね、何が出てくるかわからないとか >>624 rubyやpythonならspawnやpopen使って生成した 子プロセスの標準入出力の話 >>625 ローカル値型変数ならその関数抜けるまではスタック上にあることが保証されるからその関数内限定でCと同じように扱える バイト配列等参照型もfixed (byte* ptr = &bytes[0]) {}と囲っている間はガベコレにアドレス移動させない通知を出せばそのスコープ間では扱える ポインタフィールドを持たせたいとかになるとさっき言ったようなアンマネージドメモリを利用するしかないのでC#では実質不可能になってくる C#に、lispでいうmapcar関数のようなものはありますか? >>628 Enumerable.Select() c#頑張ってきたのでc++ちょっとかじって浮気してきまっす! 挫折したら秒で戻ってきまっす! >>626 Ruby では、`コマンド`、system(コマンド)などは同期処理だけど、 spawn は非同期だから、すぐに子プロセスのPID が返ってくる だから、Process.waitpid で、子プロセスの終了を待ち合せる必要がある p pid = spawn('uname') #=> 1142 Process.waitpid pid 出力 Linux List<string>をfor文中で繰り返し初期化して使用したいのですが、 List<string> 変数 = new List<string>() で出来ますか? それともfor文の最後でclearしないといけませんか? ネットにソースが見当たらないので質問しました。ソースもあるよという方はその内容も教えていただきたく。 お願いいたします。 forの中でList<string> 変数 = new List<string>()とループ毎に確保しているのなら終わり際にClearは書かなくていい 文字通りnewだからね ただパフォーマンス的にはforの前で作ったリストをループ中の最後にClear()して使いまわす方が若干効率は良くなる 一般的な用途であれば差にもならない差だから前者で良いけど >>635 clearいれるだけ処理遅くなるぞ。不要や >>627 限定的ながらもポインタ使えるんだね、少し>>601 がわかった希ガスサンクス >>639 GC機能ってfor文だけでは機能しないと思っていたんですが、初期化時点で古いのは解放されると思っていいんでしょうか? >>638 ここは初心者が回答してみるスレじゃないぞw >>642 はあ?ループ中のリスト毎回clearするなんてアホなコードお前しか書かないだろw ListのClearは内部バッファの中身をデフォルトクリアしてCount = 0とするだけであってバッファのキャパ自体はそのまま Clear後に利用する際にそのListインスタンスのキャパ以下の利用であれば内部でbuffer = new T[capacity]みたいな処理が走らないから効率化される可能性があるという話 一般的なプログラマであればこのようなことを考える意味は皆無なのでnewし直すが正解で良い 笑えるwww 今度からいちいちnewしてる馬鹿いたら、 あーこいつは初心者が回答してみるスレの住人だと分かっていいなw >>648 ←ループの中でいちいちnewしてたnewtype発見w 初心者スレおもしれーwww >>645 毎回newしたほうが効率がいいケースと 1つのListをClearして使い回したほうが効率がいいケースとそれぞれあるよね? たまに勘違いしている人がいるみたいだが、このスレは「初心者用」のスレだから 質問者も回答者も「初心者」だよ >>650 条件が詳しく書いてないんだから「場合によって使い分ける」 このスレでは「問題なく動けばいい」 まあ、newし直すのは意味はあるけど、 気になるのは同じ変数名を使い回してないかってことくらいやな まあ、自分だけのコードなら好きにすればとしか そういや初期のjavaの実装がそうだったなw 全部new。 糞おせーw C#を実装したのがおまえらじゃなくてfastcall使いまくるヘジで助かったぜ。 >>653 違うだろ?「勉強になりました。」と素直に謝ればOK なんだもう自演煽りしかできないのか。情けない。 逐一newがいかに速いか知ったかして語ればいいのにw もっと初心者スレらしくアホを晒せw >>656 違うだろ?「勉強になりました。」と素直に謝ればOK >>656 こーゆうレガシーな情報をアップデート出来ない老害コーダーがスコープとか意識出来ずにスパゲッティコード量産していくんだろうな。 List<string> 変数 = new List<string>(); for(;;){ // 処理 変数.Clear(); } for(;;){ List<string> 変数 = new List<string>(); // 処理 } これで言い争い? 言い争いなんか誰もしてません。ここは無知無双を観察するスレです。 clear()は遅いですw スパゲッティになるので逐一newしてますw java思想は正しいですw ヘジは老害コーダーですってwww 上でも書かれてるけどClearってcount=0にしてるだけだろ? 怪しい時には実装にあたったほうがいいよ https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,ca7bce81a50b0aeb,references count=0だけじゃなくて配列の個々の値も初期値に戻してる まあそれでも_sizeがかなり大きくない限りは参照型のインスタンスを都度生成して生成してヒープに置くよりローコストだと思うけど 議論でとりあえず有名人の名前出したり話すれば、有利になると思ってる単細胞な発想はやめよう そろそろ誰かが比較出してくれるんじゃね それで決着だろ >>659 俺なら上を採用する場合一回分無駄になるけどループの先頭(可能であれば使う直前)にClear()を呼ぶ 名前、年齢、部署を表示するListViewで、マウスを当てるとポップアップ表示されるように したく、以下のようにコーディングしました ListViewItem lList = new ListViewItem(name); List.ToolTipText = name //ツールチップの設定 ListViewItem.ListViewSubItem lvs = UrlList.SubItems.Add(age); lvs.Tag = txtSearchWord.Text; //ツールチップの設定 ListViewItem.ListViewSubItem lvs = UrlList.SubItems.Add(section); lvs.Tag = txtSearchWord.Text; //ツールチップの設定 一応これでポップアップするようになったのですが、位置がリストの表示位置と 離れすぎているのでもう少し「リストの文字に覆いかぶさるように」調節したいのですが 方法はありますでしょうか? たぶんC#書いてると上を採用するケースは少ないと思う でも下を採用すると newとGCと場合によってはキャパ超えの処理が複数回 ループ毎に発生する .NETの範囲内だとToolTip自分で設定してマウスオーバーした時に自分でShowするぐらいしかないのかな https://docs.microsoft.com/en-us/windows/win32/controls/ttn-show Win32的にはTTN_SHOWでSetWindowPosしろって書いてある ちなみにTTN_SHOWはListViewの派生クラスでWndProcオーバーライドすると捕まえられる >>669 WPFだと表示位置を調整可能だけどWinFormだとデフォルトでは設定できないので デフォルトのToolTipをオフにして自分でマウスイベント使ってToolTipを表示する 設定するToolTipのShow()メソッドで位置調整可能 オブジェクト複製の方法(ディープコピーやシャローコピー)を明示的に定義したインターフェイスはありますか ない ICloneableがまさにコピー方法等の規定がなく役に立たないために非推奨となったが、特に代替となるインターフェイスはない MSとしてはコンストラクタ引数にコピー元オブジェクトを渡すことによるコピーを推奨しており、 シャローコピーなのかディープコピーなのかはそのコンストラクタのドキュメントに書くのがよいと思われる ICloneableの一般化は有名なアンチパターン そんな推奨あったっけ コンストラクタはasyncにできないし直接デリゲートにできないしで扱いづらいんだよね… CS1628 :匿名メソッド、ラムダ式、 またはクエリ式内では、refまたはoutパラメーター 'parameter'で使用できません. ってエラーが出たらどうしたらいいですか? >>680 どうしたらいいですか? →具体的にエラーが発生した場所のコードを示して質問する。 質問者が理解できない(理解しようとしない)だと回答する意味ねぇわな MSDNは日本語版で読むと意味不明だから、英語で読んだほうが良いよ。 >>687 この程度ならたいして変わらなくね? て言うか > このエラーを回避するには、ローカル変数を使用するか、別のコンストラクトを使用します。 を理解 {でき|しようとし} ない奴が > To avoid this error, use a local variable or some other construct. を理解できるとは思えないけど… こんな日本語を理解しようとするのは時間の無駄 Ref または out パラメーター 'parameter' 匿名メソッド、ラムダ式、またはクエリ式の内部を使用することはできません。使用する場合、このエラーが発生した、 in、 ref、またはout匿名メソッド ブロックの内部でパラメーター。 >>689 docsか、すまん。 >>690 よく読めば一瞬で謎に陥る。 >>691 の部分が一番やばい。 俺Xamarin最近いろいろやってるからドキュメントに当たるんだけど、もう少しなんとかならんかなあれ。 MVPあたりに音頭取らせて翻訳をみんなに手伝ってもらえばいいのに。コントリビューション記載してくれるなら権利放棄して喜んでやってくれるだろうに。 安易にgithubのイシュー切れて、好き勝手文句を書いたように見えたから前回は問題になったんだし、githubでやるより、翻訳するにあたって当たり前のツールで対訳は作るべきだと思うんだがなぁ。 何もTradosを買えって言うわけじゃないけど、何か機械翻訳ではなくてメモリ翻訳+人間でやってほしい感じがするわ。 >>691 これ元の英文もおかしいと思う Cannot use in ref or out parameter 'parameter' inside an anonymous method, lambda expression, or query expression の 'in' がキーワードと認識できないからわかりにくい訳になってる in, ref, outを列挙するならカンマでつないで Cannot use in, ref, or out parameter 'parameter' inside an anonymous method, lambda expression, or query expression とするのが普通だと思う これならGoogle翻訳でも 匿名メソッド、ラムダ式、またはクエリ式内では、in、ref、またはoutパラメーター 'parameter'を使用できません とそれなりの訳文になる Cannot use ref or out parameter … だったところに 新機能でinが追加されて修正したやつがミスったんだろ 実際のエラーメッセージはカンマ入りでちゃんと修正されてる CS1628: Cannot use ref, out, or in parameter 'x' inside an anonymous method… >>697 そうだね、parameterが重複しちゃってるのはその前からだし、そもそもキーワードはバッククォートで囲っとくべきだけどね 練習がてらWindowsフォームでカレンダーを作っています アプリが選択されていない時でも、例えば特定のラベルに マウスポインタをかざすだけでイベントを発生させることはできますか? >>700 ありがとうございます MouseEnterイベントの内容を間違えて捉えていました イベントは常に発生しているだろ それをフックするかしないかだけで。 WinFormsでWndProcとかフックしてて思ったんだけど C++でデスクトップGUI作る場合ってGetMessageループするスレッド立ててWMをswitchさせてって感じでチマチマやってんの? C++もMFCで組む場合はなんかよくわからんイベントで処理されてること考えないとあかんで c#に移植するときは対応するイベントやメソッドがどれか当てはめるだけで移植できるかもしれんほど似てる ぶっちゃけこの周りはwin32api時代のが一番見通し良かった Win32API が見透し良いのは同意 MFC は糞(ただのラッパーをクラスライブラリと称するとかアホかと) >>702 はい 独学だと基本がだめですね 読まないといけない本がたくさんあります カレンダーは一旦完成したんですけど、また組み直してます Form1にメソッドが集中するのもどうかと思い、カプセル化の勉強がてらクラスに分けたりしています あと、デザイナでエラーが起きるのが怖いです カレンダーの日付が表示される42個の部品をユーザーコントロールで作っているのですが これのプロパティをいじるとデザイナでよくエラーが起きます ソリューションのクリーンなどをしてると直るんですけど、それでよかったのかよくわかりません ちなみにここで言ってるプロパティとは、セッターゲッターのある自分で入力するプロパティです このプロパティと、プロパティウィンドウでのプロパティはどういう関係にあるのかもよくわからないんですけど。Designer.csをみるとただのフィールドのように見えるので。 インターフェース多すぎて使い方よく分からんのだけど、いい解説サイトない? >>708 そのコードを晒してみれば、優しいお兄さん方が色々指導してくれるかも知れないよ。 独学ヤバいと思うならやってみてもいいかと。 >>712 大学卒業したての美人の女医さんに はい、パンツ脱いでおちんちん見せなさいって言われてるようで はずかしすぎてとても無理っす 落ち着いていろんなことを実験したり調べてみると理解できるようになるんで頑張ってみます >>713 逆に大学卒業したての美人の女医さんに はい、パンツ脱いでおちんちん見せなさいって言われる体験をしたいのですが どうすればいいですか?そんな例えを思いつくくらいだから方法はあるのでしょうね ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる