◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]©2ch.net YouTube動画>1本 ->画像>3枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1497000961/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part128
http://mevius.2ch.net/test/read.cgi/tech/1493730340/ ■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1492843013/ ■コードを貼る場合は↓を使いましょう。
http://ideone.com/ https://dotnetfiddle.net/ ■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx http://referencesource.microsoft.com/ ---
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
質問しようとしたらちょうど新スレのようで、
>>1 さんお疲れさまです。
そしてもしスレ違いならすみません。
それなりにプログラミングの経験はあると思うのですが積極的に GUI のアプリケーションを作成したことがなかったため、Visual C# を学ぼうと考えました。
選択理由は C# はそれなりに把握して他の言語と比較しても好みだったためと、Qt などよりも使い勝手がよさそうに見えたためです。
ところが実際にはじめてみると細かい機能がよく分からず、MSDN のドキュメントは体系立てて学習するには少し使いにくすぎ、
書籍なども「C# そのものの内容についてがメインで求めている内容はおまけ程度」というものがほとんどで、取っかかりを得られずに困っています。
もし定番の学習法や便利な書籍・サイトなどがありましたらご教示願えませんでしょうか?
あるいは皆さんがどんな風に学ばれたのかなど参考までに教えていただければ……。
またひとつ確認なのですが、普通のメモ帳より高性能なテキストエディタを作成したいとするのならばコンポーネントを自作しなければいけないという認識であっているでしょうか?
MSDN の関連項目を見てもいまいち理解できないのですが、もしかしてこれはかなり難度高めでしょうか?
無知で申し訳ありませんがよろしくお願いします。
>>1 立て乙
>>2 内容は古いけどまとまっているところ
http://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html https://dobon.net/vb/dotnet/ というか困ったらその内容でググれ
>テキストエディタを作成したいとするのならばコンポーネントを自作しなければいけない
何をしたいかわからないから答えようがないが、とりあえずRichTextBoxで作っていけば?
>>3 ありがとうございます。
後者は恥ずかしながらVB.netについてのページと思いこんで飛ばしていました……。
テキストエディタについては、リッチテキストは未確認ですが、
標準のものは字間・行間の調整など、メモ帳にはないけど普通のテキストエディタならあるような設定が無理そうでしたので。
たのしいC#って本でプログラミング勉強した人いますか? レベルはどれくらいですか
入門書は書店で中味見て 形があるアプリ作ってるのがいいよ 作ってるアプリが自分の興味ないものだったら買うのをやめたほうがいいかも
>>2 一応突っ込んでおくけど、エディタ作りたいって初心者にありがちだけど、
エディタって初心者が想像するほど簡単じゃないからやめといた方がいいと思うよ
少なくとも外観のシンプルさに騙されて実装の大変さが想像つかないレベルのうちは
絶対に挫折するw
テキストコントロール自体を改良するか自分でいちから作り上げるか どっちにしても初心者には鬼門過ぎる 似たような問題で 電卓作ってcalcと同じ動作で作れる奴 なんか新卒でいても1人だな
>>6 実はもう買ってるんだけど、自分で理解出来てるのか、出来てないのか分からなくて困ってる‥
こういう微妙な立ち位置なんだよね
まあ理解できてると思うけど
他の言語は分かるけど
AvalonEditって代物が有って、コレを使えば簡単にエディター作れるには作れるんだがwpfなんだよな
http://avalonedit.net/ >>10 仮にForms版があったとしても、プログラミングの勉強にはならないだろ。
>>10 こういうデカい部品を相手にするのは初心者の勉強には最悪
まったく応用の利かないバッドノウハウに時間取られるだけ
あまり理想を追求せずにメモ帳程度のとりあえず動きますレベルの作るんだったら、 入門用に手頃な題材だと思うけどな ただ、textboxの動作のカスタマイズとか考え出したら、途端にノウハウが必要に なってくるし、さらに多くを求めると、自分でコントロール自作したほうがいいじゃ ないかって話になってくる
>>6 田舎だと現物がなくて地味に大変なんですよね……
電子版のサンプルがあればまだいいんですが、どうにもいまひとつなものが多くて
>>7 ありがとうございます
実装など考えて「これは何から何まで初心者向きじゃないのでは?」と思ったので質問させていただきましたが、やはりみたいですね
ひとまずのところは素直に諦めておきます
作りたかったのはアウトラインプロセッサなので尚更困難そうですし……
>>10 感謝です
上述の通りひとまずは諦めますが、扱えるようになった日のためにメモさせていただきました
>>7 だよな、VB.NETで文字色と背景色が変えられる印刷プレビュー付きのメモ帳を
作ってみたけど結構大変だったわ。変な挙動が出ないようにきれいに仕上げるのが大変大変
将来的には秀丸並なエディタを考えていたが諦めた。バージョンアップもしてないし
>>8 それも大変だわな。作ってみようと思ってるんだけど全然やってないわ
>>13 そうそう、TextBoxの扱い大変だったわ。Win32APIのサイト読みまくった覚えがある
タブ幅を変えられるようにするにはWin32APIでいじらないとダメなんだよな
せめてタブ幅を変えられるようにしたいと思い勉強してやり方分かったのに結局やってないわ…
夏休みにでも挑戦してみるかな
作りたいと思うものを作ればいい 挫折するのも勉強のうち
GUIアプリ作成の習得の前にOOPの勉強からじゃないかな
俺も最初にプログラミングに入門したときはVC#のGUI開発のチュートリアル的な本をやったけど 全くもって時間の無駄だったわ その後で@ITのクソ長い川俣の文法解説を苦しみながら読んでやっと身についた
どういうときにその書き方をする/機能を使うべきか、が知りたいのよね
あー俺もやったわエディタ作成 何とか .NET 内で済まそうとやりくりしても結局 Win32api が必要になるという
C#の文法は解りやすいよね C/C++からだったのもあってかとても楽だった
>>23 誤解なく使えるようになってる状態をわかってるって言うんじゃねーの?
WPFにそろそろ移行しなきゃと思いつつ全くできん MVVMもようわからん
フォームにテキストボックスどれくらいの数までパフォーマンス落ちないでいけるかわかる? 150個近く置きたいんだけど、ロードの時パラパラ漫画なるかな?
>>27 それはさすがに自分の環境で試さないとだめだろ
背景の有無とかでも変わるし
>>28 何使ったらいいと思います?datagridview?
>>29 それはもちろん確認しますけど、CPUやらメモリやらの環境依存もあったりするかな?と思って参考までに実績ある人がいたら聞いておきたかったです
>>30 結論から言うと無理だよ
クソ重くて動かない
絵にしといて編集するときだけテキストボックス出した
>>31 ありがとうございます
やっぱりそうすかねー。んーどうしよう
>>32 dategridviewじゃあかんのか?
>>27 分類できるならタブで分けるなりした方が楽じゃね
1画面で150項目入力とか表示以前にきつそうな
>>33 ありがとうございます
datagridviewだとレイアウト上ちょっと厳しいんですよね。。
最悪テキストボックスとdatagridviewの組み合わせでいこうとは思ってますが
もしくはformをわけるかですかね。。
>>34 ありがとうございます
一度に全部を確認したいのでタブだと駄目なんですよね
150個のテキストボックスなんて表示されてたとしても使う方がついてけないと思うけど。 31 が言ってるみたいにか、(ラベルか何かで)データを表示だけしといてクリックなりのタイミングで テキストボックスをその位置に表示して編集可能にするとかが妥当だと思うなあ。やるなら。 本当に「一度に全部を確認したい」の? よくよく考えてみたらそんな必要なかったりしない?
よー分からんが、入力の時は3ページくらいに分割しといて、確認は1ページみたいな感じが良いんじゃないか?
Excel15x10だと思うと全然大したことないのにな
150個なんて全然軽いんじゃないの? 1500個なら重そうだけど スクロール外にも及ぶなら、virtualViewみたいな設定ってWPFにないの?スクロール外のパーツをスクロールされたときに描写するViewみたいなの
あるクラスの中でメソッドA~Zまである中でメソッドA~Cには同じ引数が渡されるので これを別クラス化してコンストラクタに引数を渡してクラス変数を参照するように書き換えたらいいかなと思ったんですがどうなんでしょうか?
何を狙ってるの? A-Cの引数がこれからも同じ保証なんかないじゃん 余計なことするなよ
>>42 「ので」は理由を表す助詞だけど、
一行目のどこがどう二行目の理由になっているのか理解できん
>>41 150個くらいなら楽勝だと思うが、UIとしてどうなの?って感じたと思う。
>>42 その場合、「同じ引数」に強い関連がある可能性が高いので、それに関する全てに関数を別クラスにするのは有だと思う。
>>42 後からBだけ引数1個増えましたってときに「コイツ(製作者)ばっかじゃねーの」って思う
>>27 .NETじゃなくてAccessのフォームに150個近く(たぶん正確には135個)のテキストボックスを
配置して業務用の単票フォームを作ったことあるけど全然問題なく動いてたよ。表示も一瞬で表示されてた
テキストボックスにはデータセット紐づけのほかに計算式入れてたりユーザー定義関数を使ってたりで
色々データを表示してた
>>50 それ別モンじゃん
そもそもAccessは割といい動作するし
>>50 .NETじゃないなら、あまり参考にならないのでは。
>>51 Accessって動作いいほうなのか、知らなかったわ
>>52 Accessで大丈夫なら.NETも大丈夫そうだと思ったけど違うようだな
>>27 です
レスくれた皆さんありがとうございました
自分の環境で確認したら80個くらいまではロード時違和感なく表示されましたが、150個ともなるとロード時に斜めに走るようにパラパラ表示されました
ロードしたその時だけなので別にいいかなという気もしてますがやはりアプリ自体が重たい印象を受けるのでちょっと見直してみます
>>54 業務アプリでしょ?どうでもいいじゃん
もしパンピー向けのアプリだとしたら、パフォーマンス以前にそんなゴミ誰も使いたがらないよ
>>50 .NETでも表示だけなら一瞬だな
http://ideone.com/OSS1xG これにイベントとか入れたら知らんけど、そこまで試すの面倒
自分で作る時にこんなことやらないし
managementstudioはたくさんフィールドがあるテーブル表示してもあんなに軽いのに datagridviewとかテキストボックスとか超絶ゴミだからな なんとかしろよな
>>57 > managementstudioはたくさんフィールドがあるテーブル表示してもあんなに軽いのに
テキストしか表示してないにしても確かにあれは驚異的に軽いな
100万件とか表示させても楽々表示してるし
>>54 どんな作り方してるのか全く不明だけど、150個ロード?中に描画止めてないとか?
自分的には1クラス長々記述するより、同じ引数の関連性が強いメソッドを別クラスで定義したほうが後々保守しやすいかなと思いまして でもクラス増えることになってかえってグチャグチャになるかもしれませんね、もう少し綺麗にかけるといいんですけどね
>>61 綺麗って誰にとって綺麗なん?
クラス図も無いのに設計書にも仕様書にも出てこないワードでクラス作られたら困るわ
第一拡張って拡張する方向性やらお客さんと相談した上でやっとるんか?
遊びちゃうで?
自分作んのは勝手やねんけどな
誰にとってわかりやすいか考えたことあるんか?
レビューとかあんまりしないで逃げてると下手っぴになってしまうで
>>61 根本的に何か勘違いしてるねw
君のやろうとしていることは、会社みたいな組織に例えたら
部署を名前のあいうえお順で分けるような話
何で人事部とか経理部とか営業部とか技術開発部とか
機能別に分割されているか考えたことある?
ソース晒してスレ住民にリファクタリングしてもらうのが手っ取り早い
>>62 土方の回答は的外れだな
>>63 こっちのがマシ
>>61 ドカタは横に置いておいてw
同じ引数云々は「結果」の問題
「責務」で考えた方が良いと思う
プログラムの話じゃなくて業務の話だからじゃないかな
俺は
>>61 はそんな間違ってないと思うけど
基本的なクラス構造は保つべきだけど
頻繁に変更される箇所を別クラスに切り出したりするのは当たり前だと思う
柔軟に対応ってのがオブジェクト指向でしょ理由があるなら
>>68 どこが頻繁に変更されるか、その変更の単位はどうなるかはビジネスドメインに依存する
>>68 頻繁に変更される根拠は?
頻繁に変更のされ方がA-Zがα-γに代わる可能性はこの時点で排除していいの?
具体的な要件もなしに ぼくのさいきょうのせっけい を語るスレ
>>71 そうそれがないと動けない
でも積極的に将来的な保守を考えている!
らしい
単なる多態性の話なのに、質問者が初心者だから話が伝わらないだけにも見える
質問者は単に同じ処理があったらまとめるって書いてあるテキトーな入門書に騙されちゃったんだよ
英語話すのに、すべての英単語を覚える必要はない 使用頻度の高い単語は自然と覚えていくし
>>75 ふつうに機能を網羅してる本を読んでった方がいい
ググってると抜ける
最近リストリストを使えるようになった俺に死角はない
リストリストって、List<List<List<型>>>みたいな?
リストにクラスやリストをぶっこむ(add)する快感。
int[] tmp = Array.ConvertAll(Console.ReadLine().Split(' '), Int32.Parse); int n = tmp[0]; int k = tmp[1]; エラー処理とかしなくていいとしたら、これをタプルとかで一度にする方法ってありますか?
上記を一時変数を使わずに、一つの処理でできるでしょうか。
var result = Console.ReadLine().Split(' ').Select(x=>int.Parse(x)).First(2).ToArray(); でおk
説明不足ですみません。nとkという名前は使いたいんです。 入力は、 n k となっていて、C++だと cin >> n >> k;みたいな。 scanfみたいにConsole.ReadLine("{0} {1}", a, b)とかはできないようだし。
>>84 のでいいじゃん
なんで自分で理解できないコードを書こうとすんだよ
そういやラムダ式でタプルやったことないな できるのかな
すみません。ちょっと質問させて下さい 初めてタイマーコントロールを使ってみたんですが private void TimerStart() { timer1.Interval = 1000; timer1.Tick += new EventHandler(timer1_Tick); timer1.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { Console.WriteLine("Timer Test"); } 上記を実行すると、1秒おきに「Timer Test」が2回ずつプリントされるんですが なぜでしょうか。
多分 //timer1.Tick += new EventHandler(timer1_Tick); と、コメントアウトすれば解決
>>92 ありがとうございます!
なるほど確かに。。きちんと動きました!
>>89 最近多いよね
こういうアホ
できるだけ複雑なコード入れて自分の居場所でも確保しようとしてんのかな?(笑)
>>94 アホはお前。そういうこと言わないの。
質問者はたぶん、ひょっとしてもっとスッキリ書ける方法があるけど
自分が知らないだけじゃないかと思っただけでしょ。
他ではやりづらいアホな質問でも気軽にできる2chの数少ない利点を
つぶすようなことしてどうする。
>>95 それって逆に言うと今の自分レベルには読めないコードを書こうとしてるわけで
突き詰めて考えるとやっぱりバカなんだよ
いいじゃん
バカって言ってあげようよリアルだと
なかなか聞けないし
さらに何がスッキリなんだろう? 現状のコードと改変後のコードを比較して メリットデメリットを説明できるんだろか? 工数の短縮なのか? わかりやすさなのか? 汎用性なのか? 他言語への移植のしやすさなのか? 実行速度なのか? 実行負荷なのか? 初心者スレだからこそ問い詰めたい
まあまあwww pythonでは line="yamda,090-0000-0000" name,phone=line.split(',') でnameとphoneが代入できる これを最初に見た時なんだか目からうろこが落ちた 便利っちゃ便利だわな
ダメだなこりゃw なるほど知らないことを知ろうとすることが「自分レベルには読めないコードを書こうとしてる」 ことになるわけか。 こういうのを牽強付会って言うんだよね。 バカって言われるべきなのはお宅の方だと思うよw
>>99 違うよ
目的がねーもん求めるなっつってんの
今回でいうと
スッキリってなーに?
って話かな
仮にスッキリ(?)書けたとして
それって何が良かったの?
って説明できるのか?
と
c# の新しいタプルが導入されたとしてもさっきsplitされた配列から直接代入できない 拡張メソッドを自分で書くしかない
向上心とは関係ない 出来るかできないかの質問にはできませんで終わり 自分が知らない方法あるのかの質問で粘着されてかわいそうだなとは思う
public static (T n, T k) ToTuple(this T[] xs) => (xs[0], xs[1]) いまいちかなw
>>104 ちなみに元のコードから何が良くなったの?
>>88 その考え方は割と的確で
式を意識してコードを書く
ととても「見通しのよいコード」になる
その辺を無意識に自覚出来てるんだと思う
>>105 理解出来ないならそれで良いじゃんw
無理する必要はさらさら無い
「一度に処理する方法」の有無を知りたがってるから
>>104 は可能だと提示した
質問と回答が通じてるからそれでいい
>>106 いや
>>84 はいちおう宣言的なコードだぞ
副作用には依存してない
>>88 の何処に破壊的代入があるんだろう??
まあReadLineで「out var a」みたいな書き方出来ないのは癪だが
>>113 何に噛みついてんの?
やりたいことさえ実現できてれば後は趣味の世界なんだから気楽にやろーぜ
>>115 初心者スレで甘やかすのよくねーよ
こんなメリットの説明もできないコード書かれても困る
俺も独学で組んでた時代長かったけど
なんとなくこっち
何となくこれ
って感性でコードの良し悪しを決める癖って仕事で使うときに害にしかならねーよ
>>116 それは仕事だからだろ
ここは仕事じゃないよ
俺は初心者スレだからこそ細かいことは置いといてまず楽しむってことが大切だと思ってる
>>117 じゃ、お前はそういうレス担当な
俺はこっち担当で
答えとしては言語仕様上は簡単な方法はありません 定石となる書き方もありません
>>112 麻疹と同じで子供のうちに掛かった方が良いのかもねww
(比喩的な意味で)
お爺さんになってからは手遅れなのかもねww
>>113 >>106 仕事じゃないんで
これ以上は有料ならw
それも1つの選択 ただし、仕事では使えない 説明を求められても回答できない メリットの説明もできないコードだということは彼の頭にうっすらでもちゃんと残ってくれるだろうね それでいいよ
>>123 説明しても理解出来ないお爺ちゃんお疲れさまでした
C#初心者です。 今、コントロールだけを録画するアプリを作ろうと思っているのですが、いいような録画方法がわかりません。 また、フォームを最小化したり、別のウィンドウがかぶってもできるようにしたいです。 調べてみてもwebカメラのものが多く、肝心な録画方法は見つけられませんでした。 また、Aforgeライブラリを使いBitmapをフレームごとに追加しaviファイルにするというものは見つけられましたが これは画面自体のキャプチャなのでコントロールのみができません。 もちろん座標とサイズを合うように指定すればよいのだと思いますが、この方法では別のフォームがかぶったときにコントロールの部分は見えなくなります。 また、PrintWindow関数を使った方法で指定したコントロールをキャプチャするという方法もあり、これなら・・・と思いましたが スレッドの関係で画像を撮るときにコントロールにアクセスするため、UIスレッド?で実行しなければいけないので、実行時に一瞬ですが止まってしまいます。 これを繰り返すともちろんフォームを操作できなくなるので、この方法もダメでした。 他に何かいい方法はありませんでしょうか? もちろん自分のやり方や理解が間違っているということも十分にあるので、そこは指摘してくれればうれしいです。 長文失礼しました。
>>125 単なるキャプチャーじゃなくて動画にするの?
なんでそんな高いハードルを設定するのよw
単なる静止画キャプチャーならControl.DrawToBitmapでできるんじゃない?
キャプチャーするレートにもよるだろうけど、余程複雑なコントロールでもない限り
プチフリとかならんと思うけど
隠れAPIのDwmGetDxSharedSurfaceあたりから探ればええんでないかしら
>>126 自ソフトです。
>>127 >>129 DWMですね、一度調べてみます。
>>128 自分で作りたいと思ったからです。少し時間が掛かっても作りたいものは作りたいでしょう?
>>130 自ソフトなら録画する必要ないと思うけど
ログ取って再生するだけ
近々S級を取ってみせる。 いまはただのA級ですがね。
paizaは知らないけどcodejamでfinalまで行ったよ
>>125 僕もC#のことはよくわかりませんが
C#で書いてるオープンソースのイケてるウインドウ動画キャプチャソフトです
参考になれば
https://github.com/NickeManarin/ScreenToGif >>133 語弊があるな。
本当に初心者かよ!?っていみです
”yyyy/MM/dd HH:mm:ss.fff” このような時間情報のはいった文字列strを以下のようにDateTimeにcastしますと DateTime TimeStr = DateTime.Parse(str); TimeStrの中身は{yyyy/MM/dd HH:mm:ss}となってしまい、ミリ秒の情報がどこかにいってしまいます。 ミリ秒込みでstring型からDateTime型へcastするにはどうやれば良いでしょうか。
単に表示してないだけじゃね? TimeStr.ToString("yyyy/MM/dd Hh:mm:ss.fff") とかやってみてみ
vbnetと.netframworkの違い教えてください
>>140 .NET Frameworkは.NETで作られたプログラムを実行するためのランタイム
VB.NETはその中で使える言語の一つ、C#とかの仲間
>>141 ありがとう
理解するのに時間がかかった‥
>>136 ありがとうございます!
まだ見れていないのですが、ぜひ参考にさせて頂きます。
vs2015でどこからも参照してない古いクラスファイルをプロジェクトから除外→F5起動すると動作がおかしくなる (DLLimportが失敗する、app.manifestで設定してる高解像度対応が無効になる) 調べてもよく分からないからそのまま使ってるけど、理由わかる人いますか?
>>145 自分で作ったもの?
それとも他人が作ったもの?
>>146 自作です
1年前に作り初めてコツコツ改良しつつ使ってます
>>147 多分外してると思うが、ソリューションのクリーンで治る場合もあります
>>148 ありがとうございますm(_ _)m
今試した限りではダメでした
やっぱり追加、修正してるうちにどこかおかしくなってるのかな
とりあえず時間ができるまではこのまま使うことにします
コンボボックスやテキストボックスを10個 for文などで処理したいんですけど何使えばいいですか for i =0 combobox i =*** textbox i =*** イメージ的にこういう感じです
var cbs = new[]{combobox1, combobox2, ....}; var txts = new[]{textbox1, textbox2, ....};
>>150 foreach(var combobox in Controls.OfType<ComboBox>())
{
}
ControlsにFormで定義されている全てのコントロールが入っているから、それからComboBox型だけ抽出
>>153 自動ブログ作成まっしーん
俺の2ちゃんねるの書き込みを元にブログを作成する
使用者は俺のみ
無粋な突っ込みだけど、自分のレスでも2chに書き込んだ時点で著作権は2chに移動するので
>>154 みたいのは微妙にマズいと思う
著作権を主張する2chってのも世も末だなと思う今日この頃
詳しい事情は知らんけど、なんか例の乗っ取り騒動以来いろいろあったよね このスレのタイトルにも天才禁止ついてるし
>>151 >>152 ありがとうございます
理解するのに時間かかりましたがなんとかできそうです
>>154 を公開してたらマズいだろうな。アフィとかつけてたら更に。
でもまぁ、マイナーである限りは訴えられるリスクは低いかもしれないけど。
>>158 ヨダレが出るほどやりたい。
>>163 電車男は2ちゃんのものになったけど、2ちゃんでラノベ書いた人の著作権は作者のものになったと思ったよ
今問題にしているのはまとめサイトとの抗争だけでしょ
>>153 軽い動画プレーヤー、軽い画像ビューア、アラーム時計、カレンダー
よろしければ、みなさんが初期に作成したVisualC#のアプリを教えてくださいませんか? 初学者で作れるのはどの程度のものなのか知りたいのです 本当は作りたいものを作るのがいいのでしょうが、どれも難度が高いため、完成させることによるモチベーションを適度に得たいのと、 参考書に載っているのはサンプルのためのサンプルみたいなものばかりで…… よろしければ実例を参考に「こういうのなら作りたいかも」というのを考えてみたいのですが、お願いできませんでしょうか?
>>168 Amazonを一通り作れるようになるべき。
まずはログインからか。
カメレオンベースの改造人間は高度すぎて初心者向けじゃねーな
>>168 そんな事も人に聞かないと判断・決断できないようじゃ、ろくなプログラマーに
なれねーぞ
>>168 モチベーションなんて人それぞれだから好きなものを作ればいいよ
電卓とかテキストエディタとかブラウザとか絶対他社のものしか優れてるものしか作れないんだよな
普段めんどくさいなあくそったれと思ったらそれをメモすればいいじゃん
自分じゃなくて他の人に目を向けたら? 世の中にはお前がちょっとクソコード書いてやれば解雇されるクソみたいな仕事してる奴が腐るほどいるんだぞ
>>168 GUIなら電卓は良いんじゃないかな。
おいらは何故か画像表示して、その上に落書きできる機能付けるのが定番だけど。
(ちゃんとWindow重なったり、拡大縮小で画像が消えないようにメモリ上にビットマップを保持して)
CUIだとcat -nと同じ、テキストを行番号付けて表示するって奴。
C#とかはIDE充実し過ぎだけど、LLとかだと自分専用テキストエディタとかモチベーション維持に良いかも。
出来ることはほぼ同じ。違いはソースコードの見た目が大部分
C#が初めての言語って人ここは少ないだろう CかJava経由じゃないかなあ ちな、圧縮ファイル内の画像をリサイズアプリ
C#ならunsafeで出来ることがVBだと凄く面倒
tryと打ってエンター押せばcatchもend tryも書いてくれるVB それに比べてC♯は自分で書かなきゃならない。
>>182 それIDEの話だし、VSでもコードスニペットあるだろ
>>168 まずデジタル時計、次に画像ビューア
慣れてきたらデジタル時計にアラームを付ける
そして文字色や背景色をダイアログで設定して変えられるようにするとかフォントも変えられるようにするとか
画像ビューアも自分が便利に使えるようにバージョンアップする
かなり慣れてきたら簡単なテキストエディタや簡単なブラウザを作ってみる
>>182 え、vsでtab2回押すのも面倒なの?
C#はAWS LambdaやAzure Functionsでも使える MSにすら捨てられてたVB
フォームアプリで無限ループをまわすと画面が固まるので、ループ処理を別スレッドで行いたいのですが.NET4の環境でこれを行うのはどういう記述をすればいいのでしょうか ボタン1を押して無限ループ処理開始 ボタン2を押して無限ループ処理停止 みたいな感じです。よろしくお願いします。
フォームアプリならbgwakerを使うのが楽では?
>>190 bool cancelRequested; async button1_Click() { button1.Enabled = false; button2.Enabled = true; cancelRequested = false; await Task.Run( DoWork ); button1.Enabled = true; button2.Enabled = false; } button2_Click() { cancelRequested = true; } void DoWork() { while( ! cancelRequested ) { ; } } >>193 ありがとうございます
async/await
を使うと、GetAwaiterの定義が含まれておらず~って出るのですがasync/awaitを使わずにTask.RUN(DoWork)のみでいいでしょうか
あと、Task.RUN(DoWork)とTask.Factory.StartNew(DoWork)は全く同一処理と思っていいでしょうか
>>194 修正版
http://ideone.com/1vh2bo Task.RunとTask.Factory.StartNewは似てるけど、全く同じではないらしい。
MSDNのTaskFactory.StartNewの備考に書いてある。
今回の例ではどちらでも動くけど。
cancelRequestedはvolatileつけるかプロパティにしないとまずくない?
boolなら問題ないよ この場合、結果整合性があれば十分なはずだし
テキストボックスを何十個か保存する方法教えてください プロパティで設定して Properties.Settings.Default.aaaa = this.textBox0.Text; と1つ1つ手動で保存する方法はわかるのですが 他に一括でできる方法ありませんか
>>194 すまん。.Net4環境だと標準でawait/async使えないの忘れてた。
async/awaitを使わないバージョン
http://ideone.com/34GTJb >>195 でも
>>196 のを入れれば動くはずだけど。
>>198 本当?
>>193 の
while( ! cancelRequested )
boolならここの最適化が回避されて毎回変数の値がちゃんと読まれるなんて聞いたことないけど
>>195 >>196
>>200 ありがとうございます!問題なく動作確認出来ました
GetAwaiterは私の勘違いでした
Task task = await ~
してました。。
.NET4でもasync/awaitは大丈夫でした
Task.RUNは上のを入れればいいんですね?後で確認してみます。大変助かりました
すみません。また勘違いでした async/await使えませんでした 上のをいれてみたら使えました
>>202 なんでとっくにサポート切れの4.0使ってんの?
.NET4.0はサポート外の環境だけど、意外と残っているんだよな
>>199 普通に順にテキストに書き出して
あとで読み込め
>>206 その普通にというのがどうやるのかわかりません
>>207 コントロール一覧を取得するもんがあったはず
そこからテキストボックスだけより分けて処理
>>199 あんまり使ったことないけど、バインディングしておけばいちいちアプリケーション設定を
ユーザーコードで読み書きする必要はなかったように思ったけど...
http://dobon.net/vb/dotnet/programing/dynamicproperties.html >>199 シリアライズ可能なViewModelを作成
ViewとViewModelをバインド
ViewModelをシリアライズで保存
ViewModelにデシリアライズで復元
テキストボックスが何十個も並んでる時点で 俺は泣くと思う そしてそれがちゃんとしたデータ構造に格納されてないことを知り号泣すると思う そして10分でリファクタリングを終わらせコーヒーを飲む
業務システムはそんなんばっかりだよね 1画面で事細かに大量に入力するのって疲れるだろうに 可能な限り入力を減らして楽しようとか 分割統治して脳の負担を減らそうって発想がないのだろうか
やりたいことがExcelってことなら理解できるよ俺は
とりあえずstreamwiterと StreamReaderでテキストファイルに書き込んでやりたいことはできました
プログラミングはhello worldくらいしかやったことないゴミがc#を学習するのにいい書籍教えてください 猫でもわかるやつは評判見る限り私には無理そうなので
ぶっちゃけ、C#「で」プログラミングに入門するってコンセプトの本はほとんどない気がする。 C#「に」入門する系の本もあんまり売れないのか最近は少ないよね
C#は解りやすいからGoogle先生だけで何とかなった
どの書籍のレビュー見てもレベル1→2みたいな感じで私のようなレベル0対象の書籍がどれなのかわかりません
>>221 変数とか構造体やクラスの使い方が分かればレベル1でいいよ
>>221 普通にVS入れて実行環境さえ準備できれば入門は難しくないよ
それでも難しいと思うなら他の言語やったほうがいい
図書館に行くと意外とc#の本があったりする
本なんか買わなくていいよ c# 作り方 でググれ なんか気に入ったの見つけたら打って見ればいい
地元の図書館はSwiftやGOやtype scriptやscalaの本が複数ある
WPFが腐れたので今はかなり入門しにくい環境にあるんだと思う UWPで入門は地獄だし
>>221 本当は遠回りでもちゃんと構造化プログラミングとOOPを
理解した方がいいんだけど、そういう趣旨の本はないね。
web上の記事だとなおさら少ない。
個人的には、ネットで十分とかいう奴は真に受けてはダメだと思うw
まあ、全部を網羅した本はないからいろいろザッピング気味に読んでみるのがいいんじゃないか。
図書館とか、ブックオフとかアマゾンの古本で十分だと思う。(さすがにC#2.0以前の
古いものは避けた方がいいかもしれんが...)
それでプログラミングの考え方がつかめるようになれば、
言語としてのC#やその新機能を調べるのはwebで十分だと思う
レベル0ならCLR via C#がオススメ 基礎的な内容をほぼ網羅してる
>>224 「c# 作り方」 というか 「c#」+やりたいことのキーワードだな
「c# 画像ビューワー」 とか
それで見つかりそうになかったらC++で探している。解決方法が似ていることが多いから
C#始めて2年以上たったけどそれで困ったことが無いくらい情報はあった
>>223 VS+C#以上に楽な言語とか想像もつかないな
俺は大学の情報学の図書館とか市の図書館で借りて勉強した 一度近くの図書館に行ってみるのはオススメ
>>230 初心者に勧めるには少し難易度高すぎない?
>>221 「作って覚えるVisual C# デスクトップアプリ入門」は、レベル0向けとしていいかもしれない。
この本は、文法などは簡単な説明で済まされてしまっているけど
書いてあるとおりに手を動かせば、初歩的なGUIアプリ(タイマーとか付箋アプリとか家計簿アプリとか)を
完成させることができた。
文法だけの本で勉強するのは苦行に感じるかもしれないので、まず実際に動くものを作れるのはいいと思う。
僕はC#2013年版を読んだけど、最新の「作って覚えるVisual C# 2017~」もたぶん大きくは変わってないはず。
ただしこの本は、レベル0向けに分かりやすくするため、あえて説明を端折ったり、
説明しやすくするためにあまり一般的じゃないやり方が書いてあるところもあるように思う。
勘のいい人だと、この本を足掛かりにWebの情報だけでどんどん先に進めるだろうけど、
どうも応用が利かないと思ったら、独習C#といった文法の本を改めて勉強すればいいんじゃないだろうか。
読者が初心者だからって変なこと教えたり誤魔化したりする入門書は捨てていい 嘘をつかないこと 包み隠さず詳細まで書いてあること これが良い参考書の必要条件だ
つーかレベル0ってのが変数って何?とかプログラム制御でお決まりのif~thenとか forループとか、サブルーチンへ飛んでreturnで戻るとか、その辺りのほんとの初歩の 知識がないってことなら、そういうの解説したC#版入門本・サイトってあるのかね? そのへんって常識として押さえてないようだと、挫折する可能性高いと思う
webbrowserを使用したソフトを作っているのですが、 デフォルトだと音量が大きすぎるので音量設定で変更したいのですが、 ミキサーの音量とかってどうやって設定するか探してみたのですが見つかりませんでした。 何かいい方法はないでしょうか?
>>237 ユーザーに任せたほうがいいんちゃう?
お前のアプリ起動するたびに設定した音量変更されんの?
質問させてください。 本やネットに載っているサンプルをまねて、下記のようなMyCollection<T>クラスを作りました。 public class MyCollection<T> : IEnumerable<T> { List<T> list; public MyCollection() { list = new List<T>(); } public void AddObject(T item) { list.Add(item); } public IEnumerator<T> GetEnumerator() { for (int i = 0; i < list.Count; i++) yield return list[i]; } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator(); } } このクラスでは、非ジェネリック版のGetEnumerator()は、インターフェイスIEnumerableを明示的に実装しています。 (サンプルがそうなってたのでそうしています。) == 続く ==
== 続き == で、この非ジェネリック版のGetEnumerator()はどんなときに呼ばれるんだろう?と思い、試しに無理やり 呼んでみようと、下のように非ジェネリックなIEnumerator iを経由してMoveNext()をコールしてみました。 しかし、デバッガで見る限り、ジェネリック版のほうのGetEnumerator()が呼ばれるようです。 MyCollection<int> collection = new MyCollection<int>(); collection.AddObject(0); collection.AddObject(1); collection.AddObject(2); //IEnumerator<int> i = collection.GetEnumerator(); IEnumerator i = collection.GetEnumerator(); while (i.MoveNext()) { var j = i.Current; Console.WriteLine(j); } ここで質問なのですが、 (1) 上記のコードで、どうして非ジェネリック版のGetEnumerator()が呼ばれないのか? (2) どんなときに呼ばれるのか? (3) 上記のコードでは、非ジェネリック版のGetEnumerator()の中からジェネリック版のGetEnumerator()を 呼んでいるが、両者は戻り値が異なる(IEnumerator<T>とIEnumerator)のに、なぜそんなことができるのか? 以上、よろしくお願いします。
>>241 1) C#に戻り値の型に応じた型推論はないから
2) collectionをIEnumerableにキャストしてから3) GetEnumeratorすれば非ジェネリックの方を呼べる
IEnumerator<>はIEnumeratorを継承しているから
>>239 一応ミキサーをコントロールするAPIがVistaのときに出来て、それを制御するソフトがCodeProjectに揚がっていたよ
早速の回答ありがとうございます。 いただいた回答をもとに色々考えましたが、何か釈然としない部分が残っています。 先のコードの、 IEnumerator i = collection.GetEnumerator(); // ① i.MoveNext() // ② の部分は、下記のような動作と考えていいのでしょうか? ①について: ・collectionはMyCollection<int>型である。 ・よって、collection.GetEnumerator()のGetEnumerator()はジェネリック版のほうを意味し、 その戻り値はIEnumerator<T>型である。 ・IEnumerator<T>型である戻り値が、IEnumerator型の変数iに入る。 ・IEnumerator<T>型の値を、IEnumerator型の変数に入れられる理由は、 「IEnumerator<>はIEnumeratorを継承しているから」。 ②について: ・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。 ・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、 ジェネリック版のGetEnumerator()のほう。 以上の動作は、 インターフェイスI1をI2が継承するとして、 I2型の値をI1型の変数に入れて、I1型の変数経由で、I2にしかないメソッドを呼んでいるように見えます。 (I2にしかないメソッドとは、今回の例ではジェネリック版GetEnumerator()のことです) == 続く ==
== 続き == しかし例えば、 interface I1 { void Method1(); } interface I2 : I1 { void Method2(); } class C1 : I2 { public void Method1() { Console.WriteLine("1"); } public void Method2() { Console.WriteLine("2");} } 以上のようなインターフェースとクラスに対して、 I2 i2 = new C1(); I1 i1 = i2; i1.Method1(); // OK //i1.Method2(); // エラー 以上のようにしてi1経由でi2にしかないメソッドを呼ぼうとすると、エラーになります。 これはどうしてなのでしょうか? (長文ですみません)
どこでI2にしかないメソッドを呼んでいるように見えるのかわからん iにはジェネリックGetEnumeratorの戻り値であるIEnumerator<>オブジェクトが入る i.MoveNextは非ジェネリックのIEnumerableのメンバたけどIEnumerable<>のメンバでもある なぜならIEnumerable<>はIEnumerableのMoveNextを継承しているから
>i.MoveNext()により、実際にGetEnumerator()が呼ばれる。 ここは何か勘違いしているというか、何を言ってるのか分からないというか... C#は静的型付けの言語なので、I1型の変数i1のメンバーへのアクセスとして 記述可能なのは、I1型のメンバーだけ。 i1には実際はI2型の値が入ってるんだからI2のメンバーも呼び出せるべきだとか言ったって、 実行時にi1にI2型の値が入ってるかどうかなんてコンパイル時にはコンパイラに分かりません
>>244 実装はどうなってるか知らないけど
同名のメソッドを継承でオーバーライドされたらそっちのメソッドが呼ばれる
非ジェネリックメソッドをジェネリックでオーバーライドしてたら
ジェネリック版が呼ばれる
それが下位のInterfaceで操作された場合でも
おいおい、質問者のケースはインターフェイスの継承だから オーバーライドなんかされてないってw
> ・i.MoveNext()により、実際にGetEnumerator()が呼ばれる。 ? GetEnumeratorはここではもう関係ない iという少なくともIEnumeratorを実装しているオブジェクトのMoveNextを呼び出してるだけ > ・iはIEnumerator型(非ジェネリック)であるが、i.MoveNext()で実際に呼ばれるのは、 ジェネリック版のGetEnumerator()のほう。 なんでGetEnumeratorがでてくんの? IEnumerator<T>のMoveNextっていうなら分からんでもないけど
おそらくyieldで記述と実行の順序が見た目と異なる事を言ってるんだろうけど 明示的なインターフェイスの実装は最初のレスでも有るように(IEnumerable)collectionの時に呼ばれるだけであって 結局はIEnumerator<T> GetEnumerator()へのラッパーだし、IEnumeratorに入れようがインターフェイスは全て仮想呼び出しだし もはやジェネリックがどうとか関係ないな
>>244 ①でジェネリック版のIEnumerator(を実装したクラスのインスタンス≠MyCollection<int>)を返している
②ではそいつのMoveNextを普通に呼んでるだけ
そこで渡されているIEnumeratorの仕様に沿ったオブジェクトは
MyCollection<int>と別のクラスというのが
間違えやすいポイント
public IEnumerator<T> GetEnumerator()の
ジェネリック版のyield returnを含んだブロックから全然別のクラスが生成されていて
そいつのインスタンスが渡されている
デバッグでステップすると public IEnumerator<T> GetEnumerator()の中を動いてるけど 実際は別のクラスが作られていてその中を実行してる このクラスはコンパイル時に自動実装される 以前は別クラスを自分で作らなければならなかったけど yield returnが実装されてから楽になった
たくさんの回答ありがとうございます。
「i.MoveNext()により、実際にGetEnumerator()が呼ばれる」と思った理由は、
>>253 が書いてくれてるように、
デバッガでステップ実行すると、MoveNext()を呼んだタイミングでGetEnumerator()の中に入っていくためです。
皆のおかげで、その考えが誤りであることがわかりました。
ただ、
IEnumerator i = collection.GetEnumerator(); // ①
i.MoveNext() // ②
については、まだイマイチ自信がないんですが…。
全員のレスをつなぎ合わせて、下記のように理解したのですが、あってますでしょうか?
①で、
・GetEnumerator()により、ジェネリック版IEnumerator<T>を実装したクラスのインスタンスが生成される
・そのクラスは、ジェネリック用と非ジェネリック用の2つのMoveNext()を持つ
(IEnumerator<T>はIEnumeratorを継承しているため、両方のMoveNext()が作られる)
・ジェネリック用のMoveNext()の内容は、ジェネリック版のyield returnブロックから生成される
・非ジェネリック用のMoveNext()は、ジェネリック版のMoveNext()のラッパーである
②で、
・iは非ジェネリックのIEnumeratorなので、非ジェネリック用のMoveNext()が呼ばれる
・それにより、ラップされているジェネリック用のMoveNext()が呼ばれ、結果として、
「ジェネリック版のyield returnブロックから生成された処理」が呼ばれる。
以上、よろしくお願いします。
>>254 違う
MoveNextの実装は単一で共通
いやいや、「ラッパー」って言葉を誤用している点を除けば質問者の
>>254 の方が正しいからw
現実のほとんどの実装ではIEnumerator.MoveNextは
IEnumerator<T>.MoveNextをそのまま呼ぶだろうけど、
やろうと思えば別の実装をすることだって可能に決まってる
>>254 素直に考えてほしい
①で iに入れたのはジェネリック版
② movenextはジェネリックでも非ジェネリックでも共通
>>256 残念だけどこれを読むように
https://msdn.microsoft.com/ja-jp/library/78dfe2yb (v=vs.110).aspx
>>257 なんかよー分からんこと言ってるけど、君こそ
>>240 のコードでも見た方がいいと思うよw
IEnumerator<T>.MoveNextはIEnumerator.MoveNextをオーバーライドしてるわけじゃありませんw
共通って言うとなんか分かりづらい オーバーライドなんて257は一言も言ってないようだが… interface IEnumerator { object Current { get; } bool MoveNext(); void Reset(); } interface IEnumerator<T> : IEnumerator, IDisposable { new T Current { get; } void Dispose(); } IEnumerator<T>自体はMoveNextを定義しない 派生元のMoveNextをそのまま公開する なので、IEnumerator<T>の実装はこんなんになる class HogeEnumerator : IEnumerator<T> { public T Current { get { 略 } } object IEnumerator.Current { get { return this.Current; } } public bool MoveNext() { 略 } public void Dispose() { 略 } } なので、 IEnumerator<T> ia = obj.GetEnumerator(); IEnumerator ib = obj.GetEnumerator(); iaでもibでも同じMoveNextが呼び出される
>>258 誰もそんなことについて言ってるのではないよ
トンチンカンなレスありがとう
MoveNextは別々に必要ない
そもそもシグネチャーは一個だけだから
必要なのは一個だけだと言うこと
さっきのページの変な訳を見てよく考えてほしい
>>259 君も何を言いたいのかさっぱり分からないが、
>>255 は
>>254 に対するレスだということを理解しているかな?
>>255 > 違う
> MoveNextの実装は単一で共通
一体全体なにがどう「違う」というのか。是非説明してみて欲しいね
しかしあれだ、「ほとんどの実装でそうなっている」ことと、「必然的にそうなりそれ以外の実装はありえない」 ことの区別のつかないレベルの人が偉そうに回答する側に回ってはダメだと思うw
>>261 さっきのページの説明とコードをぜひ読んでほしい
>>254 まずコードの見た目と挙動が異なるのはyieldが糖衣構文で
>>252 が言うように
IEnumerator<T>を実装するクラスをコンパイラが生成してコードがすり替わるから
これはジェネリック云々とはまた別の話、ILSpy等で糖衣構文のデコンパイルをオフにして見てみると良い
私がラッパーと書いたのはIEnumerable.GetEnumerator()の話で、そのコードでは呼び出されていない
これは((IEnumerable)collection).GetEnumerator()などとしてIEnumerable型でコールされた時に呼び出されるだけのもの
仮にそう書いたとしてもyieldで実装されたIEnumerator<T>メソッドへ投げているので、結局iの中身はIEnumerator<T>
あとは中身のIEnumerator<T>がIEnumerator型で操作された時の実装による、明示的なインターフェイスの実装があればそれが呼ばれる
>>262 明示的実装をすれば別にもできるけど、現実にそんな紛らわしく無意味なことをする馬鹿はいない
ここは初心者スレなんだからそんなくだらない揚げ足取りは無視してよい
>>265 いやいや、揚げ足取りをしてるのは
>>255 の方だと言ってるんだけどw
だから何が「違う」のか言ってみって
>>266 何がそんなに気にしてるのか知らないが、少なくとも質問者のケースでは違うと言ってるだけだぞ
質問者の元のコードではIEnumeratorは明示的実装されていない
わかる?
言葉足らずかもしれないから補足しとくか
質問者の元の
>>240 のコードではイテレータ構文によって自動生成されたIEnumerator<>実装が返る
この実装において、MoveNextは非ジェネリックもジェネリックも共通のメソッドが呼ばれるようになっている
>>254 で質問者はMoveNextがジェネリック版と非ジェネリック版の2種類の2種類生成されていると思っているようだが、これは誤りだ
これでいいかな
質問者です。
>>264 >>251 でラッパーと書いていただいた意図を取り違えてました。失礼しました。
-----
「MoveNextの実装は単一で共通」という点についても、理解できたと思います。
IEnumeratorとIEnumerator<T>で MoveNext()のシグネチャは共通であり、処理内容的にも
イテレータをひとつ進めるだけなので、わざわざ(明示的に実装するなどして)2つを別々に作る意味はない。
現に、yieldで自動生成されるMoveNext()も、共通のメソッドになっている。
…ということですね。
皆さんのおかげで、今回の質問はほぼ解決できたような気がします。
どうもありがとうございました。
# それにしても、「C#はシンプルだから初心者にもわかりやすい」とか聞いたことがありますが、
# 実際にはずいぶん難しいですね。
# 特に「インターフェイス」が苦手です…。
シンプルってのはC言語みたいな言語の事を言うんだよ C#は安全性や生産性が売りの言語であってシンプルが売りではない
たまにScheme使ってる身からするとC言語なんて複雑性の塊でしかない
言語仕様がシンプルって触れ込みで本当にシンプルなものにはお目にかかったことがない brainfuckくらいかな go、てめーは特に駄目だ 落とし穴ばっかり掘りまくりやがって
enumerator は、.NET Framework 1の設計ミスと、それを取り繕う互換性維持のためだけのダーティーコードが分かりにくくしているだけ。
ただのIteratorパターンを分かりにくいって言われてもw ジェネリックのない.NET1.xの段階でリリースしたのは「戦略ミス」だったんじゃないのかって言いたいのなら それはそうかもしれないけど
>>277 気づいてないみたいだけど、まさにそういう自己正当化のことを「言い訳」っていうんだよw
コンボボックスのアイテムを他のコンボボックスに書き換える方法 これより簡単な方法って存在しますか? for (int j = 0; j <= combobox1;.Items.Count-1; j++) { combobox2..Items.Add(combobox1.Items[j]); }
バインディングしてるなら comboBox2.ItemsSource = comboBox1.ItemsSource; とかでもいけるけど
ItemsSourceじゃなかったDataSourceだった
GroupByするのですが、ソートした結果がほしいのです。どうすればいいでしょうか?? 例えば、Personクラスがあります。 class Person { public string FirstName, public string LastName } LastNameでグループ化しますが、persons.GroupBy(p => p.LastName); この各グループ内でfirstNameでソートした状態でグループ化したいのです。
>グループ内の要素は、source に出現する順序で返されます。
とあるから、GroupByする前にfirstNameでソートしておけばいいんじゃないの?
https://msdn.microsoft.com/ja-jp/library/bb534501 (v=vs.100).aspx
先にfirstNameでソートしてからGroupByすればいい GroupByは元の順序を変えないから
>>286 ,287
なるほど。そうことですか。
ありがとうございます。
業務系のアプリ作るときって、 例外処理どれくらいやるのですか? 個人だとざっくり例外キャッチしときゃいいやみたいな感じだけど、このケースはこういう可能性があるとか全部考慮しないといけない?
例外処理で最も大事なのは例外を漏らさないことではなくどこで例外を漏らしても問題のない作りにすること それを徹底してさえいれば例外は最終的に一番上のイベントハンドラでキャッチしたりWebならフレームワーク任せにしても基本的に問題ないはず それをあえて例外の発生源により近い場所で処理するのは、あくまでユーザーの利便性を高めるためのオプションであって、それが必須であってはいけない
>>289 必要に応じて、としか言いようがないのでは?w
なんか無駄にハッスルして(笑)例外処理にこっちゃう人がたまにいるけど、
ぶっちゃけそれでプログラムの本来の効用が上がるわけじゃないんから必要以上に凝るのは
バカげてるとは言えると思う
例外はトップダウンで考えるのが効率よく堅牢なソフトウェアを作るコツ 上の方でまとめてリトライすりゃ済むんなら下で細かいケースをいちいち個別に考慮する必要はない
例外は呼び出しルートでメッセージに変換して出力 要件で明確にこういう障害の時はこうすると決まっていない限りは絶対に個別に処理してはならない 仕様で決まっていないのに処理するということは例外を握りつぶすことと同じだ
ありがとうございます。 例外のメッセージ出されても意味分からないから、分かりやすいメッセージにしろとか、考慮不足なんじゃないのって言われて、まじか、想定できる箇所全部処理させる気か!?みたいな
golangはそういう思想で作られてるな あれは偏執的過ぎる気がするが
日本人は末端から考えるのが好きだから、例外をその場で全て個別に適切に処理しようとしてコードが膨れ上がり 握り潰しだらけでデバッグ不能なゴミが出来上がることが多いよね 未だにJavaの検査例外を有効であると信じてる人も多いし
むしろ集約例外ハンドラ使えとかなるべく呼び出し階層の上の方で処理しろって言ってる奴を見たら、 ああこいつは何も分かってないなと判断して眉にツバして話を聞くことを勧めるw
>>297 ついでに目玉と心臓も潰して電車に飛び込んで死ね単芝
Windows10での話なんですが、 フォームの左上とクライアント領域の左上の差を取得しようとPointToClient(Location)を実行するとおかしな値を返してきます 具体的にはフォームの外枠は1pxでタイトルバーの高さが31pxなので(-1, -31)を返さないとおかしいはずなんですが、(-8, -31を)を返してきます (これはVSのデザイナなどで表示されてるWindowsベーシックスタイルのタイトルバー高さ、枠の幅なので多分そちらが返ってきているのではと思ったのですが) 表示されている状態に沿った値を取得する方法はないでしょうか
すみません別の単語で検索したら自己解決できました DwmGetWindowAttribute()をつかう手法でやります
>>294 考慮不足なんじゃないかというのは、全ての例外を処理しろって事じゃないぞ?
その場で処理するべきかはケースバイケースだが以下は全て考えておくべきだって事だ
発生しうる例外は何か?
どの例外をその場で処理するべきか?
上に投げるのが適切としたのは何故か?
考慮不足じゃないかと言われたら相手が納得するまでこれらの考慮した事を説明すればいいだけ、相手と判断・認識が違っていてもより具体的な話が出来るだろう
もしそれが出来ないなら実際に考慮不足だからもっと考えるべき
質問者がどういう文脈のどういうニュアンスで「考慮不足」って言われたかなんか お前に分かるわけねえだろw エスパーか何かのつもりかねw っていうか、何を偉そうに威張り散らして講釈垂れてるのかねw こういう奴心底大バカだと思うわ
アプリが落ちたら考慮不足なんだよ! 顔面グチャグチャにされてぇのかクソが! ってセリフを大手で聞いたwww
System.OutOfMemoryExceptionで落ちても? アプリの全域で落ちる可能性あるけど?
お前こそ密室で発言した気になってろよ 明日は出社させねえからな
要件になってないのに考慮も対応もない とりあえずで例外を捕まえるやつは転職してくれ
ん?例外はとりあえず呼び出し元にthrowしとけばいいってこと? それとも下手にcatchするなってこと?
そのレベルで対処が必要とされているものだけ拾え 想定してないものまで拾うな握りつぶすな
>>310 クラスを使う側に回ったとき何でもかんでも例外で返すクラスとそうでないクラスと混在してて使いにくいんだよ死ねよ
って感じ
100箇所で呼び出したら100通りのルートを確保して死んでる
C#でエクセル出力したいんですけどどうしたら良いですか?
>>312 NPOIが正解だって書いてあったの見た
>>312 ざっくりしすぎ。
エクセルファイルを作成するだけならIOクラス、エクセルファイルを操作するならExcelクラス
WebBrowserで動的に変化するページのソースを取得したいのですが、 Browser上のボタンを押す→動画が再生される(HTMLが書き換わる) といった処理がBrowser内でおこなわれているはずなのですが、 IEのソースを表示ではHTML書き換え前の状態、Chromeの検証(デベロッパーツール)の elementsでは書き換え後の情報が見れたのですが、 IHTMLDocument2 HTMLDocument = webBrowser1.Document.DomDocument as IHTMLDocument2; string content = webBrowser1.DocumentText; としてみても取得できませんでした。 何か他にいい方法はないものでしょうか?
Selenium使った方が楽よ もしくはChromeのエクステンションとして作る
.Document.Body.Parent.OuterHtml
<<<C++>>> } 0≦1.333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333*∞ E,TO,LA,1,35,8,15,2,0, [EMO]-#0.*88871~
>>312 Open XML SDKでExcelファイル作ったけど面倒だったので、次やるならClosedXMLかNPOIだな
お仕事だと俺社環の都合で前者はOKで後者がNGなのが辛い
public class TestClass { public enum PublicEnum { One, Two, } //列挙型 private int privateField; //フィールド public int publicProperty { get { return privateField; } } //プロパティ public TestClass(int val) { privateField = val; } //コンストラクタ public string publicMethod(string str) { //メソッド str = "publicMethodが呼び出されました。" + str; return str; } public string publicMethod() { return publicMethod(""); } } class Program{ static void Main(string[] args){ Type typeTC = typeof(ConsoleApplication1.TestClass); MemberInfo[] memberTC = typeTC.GetMembers( BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static | BindingFlags.DeclaredOnly ); foreach (MemberInfo m in memberTC) { Console.WriteLine("{0} - {1}", m.MemberType, m.Name); } } } このmemberTCを、typeTC.GetMembers( BindingFlags.Public ); にすると、 NestedType - PublicEnum しか表示されません。 同じようにNonPublicとか他のメンバで試すと何も表示されなくなります。 何かやり方間違っていますか?
> Public または NonPublic と共に、Instance または Static を指定する必要があります。指定しない場合、メンバーが返されません。
>>316 自分の実力ではちょっと敷居が高そうですが、Seleniumを使ってみようと思います。
Chromeの拡張機能を使いたいのは山々なのですが、動画のURLを再生ソフトに渡すために
外部プログラムを起動するにはかなり厄介そうなので諦めました。
>>317 やってみましたが無理でした。
レスしてくださった方々、ありがとうございました。
DOM書き換えはソース書き換えじゃないからな ソース見れる場合は独自にDOMからソースを組み立ててるだけじゃないかな? IEがそういう機能提供しているとは思えない
例えば整数の配列(リスト) nums = {4,1,9,7,5,3,1,3,6,7,2,1,3,5,2,6,...} というのがあって、 これを出現数をキーにしてグループ化するには nums.GroupBy(x => x) .Select(x => new { count = x.Count(), number = x.First() }) .GroupBy(x => x.count, x => x.number) としたらできたんだけど、それぞれ各グループのソートもしたい 出現数順なら、単純に最後に OrderBy すりゃいいんだろうが やりたいことはそれじゃない 説明くどいかもしれんが、表にすると 出現 数グループ ---------------------------------- 1 回 {4, 9} 2 回 {5, 2, 6} 3 回 {7, 1, 3} . . . . . . . . の表の右側の各配列をそれぞれソートしたい まあ foreach 回せばいいんだろうが、後学のために もっとスマートな方法があれば知りたいなと
>>325 もう少しルールを明快に。
エスパーやないからな
nums.OrderBy(x => x).以下同じ
>>326 期待してるのは、俺がよく知らないLinqのクエリ演算子
使って一発でって感じだけど
でも別に唯一無二の正解を聞きたいわけでもない
他の人はどうやるのか知りたいだけで
細かいルールとか気にしなくていいよ
>>327 やっと意味わかった
最初にソートしろと
若干不安が残るがそれで順序保証されれば
話が早いな
そろそろ覚えたコードでなんか作ったら? 知識はあるけど知恵が足りてないように見える プログラム言語研究会ってわけじゃないんでしょ?
フォームでタッチパネル対応アプリ作りたいんですが マルチタッチのイベント拾うにはどうしたら良いでしょうか
Win8以降ならWM_POINTERやらDirect Manipulationやら色々増えてたりもする
>>319 Open XML SDK でエクセルファイルとか罰ゲームかよww
感覚が麻痺してるみたいだけど、Excelを吐く仕事の時点で十分罰ゲームだから
なんで? データは二次利用してなんぼでしょ Excelみたいな優秀なGUI備えたソフト自分でつくれんの?
>>338 なんでも叩ける俺スゲー君だから相手にしなくていいよ
csvが一番簡単 Excelが必要なら仕方ないけど
Excel.Applicationを使わないと対処不能な要件が入ってくると冷や汗が出る
Excel OnlineってAPI公開してないんだっけ?
エクセルを使うとロクなことがない。 エクセルの自由度を狭めるという、 誰のためか分からんかことになるからだ
NPOIは結構バグあったな 自分も次やるならClosedXMLだな ExcelCreatorは障害報告するとバージョンアップで直りますが多かった 要件によっては未だにPIAもあり
>>336 セルの指定がR1C1使えずにA1限定とか本当面倒だった
PIAでオートメーションしかやったことなかったわ ClosedXMLググってみるとなんかよさそうだねいいこと教えてもらった まあ今のお仕事では使うことはないだろうけど
NPOIとかClosedXMLとか この辺は単純にファイルの中身読み取って書き換えるだけ だからついでにEXCELでやるみたいに印刷してとか言われると困る
Excelだから再計算もやってよとか後で言われるとね・・・
いやそれはほとんどの場合正当な要求でしょう 計算式入れておけばいいんだから
>>351 >>319 は Excel 本体は使わないって話やで
計算式の処理までエミュレートすると言うなら応援だけはするけど
>>352 何言ってるかよく分からんけど、ワークブックはエクセルで開く前提で作るんでしょ?
「再計算もやってよ」ってユーザーさんの要望の意味は、マニュアルであるセルの値を変更したら、
その系列の合計とか平均値とかが自動的に再計算されるようにしてって意味じゃないの?
Officeがインストールされている環境ならNetOffice使えばOK 印刷もできるし互換性の問題も絶対に発生しない COM開放なんかも何も考えずに使えるし楽勝 あとExcelだけじゃなくてWordやOutlookなんかも操作可能だぞ
再計算させると開くのに時間かかるからあらかじめ計算した値を入れといてちょうだい 計算させてから保存するだけだから簡単でしょ?
>>354 それってサーバーで使える?
どういう仕組みなんだ
>>356 内部的にCOM使ってるだけのラッパー
サーバーでも当然使えるけどExcelがインストールされてなきゃダメだよ
なんだCOMラッパーか それじゃサーバーではまともに使えないな
>>357 > サーバーでも当然使えるけど
使えねーよ
サーバーだと大抵サービスで動かすからちょっと設定しないとダメだし保証対象外
ビットコインとかやりたいんですけど、apiとかの取扱いについて勉強するにお勧めのサイトか書籍教えてください。
C#は優秀だからこだわりたい気持ちはわかるけど勿体無いな エコシステムまで視野を広げると様々な言語を使えるようになった方が絶対に得する
証券会社が提供してるビットコインのWebAPIを呼び出すってこと?
>>336 慣れれば何とかなる
二度とゴメンだがな(´・ω・`)b
>>336 OpenXMLでWordよりは128倍マシ
まぁ、今度はClosedXML にすると思うけど(´・ω・`)b
キー入力をエミュレートする方法教えてください string a = e.KeyCode.ToString(); a="{"+a+"}"; sendkeys.send(a); だいたいこういう流れでやってるんですがCTRL SHIFTができません 装飾キーは+ ^をつければいけるのですが単独で送る方法がわかりません あと数字キーは D1, nampad 1となるのでできません
>>368 普通は仕様を公開してるだろ
HttpClientでその通りにリクエスト送るだけ
>>369 zaifかビットフライヤーです!
どちらでもいいですが、自分で接続できるようになりたいです。
>>370 見てもわからないでやんす!
>>371 自分で理解できないものでビットコインを取引するつもりなのか
こわー
>>372 だから、理解しようとしてるんじゃないですか。そんな風に馬鹿にするなら情報をくださいよ
>>373 UWSCを使ったら負けかなと思っている
ああ、話が理解できなかったけど、取引エージェントを作りたいってことなのかなぁ。 情報は知らないから出せないけど。
Bitcoin bitflyer api C#とか、Bitcoin zaif api C#で検索すると、日本語の例も結構出てくるけど。
>>370 いやどこの取引所でするつもりかって聞いたつもり。?が抜けてたスマン
さすがに取引所間の裁定とかはできない気がするんだけどどうなんだろう。 プライシングがちがうってことってあるの?
各取引所のサイトでの取引はほとんどクソ仕様なんで取引エージェント作って売ったら馬鹿売れすると思うで
>>366 日本Microsoftが担当した時点で終わったんだろ
>>381 そうなの?知らなんだ
無駄な帳票文化だからな、日本は
自己解決しました。 webkit phantomjs Seleniumなどを試して納得できることができなかったため、 もう一度調べてやってみたところ IHTMLDocument2 HTMLDocument = webBrowser1.Document.DomDocument as IHTMLDocument2; string content = webBrowser1.Document.Body.OuterHtml; こうすることでcontentの中に意図するものを入れることが出来ました。
非同期でフォームをフリーズ?させずにコントロールをいじることはできないのでしょうか? Invokeを使ってもつまるところ一緒だと思うのですが、何か方法はありませんでしょうか。 例えるとタスクマネージャのような感じです。 あとは、ListViewにアイテムを追加する・・・のような。
>>387 コレを期に、wpfやuwpなどに移行してみたらどうかね?
何事も始まりがある プロジェクト3~4実験的に試してみれば
複数の人とスカイプでやりとりをしています。 そのうち、特定の人との送受信を行ったファイルを一度に取得するプログラムを組んでます。 ただ、スカイプの仕様で添付ファイルの保存パスは一律同じです。 何か良い方法はありませんか?
何を言ってるかわからないです 仕様書を提出してください
ファイル日時とファイル名ぐらいしか判別方法ないんか?
>>393 スカイプで
私と、一郎、二郎、三郎の3人とメッセージのやりとりをしているとします。
写真・動画・PDFなどのファイルをそれぞれとやりとりしています。
二郎とのスレッドの中でやりとりをしていた
ファイルは大切な内容を含むのでまるごと保存したいと思いました。
ただ、やりとりをして長い為、とても手動では全部を保存する事が出来ません。
そこでプログラムを組んで一発で自動で保存してやろう!
と思った次第です。
保存したいのはあくまで二郎だけであって、一郎・三郎と送受信したファイルは保存したくありません
課題:Skypeでは全員のファイルの保存先が同じパスになっている、
という事です。
こんな場合にはどの様にすればよいの?エスパープログラマさん助けてください!
それはプログラマーの技量云々の問題じゃなくてskypeの仕様上どうしようもないんじゃ 同時に複数とやり取りしてなきゃファイルの作成日時で分別可能だが、正確な方法はないだろ
ファイル名がある履歴を解析できればなんとかなんのか? 取得できなきゃ無理だな
>>396 >>397 Windows APIを使えば実装できると思ってますが
どうでしょう?
>>398 WindowsAPI云々じゃなくて
「skypeの仕様上」それはできないと言っているんだけど理解できないの?
思い込みに付ける薬はない 死ぬまで思い込んだままだ
ファイルのダウンロード履歴のテキストがあって解析できるならあるいわって感じだな skypeビジュアル的に読み取ってOCRっていうとプロの仕事だな
>>398 なにか具体的な方策があるならいいけど?
windowsAPIっていってもごまんとあるわけでどのことか分からんが
俺にはよい方法は思い付かない
Windows API で人の操作をエミュレーション ユーザを選択 → スレッドを開く → 画面を上にスクロール → 画像を見つける → 右クリック → 所定フォルダ(ユーザ名)で保存 で実現できそう。
>私と、一郎、二郎、三郎の3人とメッセージのやりとりをしているとします。 4人じゃね?
Skype何年も使ってないから仕様は覚えてないが、チャットログがあれば 受信したファイル名の横にファイルを開くとかファイルを保存とかあるんじゃねえの? あるいは、拡張子が表示されてたように思う ログから、拡張子がついている部分(ファイル名+拡張子)だけを抜き出してListにでもいれて、 ファイルががあるフォルダを順次検索していけば抜き出せるんじゃね? 一時保管されてるファイル名と、送られてきたファイル名が違うなら、受信日時で大まかに振り分けるしか無いだろうが
>>409 試してみるわ。サンクス
>>406 あほ。
妙に原始的な話が続くのが謎だけど、WindowsならAppDataにSQLiteファイルがあるでしょ? 古いのはmain.dbのTransfersテーブル、最近のVerはmedia_messaging\storage_dbの方に情報あったような気がするが
>>406 > 「一郎、二郎、三郎」の3人
だれも全員の人数なんて尋ねてないだろ
真面目に国語の勉強からやり直した方がいいぞ
せめて新聞でも買って毎日読め
短絡的に考えると私、一郎、二郎、三郎の4人になるが常識的に考えると「私」は自分自身のことになるので普通は除外する 4人と言っているのは相当日本語が不自由か頭が固すぎるかのどちらか
>>413 > スカイプで
> 私と、
> 一郎、二郎、三郎の3人「が」
> メッセージのやりとりをしているとします。
なら間違えようがないんだが
> 私と、
> 一郎、二郎、三郎の3人「と」
と書いてるから
> (どこかの誰かが)
> 私と、
> 一郎、二郎、三郎の3人「と」
と解釈する余地を残してしまった
それでもその下の文章を読めば私と三人のやり取りだと言うことはわかるはず
内山田洋とクールファイブは合計6人だったな どうでもいいけど
>4人と言っているのは相当日本語が不自由か頭が固すぎるかのどちらか うん、4人と言ってるやつは結構頭やばいヤツだと思う
「あなたと私」=2人。「あなたと私と彼」=3人。「あなたと私と彼と彼女」=4人 だから「私と、 一郎、二郎、三郎 」も4人が正解だが、何故か3人と錯誤する人も少なくない これは名前の「一郎、二郎、三郎」につられて居るんじゃないかと仮定する 「私と、二郎、三郎、四郎」・・コレなら多くの人は4人と認識するんじゃないかな と、屁理屈をでっち上げてみたがどうだろう?
結果として人物は4名居るけどどの言葉がどこに引っかかるかを読みとればいいだけだよ 意図をくみ取る力も大切
国語の宿題はもう終わった? そろそろ算数の宿題しない?
じゃあ、スレタイと関係ない話題を延々続けてるのはアスペってことでいいの?
>>1 >C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>私と、一郎、二郎、三郎の3人とメッセージのやりとりをしているとします。 やりとりをしている対象は3人だろ 4人とかいってる奴は糖質で自分と脳内で会話してる基地外
>>406 も頭悪いけど、反論してる連中もアホだね
>>395 の言う3人とは「私」から見たやりとりの相手の人数のこと。
こう言えば
>>406 がいくらお馬鹿でも理解するだろうに、
無駄に喧嘩腰に容量を得ないことをいうから無駄にスレが荒れる。
そんな奴に限って俺は正義の味方みたいに思ってるから始末に負えないね
>>428 こんなにも態度のでかい質問者はなかなかレアだな
>>430 >
>>395 の言う3人とは「私」から見たやりとりの相手の人数のこと。
みんなそこの解釈でもめてるのに上から目線でレベルの低い提案されても困るわ w
これだから自然言語は嫌なんだ お前らプログラマなんだからコードで会話しろよ
>>436 それはコストが高い
目的としては俺らと同じ世界に生きてたくないって認識であってるなら代替案は出せるよ
webアプリを作る際に、ajax control toolkit って今でも使っていいもんなんでしょうか? 使えるんでしょうけど、一般的にメジャーな技術としてと意味です。
NET3.5との組み合わせだったらサポート内かも知れんが 別段の理由がなきゃNET4.52以降で作ろうな。 それに相当する機能が最初から含まれてる
AJAX Control Toolkitがどうというより、今時のWebはビューにサーバーサイドのフレームワークに合わせた仕掛けを入れるということ自体を一切しないよ 基本的にPHP的なプリミティブな作りにして必要に応じてJSON Web API+JavaScriptってのが今風
笑われるようですが、VS2008の既存のWebアプリをVS2013に移植する作業をしています。
>>439 CalendarExtenderがツールの中に見当たらないようなので。
チャートとかは標準で入ってるようですが。
>>440 やっぱり変わってるのですね。
JSON Web APIですか。調べています。
関数AでWebBrowser1にURL入れて DocumentCompletedで要素を抜き出す、抜き出した結果を関数Aの返り値として使いたいのですが、 DocumentCompletedイベントが発生して要素を抜き出すあいだ、関数Aを止めとかないと戻り値として使えないですよ? 非同期処理とかスリープ試した見たんですが、うまくいかないんですが、いい方法無いでしょうか?
var ready = false; WebBrowser1.DocumentComplated += (sender, e) => { .... ready = true; };
while(!ready) Thread.Sleep(0);
半角の!使ってると投稿はじかれる? ちなみに、これだとイベントハンドラーがお漏らしするw
2chで効果的に回答をもらう方法に乗せられたみたいで癪だが、 頼むからWaitHandleを使ってくれ
待機ハンドルってResetしたのと同一スレッドでも待機できたかな それを言ったらSleep中のスレッドのイベントハンドラが呼び出されるかどうかも怪しいがw
>>445 これスレッドをスリープしてるんでDocumentComplatedも止まってませんか?
デバッグかけてみたんですがsleep淡々と繰り返してるみたいなのですが
戻り値がjsonのAPIを叩いて値を得るには同じ型のクラスを作ってそのオブジェクトに格納する感じでしょうか?
ブラウザとDocumentComplatedを別スレッドとして処理し、 メインのスレッドをスリープで解決しました。
>>454 私は、hogeとhageの二人と酒を飲みました
私と、hogeとhageの三人で酒を飲みました
「は」の時は自分以外の人数となり、「と」の時は自分を含む人数となる
つまり間違っているのはアンタの方だなw
>398 :デフォルトの名無しさん (ワッチョイ 9f19-q+YL) [sage] :2017/06/25(日) 21:56:53.75 ID:yN128eA50 [3/3] >Windows APIを使えば実装できると思ってますが >どうでしょう? こんな発言してるお前にだけは言われたくないわw
>>455 バカ
私と、hogeとhageの二人で酒を飲みました
でも意味は通じる。
レガシーASP.NETマイグレは難しいよなぁ Viewを捨て去りたいけどViewに密結合して切り離せないロジックが多すぎる
>>459 一考したら通じるけど曖昧で遠回りなんだよ
わざわざ考えなきゃならない言い回しをするのは文学だけで十分
複数人でプログラムを設計する時に大切な事は明確な意志疎通
誰もお前の思考は覗けない
>>459 「私とあなた」を一人という人は先ず居りませんわw
なんか意味不明な規制やっと解除されたか
>>451 やっぱりイベント起らないよねw
たぶんApplication.DoEvents呼んでやれば起こると思うけど、なんか不格好だよね
MVCじゃない方のレガシーASP.NETってなんで普及してしまったんだろう 普通にPHP的な作り方の方が遥かにわかりやすいと思うけどな HTMLのフォームのPOSTとかはホスト系で緑色の文字のAAでGUI作ってた時代の考え方と基本的に同じようなもんだから、 決してドカタ開発に馴染みのないスタイルってわけじゃないのに
>>460 レガシーじゃないasp.netって何だ?
>>468 Web formsのこと?Windows formsで飯食ってたやつらが手出しやすいようにってことじゃねーの?
>>468 そりゃお前webサービスがボタン一発コンパイルでできる超絶機能だし
phpは結構わかってないと動かせないよね
レガシーなのかレガシーじゃないのか知らないが ASP.NET、HTMLデザイナーと.NETプログラマとで、上手に分業できるいい言語だと思うけどなー
質問失礼します PC(C#アプリケーション )から外付けのIOポートの切り替わりを確認したいのですが、どういった感じの処理をすればいいでしょうか IOポートの確認はできる前提として、それが一定の周期(100mS)できちんとON/OFFして動いているかを判定したいです 参考意見で構いませんのでよろしくお願いします
>>474 ポート確認用の専用タスクを作って、100ms毎にポートを確認し
変化があったらイベントを発行するのが良いんじゃないの?
>>473 それはMVCの方だ
自動生成コードやインフラコードでHTMLかゲロまみれになるのが従来の方
>>474 質問が曖昧過ぎるけど、入力の周期とかデューティー比を監視したいってことなら、
GPIOの状態の取得方法(ボードの仕様)にもよるし要求される精度にもよるけど、
Windowsだけでは難しいと思った方がいいんじゃない?
windowsともかかれてないからあいまい PC上でc#が動くリアルタイムOS使ってるかもしれない
>>474 です
曖昧な質問ですみませんでした
まだ検討段階でWindows機のアプリケーションからの操作で外付けのマイコンの状態を簡易的にモニタリングしつつ処理をと考えてたのですが、例えばそういうことをするにはどうしたらいいのか参考までにお聞きしときたかったのです
>>476 さんのような形になるのかなと考えてはいたのですがイベント発生の時間差で判定するのか、はたまたもっといい方法があるのか事前に知っておきたかった次第です
最近のICEは、インターフェイス内にCPUが入ってて、 そいつが仲介してる。 インターフェイスからPC間はUSBシリアル通信で、 インターフェイスからマイコン間は低レベルシリアル通信をしてるな。 リセット信号でマイコンを止め、低レベルシリアル通信で、 中身をトレースし、インターフェイス内にいったんキャッシュし、 そいつをPCに送ってる感じだな。
>>481 WindowsはリアルタイムOSじゃないので、アプリでポートをポーリングしても、なんとなくの時間精度でしか監視出来ないよ。
一定周期でバッファにサンプリングしてくれるIOボードでも使えば良いんだろうけど。
「マイコンがシリアルポート互換のパルスを出し続ける」なら、 安く買える『FT232の基板』をつないで、でSerialPortクラスで受信できる
FT232系はニセモノ注意! うちもえらい目にあったよ・・
>>485 FTDIの製品シェアも実績もあるからお宅が何か勘違いしてるだけだと思うよw
FT232って複数デバイスの制御できない って噂あるけど本当? 全然問題なく制御できてるんですけど
FT232を複数枚繋げて同時制御だ 日本語意味不明スマン●| ̄|_
COMポート番号でしか識別出来ないから、 機器が入れ替わってもPC側からじゃわからんってだけじゃね?
>>487 複数のデバイスが全部同じ識別情報(VID, PID, iSerialNumber)を持ってたらそうなるね
>>489 gpio付きだからそれは解決できる
Driver も複数デバイス握れるし
(プロセスは分けるけど)
何だろうか???
***SLAMO*** } 000-"F","TAP","0","1M","L","E-07"/0B"[9BA%]"^"2*73B"="0"/"9GA" 001-"Do"[[[%9DE=HUF%%!%$0B1OTU"NE"]]]<\b> 002-<<%!!!HNDEL%!0DAI@$7[1B]!0#!@>> 3000-{{1\B%HUF!0$$\%6/0Q\%6/GA[[7BU]]%9TE!%$en$}} --- [[[C%%]]] } 000-"5802"/"α"="0.1888412376155482"%en{
複数の非同期スレッドからひとつのメソッドを実行したいのですが、このメソッドが実行されているとき(ビジー状態とします)他のスレッドからの呼び出しが実行されないようにするにはどうしたらいいでしょうか ただその呼び出し自体はタスクが溜まっていくかのようにメソッドのビジー状態がとけたら順次実行させたいです どうしていいかわからず非常に困ってます。。どなたかお助けください
>>493 複数の非同期スレッドがそのスレッドAを叩くんじゃなくて
スレッドAが複数の非同期スレッドを訪ねて動くようにしろ
queueに要求積んで 実行結果は他の何かに渡してもらうとか (CallBack関数実行してもらうとかでも良いだろうし)
わからんけど 非同期スレッドがメソッドを呼ぶときはフラグだけ立てる タイマーでフラグをチェックしてフラグが立ってたら順次実行
素直に質問を読むかぎり
>>494 の言う通り排他ロックで解決する問題としか思えんけど
皆さんアドバイスありがとうございます ちなみにメソッドというのはTcpClientの送信メソッドで 複数のスレッドからサーバーに送信をしたいのですが、おそらくその送信のタイミングが競合を起こしうまく動作してくれません。。 ロックオブジェクトを作ってロックかけてるつもりなんですがうまく機能してないのです
>>495 でやればそもそもロックなんて発生しないわけだが
できない理由でもあるのか?
ダウンローダーの同時接続数制限みたいなものかと思ったら一つなんだな lcokはできない System.Threading.SemaphoreSlimか
>>501 ありがとうございます
出来ない理由は私の力不足によるものです
どういった実装になるのか検討がつきません
何か具体的なものありましたらよろしくお願いします
>>502 ありがとうございます
lockは出来ないのですか。。それは更に困りました
System.Threading.SemaphoreSlim
と書かれてるのを調べてみます
>>503 マジかよ
今
複数非同期スレッド→単一スレッドA
変更後
複数非同期スレッド←単一スレッドA
って依存関係にすれば競合しないだろ
って言ってるんだけど
理解不能か?
またいつもの馬鹿がしょうもないことで威張り腐ってるなw ばっかじゃねえのこいつ
>>500 こういうのはスレッドセーフなキューを使うのが伝統
複数のスレッドからキューにコマンドオブジェクトをエンキューする
処理スレッドはループをぐるぐる回しながらコマンドオブジェクトをデキューして実行する
これは初心者でもわかりやすいが効率は良くない
ええー わざわざ複数ある方から単一スレッドにアクセスする構造が悪いんじゃんよ 単一スレッドから各スレッドに巡回していけばバッティングおこんねーじゃん って言ってるだけなのにマジで通じないのかよ残念ぷぅ
BlockingCollectionやConcurrentQueueでいいんじゃね
キューでもいいが、SemaphoreSlimでスレッド制限かけたほうがシンプルにはなりそう。知らんけど
しつこくてすまんが、FT232のニセモノ問題を知らない人も多そうなので、一応。
アキバとかで売ってるやつだけじゃなくて、うちみたいに某商社経由で被害にあったケースもあるので。
https://japan.zdnet.com/article/35055706/ ちなみに世の中に出回っているFT232の大部分はニセモノなので、 "FT232 偽物"とかでググってみてくれ
>>508 マジで言ってるなら大バカ野郎過ぎる
対象のスレッドが増えたり減ったりする度にスレッドAに手を加えるとかあり得んわ
>>514 は?そんなの一度仕組み作っちゃえばしめーじゃん
お前はプログラム組んだことあるのか?
C#にエラー値ってありますか? EPPlusを使ってExcelの値をコピーしているのですが、 WriteSheet.Cells[yy, xx].Value = ReadSheet.Cells[yy, xx].Value; と記述した時、元セルの値が「=na()」の時、文字列の「#N/A」となってしまいます。 使用するセルに文字列が入っていると不具合となるので、 回避する為にセルを判定して「#N/A」となった時は文字列では無くエラー値を入れたいのですが、 何を入れたら良いかがわかりません。 double.NaNとかで代用では無く、エラー値の時は同じくエラー値が入る様にしたいです。 よろしくお願い致します。
WriteSheet.Cells[yy, xx].Formula = "=NA()";
何度も言うけど、質問文を普通に読む限りlockで解決する問題としか読めないけど、 質問者が明示的に言ってもいない要件を勝手に妄想して無駄に問題を複雑にして 何か意味あるのかね。
>>523 lockだと解決しねーと思うけどな
短サイクルでデータを上げまくるような
プログラムだと十分に上げる隙間ができない限り
データが上げられないスレッドができてくる
根本的な解決方法は単一スレッド側から巡回することだろ
ま、偶然でも動きゃいいのよってんであれば別にこだわらないけどね
でも仕事でやりやがったら俺が監督してたら組み直し必須
>偶然でも動きゃいいのよってんであれば 何いってんだ??ロックで偶然とかあるのか?? ロック取得できなければただ待たされるだけだぞ。
もちろん、タイムアウト指定してたらタイムアウトするけど。
>>500 です
レス遅くなりすみません
SemaphoreSlimやらlockやらもう一度調べてみました
結論から言うとどちらでもうまくいってました
tcp側でもう一つ別な要因がありそっちでエラーを出してました
そのエラーはというと連続的にサーバーに送信をしていた為、使用可能なポートを食いつぶしていてしまったものでした
netstatで確認して判明しました
とりあえず上限値とtime_waitの調整でなんとかなりました
皆さんのアドバイス本当に助かりました
また別な問題が起こったらご教示下さい
>>525 あれ、これ状態返すんじゃなくて全部止まっちゃうやつだっけ?
こんなクソコード使うやつ周りにいないから勘違いしてた
論外だな
>偶然でも動きゃいいのよってんであれば ロックで偶然とか意味不明wwwwwwww ロックの目的わかってねぇのかよww 草生えるわ。
>>529 気になってやってみたけど
やっぱ順番保証されない上に止まっちゃうクソコードで無事死亡じゃん
>偶然でも動きゃいいのよってんであれば ロックで偶然とか意味不明wwwwwwww ロックの目的わかってねぇのかよww 草生えるわ。 >でも仕事でやりやがったら俺が監督してたら組み直し必須 これが仕事なら馬鹿な上にさらにかっこ悪く話を必死にそらそうとしてる お前を他の人と交換必須
>わざわざ複数ある方から単一スレッドにアクセスする構造が悪いんじゃんよ そもそもココが間違ってるんだよな lock呼び出してもスレッドが変わるわけないのに・・・ lockで保護されるのは、単一スレッドじゃなくて単一資源だよ
>>531 でもlockもだめだよ
止まっちゃうじゃん
質問者は解決したと言ってるのにくだらねえプライドのせいで引っ込みがつかない社会のゴミ
>>524 ロックの頻度が高いようならロックを使わない方法を考えるけど、逆に頻度が低いならロックで十分だ。
単一スレッドに処理させるにしても、各スレッドを見に行くとか無駄。他の人も言ってるスレッドセーフなキューを使うだろ。
C#erのレベル下がりすぎだろ VBあがりのカスが紛れ込んだか
似たようなことやったけどこれlockじゃ無理だから 何度も出ているSemaphoreかSemaphoreSlim使えってことで
>>541 広義の意味でロックと書いたから、lockでもSemaphoreでもどっちでも良いけど。
lockじゃ無理ってどういうこと?await使ってるのなら確かに無理だけど。
>>541 セマフォの資源数1の場合がlockなんだけど理解大丈夫か?
そしてこの場合資源数は1だよね
>>542 最初はlock使ってて後から内部の処理をawait使った非同期メソッドに変えたらそれでハマったんだった・・・失礼した
>>539 処理の順序を確定したい場合と
次のlockまでの時間が短いときにヤバそうな動作しそうに見えるけどね
ロックロックって喪前らは矢沢か!!!! (´・ω・`)b
>単一スレッドから各スレッドに巡回 と言ってる人に質問だけど、 その場合、どうやって巡回対象のスレッドを特定するの? …やっぱ、非同期スレッドから Queue にやるべき処理を入れてもらうんじゃないの…? 巡回対象となるスレッドがあらかじめ決まってるなら、そりゃ、それに合わせて何とでもできるだろうけど…
まだやってるんかーい 想像だけど、巡回の彼は、単にあるメソッドAが同時に複数のスレッドで 実行されるのを禁止するだけでは足りなくて、各スレッドがメソッドAを実行する 順番を制御する必要があると「忖度」したんだと思うけど、質問者はそんなこと どこにも書いてない。 もちろん質問者の本当の要件がそうである可能性は否定できないが、 質問の文面上にはそんなこと書いてない
そもそも「他のスレッドを巡回」という表現がよくないね これはスレッドが他の複数のスレッドを直接管理していないと出てこない表現だ そんな雑なコードを書いてはいけない スレッドは他のスレッドのことを知らなくても動作するように書くこと
>>551 逆でしょ
> 単にあるメソッドAが同時に複数のスレッドで
> 実行されるのを禁止するだけ
しか考えてなくて
>>550 も指摘してるけどメソッドAの実行タイミングを考えてない
プログラムの構造も
>>514 ,
>>552 が指摘してる通りメンテが面倒になるし
普通に List<Unko>でいいじゃん 駄目なの?
>>554 巡回君が言ってるようにlockの取得順が問題になるような極端な状況だと間にバッファを用意したところでどうせ処理しきれない
じきにOutOfMemoryを起こす
>>555 Unko1つでスレッド1つだけど
そんなにたくさん作るの?
>>557 それは別の話とした時
List<Unko>問題起きないよね?
そもそも元々が非同期だっつってんのに処理の順番もクソもあるんか?
>>558 Unkoが各スレッドからの要求でそれがスレッドと一対一ってこと?
それ各スレッドが同時に1つしか処理を要求できないからスレッド内でリエントラントにならないし
一つだけ大量の処理を要求するスレッドがあると滞るよ?
>>560 それはUnkoの中身の話だよね
仕組みとしてはこれでいいっしょ?
queueなのか stackなのか プライオリティ付きなのか ラウンドロビンなのか さぁどれ?
>>561 良くないよ
スレッドごとに分ける積極的理由がない
だったらわざわざ面倒な構造を作るよりスレッドに関係なく要求単位で共通のキューに放り込めばよい
>>563 今問題なのは動くかどうかだよ
実現できないなら議論してもしょうがないだろ
>>564 だから「動かない」理由は560で既に示しただろう
>>565 じゃあ議論する必要ないな
実現不可能でFA
2ちゃんはコードを書きにくいからディスカッションが捗らないね 運営は古臭いシステムを捨てて早くMarkdownをサポートしなよ
C#(.Net4.5)でSQL Serverに読み書きしたいんですがDataSet?というのが便利なのでしょうか? DataGridViewやテキストボックス、チェックボックス等でSQL serverを更新・追加したいのですがやったことがないのでどれがいいでしょうか? もちろん運用テストはしっかりするつもりです
>>569 DataSetは古いのでもう誰も使ってません
>>569 WinFormsは10年以上前から時が止まってるからそれでいいよ
Webに乗り換えるんならEFとかもっと今風の新しいのも選択肢に入るけど
>>569 今やるならdapperかEFかね
未だにDataSetの呪縛に囚われ続けて辛い
DataSet というか DataTable でいいだろ 軽いし
>>574 データ量が少ないと軽いからプロトタイプ作成で行けると勘違いして、いざ作ると一気に遅くなったわ
>>569 Datasetは便利だから使ったほうがいい
VisualC#2015パーフェクトマスターにも載っているくらいだから
けっして古くないんだよ。
そりゃ書籍は機能を網羅する必要があるから載せているだけだよ 「載っている=今でも使える」にはならないぞ
>>569 なぜ今さらサポート切れのランタイムを?
Dapperがイイね 理解が簡単だし速いし生産性も高い
SQLは環境ごとでいいんじゃないか そんなところで互換性を確保するメリットは小さいだろう リポジトリなどもう少し抽象的な層で互換をとろう
ちなみにEFは エンティティティフーレムワークの略だからな
返信ありがとうございます
とりあえずDataset使ってみたいと思います
>>578 VS2010使ってるからです
お前ら、何使ってるの? Dataset?ダッパー?ef?
このボタンを押したとき画像がunko1からunko2に切り替えるにはどうしたら良いでしょうか?
ネット上の画像を呼び出す(切り替える)ことはできるのですがデータ内の相対パス絶対パスがいまいちよくわからなくて困ってます
>>587 ネット上の参照はやったことはないけどunko1の同じ形式のパスを適用したらいいだけでは
「データ内の」がいまいちわからないがパスが相対パスならば補完して絶対パスにするとか
ローカルでの参照ならそうする
出来てなかった
絶対パスだと別のパソコンに移したりしたときとかに画像が読み込まれん
これをこうすればできると思ったけどこれだとエラーを吐いてしまいます
なぜでしょうか?
当方C#どころかパス云々についての知識もさっぱりの初心者なので・・・
>>590 まずはC#の入門書とVC#のチュートリアル本を一通り終えてきたら?
悪いけどそんなレベルでいちいち2chで質問してたら何年経っても勉強終わらんぞ
というか2ちゃんは勉強や議論には不向き Markdownも使えないゴミシステムなんて今や罵り合いぐらいにしか使えん
C#を勉強し始めた初心者ですが質問させて下さい LIST<T>に、あるクラスのインスタンスを追加していって、必要なくなったらRemoveしてるのですが、このRemoveしたインスタンスの破棄処理は明示的に行ったほうがいいのでしょうか その場合どういう風にすればいいのか教えていただけないでしょうか
何を突っ込んでるかによる PCのリソースを独占したり圧迫するようなものなら破棄作業したほうがいい でもよくあるデータだけの小さなクラスのインスタンスはほっとけばいい
>>593 状況次第だよ
インスタンスの所有者(破棄の責任者)はそのリストなのか否か
要素のクラスがIDisposableを実装しているか否か
>>593 listにのみインスタンスをnewしてるならlistからRemoveしたらガベージコレクションされると思うけど(タイミングは知らん)
>>593 (1) リストから削除するアイテムの型がIDisposableを実装している
(2) リストから削除後はもう使うことはない
この2つを満たすならDispose呼んだ方がいいのかもね。
俺ならやらないけど、コード1行でも減らさないと死ぬ病気なら
拡張メソッド使ってIDisposable実装してたらRemoveと同時にDispose呼ぶメソッドでも追加するとか
っていうか、.NET のガベコレとか理解してないならまずそっちが先決だね 別に難しい話じゃないし
俺のアプリは10秒に一度強制ガベコレが動く って実装にしといたら引き継いだやつが組んだコードが落ちまくる 強制ガベコレ動かすと落ちるプログラム組む奴って結構いるよ オススメ
逆に疑問なんだけど、どうやったらガベコレで落ちるようなコードを書けるんだ?unsafe?
>>601 すでに死んでいるから
普段はガベコレが動くまで偶然生きていて
強制ガベコレを動かすとすぐ削除されるから死ぬ
rubyの拡張をC言語で書いてたりすると余裕でそんなことを起こせるが c#でどうやったらそんなことになるのか全然わからん
p/invokeとかunsafeが絡めばよくある話だな。
>>603 Diposeしてるやつ使おうとしたりremoveatしてるやつをremoveatされてないかのように使ったりして死んでる
後中身の見えないクラスで実はしんでんすよその状態的な
後はマルチスレッド関係で削除してんのに別スレッドではそうでないつもりで動いてたり
強制ガベコレかけるとゾンビも速攻であの世行くし不具合発見にいい
こういうタイミングが微妙なコード書くやつのソースって落ちやすい
そういえば、使い終わったオブジェクトは using 使うなりして破棄してね。 ってリクエストしたら、try - catch の finaly で .dispose するからいいんだって言った人がいたな。 結果は同じだけど、どうせ直すなら using の方が素直な気がしたんだけど。まあいいけど。
>>608 usingの複数定義が気持ち悪いと言って頑なにfinalyでdisposeする人居たわ
>>607 開放されるかどうかは作り手の努力次第だけどなw
他人の作った関数が仕様通りに動作するかどうかはその作り手の努力次第、ってのと何か違うの?
>>611 ウルセェゾホラァ!( ‘д‘⊂彡☆))Д´) パーン
>>610 そんなの using 関係ないだろ
自分のなけなしの知識全開かよ w
>>615 でもdisposeなら解放されるんでしょ?
>>616 はあ?
using って単なるシンタックスシュガーだぞ
>>593 です
レス頂いた皆様ありがとうございます
listの追加はインスタンスの作成と同時に行いlistから削除した後は2度と使用しません
そのクラスは個別のデータを管理するだけのクラスです
とりあえずあまり何も考えずGCの対象になると思い明示的な解放は必要ないのかなと思ってたのですが作法的にどうなのかと思い確認しました
ですので現状IDisposableは実装しておらず言わばリストから削除してほったらしの状態です
GCについてはあまり勉強していないので調べてみたいと思います
その他アドバイスありましたらよろしくお願いします
>>606 そんなコード書き奴いるのが驚きだけど、居るところにゃ居るんだなぁ。。。
>>620 > Diposeしてるやつ使おうとしたりremoveatしてるやつをremoveatされてないかのように使ったりして死んでる
これGC関係ないし
> 後はマルチスレッド関係で削除してんのに別スレッドではそうでないつもりで動いてたり
別スレッドだろうが参照もってりゃ回収されないし
どう見てもおかしい人だから相手しなくていいと思うよ
>>621 強制ガベコレすると落ちるけどしないと落ちないときあるじゃん
ってまあヘンテコなコード書いてないとお目にかかれないけどさ
そんなことないと主張するなら別にそれでもいいよ
俺は困らないし
Visual StudioC# 同じ階層のフォルダをクリックしたら、設定を変更してメモ帳を起動でませんか? 構造 フォルダ0 ーーフォルダ1 ーーメモ.txt フォルダ1をクリックしたら、同じファイルのメモ.txtを太字にして、 閉じる時に元に戻す。
すいません。 どうもテンパってる見たいです。 フォルダを開くと同時にメモ帳でフォルダ内のテキストファイルを全て起動 メモ帳を起動する前に 太字とファントにして文字サイズを変更したい。 メモ帳を閉じたら、設定を元に戻す どうしたら良いでしょうか?
落ち着け フォルダをクリックしたらってのはエクスプローラ上でってこと? フォントはメモ帳開く前にレジストリ変更、開いたら戻すって感じでできると思う
やゃ落ち着きました。 アクティブフォルダ(操作中のファオルダ)内にtxtファイル存在するか調べる。 もしも、存在するなら、Windows10のメモ帳で全てのtxtファイルを開く。 存在しないなら、何もしない。 メモ帳を開く場合 規定フォントかを調べる。 windows10付属の規定フォントで無いなら、規定フォントにする。 _規定フォントなら、文字を大きくする。 _次に太字にする。 メモ帳の開く場所をディスプレイ中央に設定する。 やりたい事はこんな感じです。
>>630 アクティブフォルダを検知する手段が見当つかないけど
それをドロップされたフォルダ(指定されたパス)で実行するに変更ならすぐできるんじゃない?
1.指定されたディレクトリに*.txtがあるか調べる
2.見つかればメモ帳の設定をバックアップして変更
>>628 3.メモ帳に*.txtを順次渡して起動
4.メモ帳が全て終了したら設定を元に戻して終了
>>632 アクティブフォルダを検知する方法はボクも知らないです。
タスクバーに存在するフォルダがアイドル常態かどうかを調べて、
アクティブなら実行させる とか考えました。
一日、数百回ほど、
フォルダを開くのに対してドロップ&ドラッグは流石に勘弁して下さい。
>>633 じゃあフォルダ群を最初に全部登録して選択したもので実行するとか
とりあえず
>>632 の部分は必要になるから答えを待ちながら作った方がいいんじゃないかな
俺にはウィルスにしか見えないわけだが こいつの目的は何なの?
DOSじゃないんだからOS全体でアクティブなディレクトリなんて存在しないと思うよw
アプリケーションにドロップしたディレクトリじゃ駄目なのかよ
まず現行業務フローの洗い出しができてないよね 1日数百回フォルダ移動してる暇な奴ってすでに俺には聞き込み調査か粛清が必要なレベル プログラムを組むんじゃなくて ローキックの連打で解決できそうな臭いしてる
皆さん、いろんな意見をありがとうございます。
(笑わないで聞いて下さい。)
毎回落としてくる、エロ画像がボクの宝物なので、
大事にパスワードを設定してます。
開く時にパスワードを書いたメモファイルを何時も開き忘れるので、
フォルダを開いたと同時に表示して欲しいんです。
>>638 画像によっては属性が夢の様に、いっぱい詰まってるので毎回、移動させてます。
エクスプローラーもメモ帳も自分で作ればいいだけに見えるんだが・・・ それらの部品ならCodeProject漁れば出てくるよ
フォルダにパスをかけなければと言う人も居ますが、フォルダにパスワードは必要です。 メモファイルは隠しフォルダにしたら何とか隠せますが、パスがついてない画像は 閲覧されちゃいます。
>>640 に賛成
ディレクトリの位置に紐つけたパスワードのデータベース作ればメモ帳起動する必要もなくなる
>>623 > 強制ガベコレすると落ちるけどしないと落ちないときあるじゃん
>>605 みたいなケースだろ
そうじゃなくて普通に使っててそんなことになると言うならサンプルコードあげてみそ
>>642 メモ帳が必要な理由としては、コメント書いてるんです。
「今日も可愛いね」「その猫耳が似合ってるよ。」とか書き込んで、
後から同じファイルを開いた時に追加してコメント入れてるんので、メモ帳を起動させたいのです。
現状では634の方法で行きたいと思います。 一部を保留にしながら、632にを参考に進めて行きたいと思います。
レジストリを触りたくないので、メモ帳を起動後にフォントと文字サイズを変更 しようと思ってますが、やり方が見つかりません。 ファイル内に.txtが有るか調べる ファイルを指定してメモ帳で起動するまで行きましたが、 起動後、メモ帳の設定の仕方が分かりません。 どなたか教えてくれませんか? (ファイルへの書き込みと読み込みは結構、でてくるんですけどねw)
DLL AとAが参照しているDLL Bがあって、BでAのPOCOクラス使いたいんだけど循環参照になっちゃうからPOCOクラスをDLL Cとか別で定義するしかないよね? C#なら別DLLにしなくてもいけると言われたんだが、どうやるのか見当つかない・・・
メモ帳だから出来ないんよ。 最低限テキスト編集機能しか無いからね。 ワープロじゃ無いから、テキスト編集さえ出来れば良い(高機能でも快適な編集が出来ればいい)ってのがテキストエディタ。 フォントとかはワープロの領分だよ。
>>648 AとBを一つのDLLにまとめる
どうせ切り離せないなら分ける意味ないでしょ
>>649 メモ帳にフォントと文字サイズの指定はあるぞ。
表示される文章全体に対してだが。
>>648 そうするしかない、というよりそうすべきだね。
俺は共通のenum一つのために別のdllに分けたことがありますw
>>650 >>651
>>655 やっぱり今のままじゃどうやっても無理だよね、サンクス
循環参照が発生した時点で設計バグなので楽しいリファクタリングタイムだ
んでまた資料も書かずに突貫工事でプログラム組んで余計ややこしいことになっちゃうまでが準備体操
あらゆる管理業務の負荷はコードの品質で天地の差が出る 循環参照してるようなクソコードのドキュメンテーションは地獄だ リファクタリングしてからやった方がいい
そのリファクタリングが正しく出来なさそうだからまず資料作れって言ってんだよハゲ っていう不毛な会話はもうしない 突貫工事が好きなところといい きっと彼は土属性に違いないのだから
てっきり無視されるかと思ってました。w フォルダを開くのを認識させるのは、どうしたら良いのでしょうか? 指定したフォルダを開く事はできても、これから開くフォルダを認識する事なんてできるのでしょうか? 質問ばかりで申し訳ないです。
>>656 よろしくないってだけで、無理ではないと思うが。
>>660 正しいドキュメントを書くことはコードを書くことよりはるかに難しい
循環参照するような破滅的コードが相手だとまともなドキュメントを工数に見合う時間で作れる見込みは少ない
そもそもコンパイラや静的解析ツールを利用して体系だった機械的なプロセスでコードの品質を高めて可読性を上げることができる
それがリファクタリングの中でも大きなメリットの1つだろ
そこへ来てドキュメントを書いてからリファクタリングなどというのは全く見当違いの馬鹿馬鹿しい行為なんだよ
ドキュメントを作るのはリファクタリングで整理されてドキュメント化可能な状態になってから
あるいは探索的リファクタリングで得た知識を忘れないようにドキュメント化する
なんにせよコードを弄った後の話だ
こんなこと普段からコードを書いてリファクタリングしてれば知識がなくとも体感的にわかることなんだけどね
この業界はコードを書かない自称エンジニアさんばかりでため息が出るね
>>663 せめて問題点がわかる粒度の表にするべきだと思うわ
>>663 お前、ドキュメント書いてからソース書いたことないな
異なる文化を持ってる会社と仕事したらボコボコにぶっ叩かれるな
設計書を完璧にfixしないとソースコード触らせてもらえないとこあんぞ
でも一度はそういうところに行くべきだと思う
きっと違った世界が見えるはずだ
どうでもいいよw それ以上はチラシの裏に書いてよw
リバースエンジニアリングは小規模でのみ通用する方式
>>664 リファクタリング対象を選ぶために、という理由でなら資料を作る意義はあるかもしれない
例えば複雑度、更新頻度、バグ密度などリファクタリングをする価値を判断できる数字というのは結構、ある
殆どのデータは自動収集できるものでレポートを手作りすることはないだろうが
ざっと目を通した時の難易度などは手作業の方が早いかもしれないね
でもね、リファクタリングの方法を探るために先に資料を作るというのは、ない
制限時間付きのパズルを解こうとしているのにまずはドキュメント?冗談でしょう
やるとしても、パズルを弄りながらメモ書き、程度でしょ
>>665 ガラパゴスの国だからね
文化の違いは認めるよ
修正は設計書のレビューを通してからコーディングという現場に居たこともある
しかし徹底的なドキュメンテーションが正解だとは思わない
ドキュメンテーションには時間がかかるし統一的な記法も機械的な検証方法も無い
実際の挙動を決定するコードと同期しているか定かでは無い
何よりこの手の現場ではコードを弄るという探索的プロセスを軽視する傾向が強いことが問題だ
コードを弄らずにドキュメントだけ正しい状態に持っていこうとするということは
まるでパズルを頭の中で組み立てて手順を資料化するような馬鹿馬鹿しい行為だ
パズルに挑戦する人は誰だって自分の手でパズルを弄りながら考える
それと同じでリファクタリングの方法を考える人は自分の手でリファクタリングをしながら方法を考えるんだ
手を動かす前に思いつくようなアイデアはいつだって陳腐で使い物にならないものばかりだ
完成するかどうか分からんパズルと仕事をおなじにされてもなぁ
>>670 そもそも設計ってなんだと思う?
俺はビルドを実行する前までのプロセスが設計だと思う
コーディングは設計フェーズでコードは設計書
製造はビルダーの仕事
俺らが作るものは最終的には動くプログラムなんだよね
それでコードはそのプログラムがどういう仕組みでどういう風に動きますっていう定義をずらずらと書いたものだよね
それってまさにプログラムの設計書じゃないか
じゃあ世間の言う設計書ってなんだって話だけど
俺からするとそういうのは設計概要とか設計方針の方がしっくりくるんだわ
どっちのいいぶんもまぁわからんでもないが結局プロジェクトの規模によるんじゃないの? みんなだいたい一人どれくらいのプログラムの量かくの?
宣言型言語で書くならそうだが、普通コードは命令書であって設計書じゃない。
>>674 いやぁさすがにそれは詭弁にしか聞こえない
だってお前のは材料数も期間もなんもでねーじゃん
ただ単にパズルが解けるまで遊んでるだけで最悪なんの成果もないわけじゃん
>>676 世の中の多くの設計書が手続き(命令)的な書き方をされてますよね
年配のCOBOLエンジニアさんが書く設計書などがまさにそうですが
あれは設計書ではなかったと
だいたいリファクタリングとか言ってるけど ここまで来てそんな問題起きちゃうのはただの設計ミスだよね? 設計書から完成させる文化の仕事受けて1回軍法会議にかけられて死ねばいいよ
ひとつの型が唯一解とは思わないが設計書は必要だよ コーディング以降は各テストレビュー完了毎にメンテナンスするくらいの頻度でいい アルゴリズムの伝達にプログラム要素は含まれない
>>678 現実的な時間で終わるかどうかの見極めはコード弄ってればすぐにわかるよ
むしろコード弄らずにドキュメントベースで話を進めると簡単だと思ったら実は思ったより時間かかりました~なんてことになる
悲しいけど世の中そんなプロジェクトで溢れかえってるのが事実なんだ
>>679 COBOLの設計書ってコード設計という名のコーディングシートを除けばわりと宣言的だぞ
関数型に近い
>>680 断言するけどそんな設計書はありません
就職すればわかるからそのあと出直してきな
>>682 それを外したからリファクタリングなんて名前の設計ミスの修正をやってるように見えるんだが?
>>681 概要を素早く把握するには設計書はちょうどいい文書だと思う
しかし概要を超えた明細はコードで語るべきだ
コードを直す前に必ず設計書修正しろなんてパラノイア的なやり方は負担を増やすだけで利益は少ない
コスト意識のない完璧主義者に付き合わされるのは苦痛だ
>>683 そうなのか
うちのCOBOL経験者はJavaのようなOOP言語でもコテコテの手続き的な設計書を書くよ
まあ人によるってことだろうね
>>686 テストレビュー完了毎にメンテナンスするって意味がうまく伝えられなくてすまん
修正毎とか時間と人件費の無駄、やってらんねーっすよってこと
俺にとっての設計書ってのはほぼテスト仕様書
詳細設計=単体テスト
概要設計=結合テスト
要件設計=統合テスト
>>685 どんなに慎重にやっても設計ミスは出る
そもそも仕様そのものが業務の変化に依存している以上不変ではない
完全な設計書などこの世界には存在しない
設計書の間違いを検証する手段がないので設計書には間違いがないと勘違いする人が居る
設計ミスではなくともリファクタリングを行うことが多々ある
>>686 いやーさすがにテキストボックスが右詰めか左詰めかとかまで書かせるのはキチガイだと思うけど
全体の大まかな構造までしけちゃってるのを見ると流石に見逃せねぇ
ってところじゃん?
しかもそこからの対応もパズルとか言って用は動くまでブラウン管テレビぶん殴ってるババアと大差ねぇなと
これはねぇキミ、プロのやるこっちゃないよ
プロがこんなところでしょうもない揚げ足取りの議論なんかするかw ばっかじゃねえのほんっと
色々考えましたが、解決法が見つかりませんでした。 どなたか、何か良い案は有りませんかね?
エクスプローラーっぽいアプリを自作した方が楽だと思う。 メモ帳にしたって、アプリにテキストボックス埋め込んで表示すれば足りそうだし。
>>692 エロ動画を見ればいいんじゃん?
大半のエロ画像なんてゴミになるよ
nameofって短縮系の名前しか得られないの? 名前空間とかそのまま欲しいな
動的にはtypeof(...).Namespaceやらで取れるからそれで十分って判断じゃね 文字列で完全限定名が取れて嬉しいケースってあんまり思いつかん 属性で型名を指定するのはコンパイル時に型を参照できないからなわけでそこでnameofは使えないし
>>690 故障したテレビを外から眺めながら中身のことを妄想して原因はあーでもないこーでもないと議論するのが設計書文化
とりあえず安全確保はしておいてから、テレビを分解して内部構造を調べ、故障原因を理解し、原因を取り除いたり、より良い構造になるように努力するのがコーディング文化
どちらが有意義な仕事をして居るかは一目瞭然だね
>>698 でも仕組みわかってないんだろ?
触んなよw
>>698 技術力とちゃんとした設計書があれば、妄想じゃなくて起こりうる原因を挙げれるわけだが
妄想レベルの設計書しか書けないから有意義な仕事が出来ないんじゃない
C言語やC++やJavaを学んできたけど、C#が一番難しいです こういう方居ますか? また言語の難易度はどのようなものなのでしょうか
>>702 競技プログラミングをC#でやりたいんですけど、C++と比べて難しいです…
難しいと思うのは、一番は全体像が多すぎて掴めないです
>>704 競技プログラミングなら、C++でいいんじゃ……
全体像が多すぎて掴めないってなにさ。競技プログラミング向きではないとおもうが。
>>703 昔はゲーム作ってました
今はunityでゲーム作ろうと思ってるんですけど、他のこともやってみようかな?って感じです
>>705 C#で書いてた人がかっこいいと思ったので…
>>706 自分でもわからないです
まだ触り始めたばっかだから色々作ることにします…
難しいと感じるところもあるかもしれないけど いいところもいっぱいあるでしょ? もうプロパティがない言語触りたくない
>>709 良いところもあるけど、色々作って試行錯誤します
慣れてくるとあんまりプロパティ作らなくなるけどね C#初心者はWinFormsとかの「お客さん向け」設計を真似してプロパティを大量に作りがち 次第に整合性を重視するようになると自然にプロパティは減っていく
自然にプロパティが減ってく人でも皆無にはならない程度には便利だということ
>>712 良く分からん。
整合性を重視するってどういうこと。
お客さん向け設計ってのもわかるようなわからんような。
自分だけが気づいた何かがあると思いたいお年頃なんでしょう ネットde真実の一種だねw
>>707 たまに競技プログラミングやるけど、スラスラC++書ける人格好良いと思うなぁ。
格好良さはさておき、C#で難しいとこってなんだろ? デリゲート型とか?
>>714-715 プロパティを正しく公開するのって結構大変なんだよ
内部で生じた一時的な変な状態を外に見せないようにしたり、
常にプロパティの値が外から書き換えられることを考慮する必要があったり
不特定多数の人に便利に使ってもらうためのクラスならそこに手間をかける価値はあるけど、我々が作るクラスのほとんどはそうではない
プロパティを使わない(フィールド直公開?メソッド?)ことで問題が回避されるんじゃなければ 何言ってるのか意味不明だね
公開されてるからいつでも触っていいのかと思ったら initの前だけかよって?
なんの注意書きもないから1ミリ秒単位で更新してたら死にやがったよコイツ的な?
update()するたびに使用メモリが増えて行くのは仕様ですか?
>>719 プロパティに限らず、余計なメンバを公開しないほうが楽だと言ってるだけだよ
アンカ付けたんなら「お客さん向け設計」の説明もしてくれよ。
>>723 語るに落ちてるじゃんw
要するに、それは上手にカプセル化して安全で使いやすいブラックボックスを作りましょうってことであって、
プロパティに限った話じゃない
お客さんは開発者だろ? マイクロソフトが開発者向けに用意したコントロールと うちらが仕事で仕様を満たすために作るものとは手間やクオリティが全然違うってことだろ
>>725 その通り。
特にプロパティは初心者が不必要に公開してしまう傾向がある、ということね
じゃあ誰かに公開して誰かに使わせる予定あるのかよ? って言ったらほとんどないんじゃん?的な? 感じで代弁してみた
>>725 そんな傾向あるかね?
自動プロパティ限定の話ならわかる気もするけど
そういう話なら、初心者は何でもpublicにしがちだけど慣れてくると 適切なアクセス修飾子を使うようになる、とか言わなきゃ。 でもこれってそんな気張って言うような話じゃなくて、初歩の初歩の話だよねw
整合性を重視って妙な言い回しするから何かと思ったら…
初心者が質問するスレな 初心者がプロパティガーって知ったかするスレじゃない
VIDEO これやってるんですけど乱数入れると2行目のレベルの数字がバグってしまいます
原因が全くわかりません
助けてください
そういう丸投げの質問にわざわざ回答してくれるお人よしがいるかもしれないと 思えるところが凄い
>>735 動画主がソース公開してるみたいだから自分のと比較してみたら?
お騒がせしました 公開されてるソースと比べたところ、違いは勇者の名前と勝手に追加したゴールドの乱数だけでした 結局String name ="";の行を弄ったらバグらず表示することができました 名前の文字数が5文字以下だと文字がバグりました
それ動画主もクソやんか。 どこがどうクソなのか自分で理解出来るようにしなよ。
役立たずの口だけ番長は黙って死んでろゴミカス てめえみたいな奴が初心者スレを腐らせんだよ
ササクッテロリって初めて見たww どうでもいいけど
某所のクソコテがササクッテロルだからいつも見てるな
webbrowserでダイアログボックスを開いて操作することってできるんでしょうか? たとえば画像アップロードサイトでファイルをアップロードするために「ファイルを選択」ボタンを押すと ファイル選択画面になりますが、ここにファイル名を自動で入力して自動で「開く」ボタンを押したいと。 外部のブラウザならウィンドウハンドルを取得してそこに投げてやればいいのはわかるのですが、 webbrowserでやろうとして失敗しました。
>>745 webのやり取りは普通は[POST]と言う命令をサーバーに送るだけなので、C#で制御するにはそのページがデータを送る仕組みを解析して
同じようにデータを送る方法があります
そのページで何をやっているのか知るために、htmlとjavascriptの基本は抑えておいたほうが良いよ
今更 var に感動してるんだけど、foreach の中じゃ無理なん? System.Web.UI.WebControls.CheckBoxList checkboxlist; foreach(var list in checkboxlist.Items) { list.・・・ } System.Web.UI.WebControls.ListControl 型を類推してほしいのだが、object になってしまう。。。
× System.Web.UI.WebControls.ListControl 型を類推してほしいのだが ○ System.Web.UI.WebControls.ListItem 型を類推してほしいのだが
そのプロパティが返す型がobject型なんでしょ。キャストすればいい
ジェネリックは.NET 2.0から System.Web.UI.WebControlsみたいな.NET 1.xからあるものはIEnumerableしか実装してない IEnumerator.Currentがobjectなのでvarは常にobjectとしか扱えない
msdnみた。 itemsはlistcollectionという型を返すらしい。 それはenumrableを継承した型でジェネリックによる型推論が効かない。 キャストでEnumrable〈型〉を指定すればいけるんじゃないかな。
どうでもいいけど類推って言葉の使い方間違ってますよw
>>747 デキモシナイコードカイテンジャネー
( ‘д‘⊂彡☆))Д´) パーン
( ‘д‘⊂彡☆))Д´) パーン
( ‘д‘⊂彡☆))Д´) パーン
>>746 そのやり方自体はテキストベースではやったことがあるので使い方はわかりますが、ファイルを添付したい場合にどうしたらいいか
知らなかったのでウィンドウ操作のほうでやってみました。
ウィンドウ操作の方法もご存知でしたら教えてください。
var [ ] 配列 こーゆうふうにvarじゃ配列組めないの?
>>755 それじゃ型を推論出来ない。
var piyo = new [] { 1, 2, 3 };
みたいに初期化子込みなら型を省略出来る。
>>754 スレッドを起動する
windowを監視してファイル選択ダイアログを見つける
ダイアログを操作する
ai仕込んで、そろそろ型を推測するようにして欲しい。 ここで数字型の配列使いそうとか
>>760 CPUの分岐予測みたいに予測間違ったらストールして待って今予測し直すからって失敗時に待たされるんですね分かります。
思い通りのコードが出るまで何度も予測させるってなるとFacebookみたいに色んな感情選べるgoodボタン要るね。
>>520 C#だとぬるりかあぬるだな
あぬるなんて書いたらガッでなく
アッーって書かれるのか
型を定義してないと思ってる
>>763 が不憫だと思うがな
var a = new ・・・ は、意図どおりに型定義されるからいいけど、 var a = 1; は何か嫌だなぁ int32? int16? どっちに判断したんだろって思ってしまう var a = 1; while(a < 100000000000) { // 処理 a++; { みたいにすると、勝手にint64に判定してくれるの?
int16のラップアラウンドを狙ってる俺のプログラムが動かないわけだ
文脈から判断出来るならしてくれるはずだが。 気持ち悪いって。。。 むしろそこが目指すところじゃん。
コンパイラに何を望んでるの? 何が言いたいの? 勝手に型推論されると困る箇所は、明示的に定義するで済む話じゃない? それとも、宣言より、後で出てきた命令も、 型推論の対象にしろと言っているの? 論点は何?
バグが増えるの目に見えてんだよ しかも組み手が面倒だからって理由だろ? いらね この程度で工数が縮まるわけじゃないし 品質は悪くはなるけど良くはならないよね? って理由
>>770 何回目だよこの話
面白くねえんだよこのブタ野郎
今すぐ死ね
うん、だから自分は System.Collection.Generic.List<string> a = new System.Collection.Generic.List<string>(); ↓ var a = new System.Collection.Generic.List<string>(); という時にしか使ってないな。
>>771 とうとう会社で持論を展開してとっちめられちゃったの?
だから2ちゃんねるの常識をリアルに持ってっちゃ駄目って言ったのに
varはコードレビューを紙でやってるような会社だとまず無理なんだろうな
>>769 出来ないん?
型が確定するまでだから、そんな深くまで見なくて良いと思うんだが。
関数型言語の真似って手続き型言語だとそんな難しいんか。
使う側としては型を意識したくない 作る側としては型を意識したい もやもやする
>>766 > var a = 1;
> は何か嫌だなぁ
> int32? int16?
> どっちに判断したんだろって思ってしまう
数値リテラルの型を理解してないのか?
long (符号つき64bit) としたいなら
var a = 1L;
って書きなさいよ
>>770 そりゃバカが使えばどんな機能でもバグは増えるわな w
C# についていけないなら止めたら?
数値リテラルが書かれた後にpythonの話どうぞ↓
>>781 ようこそ!
ここは C# のスレです。
>>774 はあ?死ねって言ったんだよ?
意味分かりますか?
さっさと中央線に飛び込めクソカス
>>777 varで宣言した変数に
数値と文字列を代入してたら
あるいは、実数と整数を代入してたら
ベースクラスと派生クラスと代入してたら
どっちが正しいのかどうやって判断するの?
結局どうやって判断しても、それがコードの品質にも
生産性にも寄与しないって判断なんじゃないの
>>786 この話題の言い出しっぺで恐縮だが var と VB の Variant 型と混同してないか? 宣言だけじゃコンパイル通らないよ 定義した行で型が決定される var a; ←コンパイルエラー var a = 1; // OK var a = "1"; // OK var a = new ペースクラス(); // OK var a = new 派生クラス(); // OK >>766 な俺が言うのもナンだが var a; だけで通ると思い込んでいての発言としか思えない。 ほんとにお前が言うのかだなww
>>766 で宣言以外の場所から型推論すると思い込んでいる誰かさんがいると思って
>>786 はそれはできないしできても混乱のもとだと説明してあげてるんだろ
var a = 1L; と書かない俺が悪かっただけと理解したので、その件はクリアした。
var a=1;だとバグって var a=1L;だと正常に動く言語ってもはやわかりにくいだけじゃない?
制限時は小さい値だけど、実際にはLongまで使っちゃうよ、って場合に バグの原因になると思うけど、c++ でも int に毛嫌い感じていた自分としては 全く受け入れられないほどでもない。 まぁ最初に書いたように、var を積極的に使うのはクラス生成時くらいだが
varを使う最大の理由は、それしか匿名型を宣言できないから LINQなんかで匿名型使うときに使えって話で LINQテクノロジ入門で著者の赤間氏は 自動型推定機能だけを取り出して、「コーディングの手抜きをするための機能」として使うのは大きな誤りである と言いきってるぞ
自分はVBもやってるけど C# に var がなかった時代に System.Collection.Generic.List<String> a = new System.Collection.Generic.List<String>(); はさすがにありえんだろ、と思ったぞ みんなが悪口を叩くVBですら Dim a As New System.Collection.Generic.List(Of String)(); ってシンプルに定義&宣言できたわけで
System.Collection.Generic.List<String> a; a = new(); みたいな記述を未来のC#が許してくれると便利なんだがな
スカイプを使っていますが、 送ったメッセージが時間しか表示されません。 2017年7月7日 18:10 みたいなここまで時間を表示させたいのですが 何か方法はありますか?
>>797 それはc#とどのような関係がありますか?
>>795 右辺か左辺かどちらかでよい。
だから、左辺での推論は不要。
>>800 そうか
関係ないと結論づけたがらもう来るなよ
c# asp.net mvc でアプリを作っていますが、 アプリケーションのバージョンってどこに持たせますか? gitのブランチ名と同期?というか、バージョン名のうまい運用方法などあったら教えて頂きたいです。
>>766 個人的には組み込み型はintとかって書く派ではあるけど、varの推論はオーバーロード解決と同じなので理解しておかないとまずい。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/int https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/byte にあるように、intで表せればint。無理ならuint,long,ulongの順に優先される。
ただし、右辺値がintより小さいとリテラルの場合は暗黙的に型変換される。
>>777 どこまで推論するかにもよるけど、実際にはかなり時間がかかる状況があるらしい。
コンパイラならまだしも、C#ではリアルタイムに正確なインテリセスが出せないといけない都合上、高度な型推論は無理みたいだね。
ここらにまとまってた。ついでに
>>795 の左辺値による型推論についてもちょうど乗ってるな。
Roslynのissueがあるのかと思って探したけど、数が多すぎて見つからん
http://ufcpp.net/study/csharp/sp3_var.html?p=2#rhs-inference >>803 CIやれば?
ツールは何でもいいけど、要はgitから特定のコミット取得→ビルド→デプロイ→どっかの構成情報にコミットIDを書き込む
までを自動化してやればいいわけでしょ
そんなに難しいことではないと思うけど
いい加減アルツハイマーの繰り言みたいなvarの話に乗りたくないけど、 なんか「推論」って言葉の語感に騙されてる人が何人かいるねw あえて推論という言葉を使ってるのは、例えば class Hoge:IHoge { } var x = new Hoge(); においてxの型がIHogeやObjectでも矛盾が起こらないのに 矛盾が起こらない一番狭い型Hogeに決まるからだろうけど、 実体は推論っていうより重複する型指定が省略できるってだけの話
>>792 適切に処理を組めばスコープを短くできる。
その短いスコープでわざわざ型をご丁寧に指定することもないと思うけど。
>>803 GitVersionとCakeの組み合わせが最強
>>807 まあそれはその通りだ
あの本はLINQのための本だから、多少言いすぎ感はある
ただ、匿名型の宣言はvarでしかできないってのと
やりすぎるとプログラムの見通しが悪くなる
って点はまあ気に留めといて良いんじゃね
>>806 > 矛盾が起こらない一番狭い型Hogeに決まるからだろうけど、
矛盾?
お前が推論と言う言葉の語感に騙されてるんじゃね?
単に new Hoge() の戻り値の型にしてるだけだぞ
var unk=GetUnko(); 型は? ハイ、論破 ってレスしたら前スレ潰れた
var便利!型なんて気にしなくていいじゃん!いっぱい使お
型を気にするか気にしないかで言えばJavaScriptでもPHPでも気にするし・・・
C#を勉強していて、1年くらい前に少しだけPythonもかじってみた素人だけど Pythonの型のほうに違和感をおぼえた・・・ たとえばメソッドに想定外の型を渡そうとしたら、C#だとコンパイルエラーになるし Pythonも実行時にたいていエラーになるんだろうけど Pythonで、型が違うけどたまたまエラーにはならず、でも想定外の挙動をしているって場合は 面倒なことになるんじゃないかなと思った ちょっと勉強してPythonはやめてしまったので、自分が知らないだけでたぶん型の間違いを 防ぐ方法はあるんだろうし、C#も勉強を中断中だからいろいろ的を得てないかもしれないけど・・・
コンパイラのフィードバックを得られればおk 人間が型を把握しきるメリットはない
JavaScriptで関数を定義したとき仮引数は本来何でもOKなのだが 実際には99.9%その仮引数に特定の種類の値を想定するわけで VSCodeでインテリセンスに頼ろうと思うと結局JSDocコメントつけて静的型付け同然にしちゃう
>>821 タプル地獄にしてやれる自信が俺にはある
Eclipse でコンソールの入力が受けられなくて悩むあるある Python タプルだ、ちゃんとキャストしなさい c++ gdbとか色々絡んでパイプがつまるのか?よくわからん
{"price":{"apple":"100","orange":"50","grape":"80"}} こういう形式のjsonをC#でデシリアライズしたいんですが、コントラクトはどう書けばいいんでしょうか? 果物の数と名前は不特定です。
>>827 JSON扱うならJSON.NETをMSも推奨してるよ
単にDictionary<string, string>型のpriceプロパティにするだけ
>>828 あっさりできました!ありがとうございます
C#でテトリスを作っているのですがブロックによっては回転させるとおかしくなったり、また端っこまで寄せてそれ以上移動させようとすると変形したり散々です
ブロックを回転させるときにx座標にyを、y座標に-xを入れればいいと書いてあったのですが違うのですか?
http://ideone.com/35p7Ko >>830 自分で紙にでも書いてみりゃわかるが単にx=y,y=-xにしても望む回転はしないよね?
それはx=0,y=0を軸とした回転であって動いてるブロックの中心を軸とした回転じゃない
ブロックの中心軸回転したいなら中心座標からのオフセットを回転させる的なことしないとダメ
詳しくは調べりゃ絶対出てくる
>>830 テトリスを作るのが凄いんじゃなくて、最初に発想した人が凄い
WebBrowserのプロキシ設定をやりたいのですが、InternetSetOption使うとIEの設定まで変わっちゃいますよね? アプリはプロキシ通してIEはプロキシ通さない方法ってないですかね?
すいません、自己解決しました。 IEの設定を書き換えるコード消さずにInternetSetOptionしてたらそりゃIEも設定されますわ・・・ 何やってんだろ俺
初心者が練習で作るなら何でも良いだろうに。 Hellow world作るなと難癖付けてるのと同じ位無意味。 テトリスならプログラミング的には割と単純だし、練習の題材としては悪くないだろう。
いやテトリスは無い オリジナルの機能も付けないんだろ?
最近になってようやく拡張メソッドってすげーなって感じた
>>842 実際は単なるstaticメソッドの構文糖だけどな
SetXX、GetXX って拡張メソッドが美しくないもん。。 多重継承ができないから、どうしても拡張メソッドでカバーせざるを得ない場面が多い
分かりやすく既成品で言うと TextBoxとLabelに共通する機能を追加したいとき、 共通機能を MyClass に書いて class MyTextBox : TextBox, MyClass class MyLabel : Label, MyClass って風にしたオリジナルクラスを作りたいのだが、それが出来ない。 Interface定義するにせよ、中身はそれぞれに書かないといけない 拡張メソッドで public static MyMethod(this System.Web.Ui.WebControl Control, ・・・) って風に共通化させざるを得ない
>>843 も言ってくれてるけど拡張メソッドは所詮ただのstaticメソッド
同じような感じでプロパティってなるとどこからでも参照できる単一の状態となる
プロパティの存在意義を考えたらstaticな状態はとっても危険
第一引数にthisを取ってるんですがw 何が危険なんだw 意味が分からん
>>847 エヴァンジェリストなんかは「実装の継承は悪」て言ってるけど。
プロパティはオブジェクトの状態を表すわけであって 既に閉じたクラスに対して状態を外から付け加えたいって場面はそうないだろ
Rectangleに右下の座標をPointで返すプロパティが欲しいとか、 配列の最後の要素のインデックスを頻繁に使うからa.Length - 1じゃなくてa.LastItemIndexって書きたいとか、 要するにプロパティを追加したいケースなんて普通にコード書いてれば山ほどあるよ。 例に挙げたのはゲッターだけだけどセッター込みで欲しいケースもね。
内容がダセェ 金にならない些末なことはテキトーにやっとけよ 誰も突っ込まねーから
>>856 こんな匿名掲示板で指摘されたくらいでカッカすんなって
ここしか居場所がないのだったら仕方ないけどさ
インベーダーでもパックマンでもブロック崩しでも なんでも好きなの作ればいい
vpn gateを使っていると2chに書込みが出来ません。 その場合、なんで2chはvpn gate 使ってるのがわかるのでしょうか?
vpn gateのグローバルipアドレスが固定なんだろ? っていうかBot荒らしが多いから全部アク禁になってんじゃねーの?
>>861 いや、IPは全部バラバラ
なのでどうやってはじいているのかわからない。
>>862 バラバラじゃないだろ
VPNサーバーのに変わるって書いてあるじゃん
ワシの股間の拡張メソッドを 喪前らのライブラリに公開してやろうか!?!! (´・ω・`)b
>>864 使えない…
いや、一生使うことがないライブラリだな
>>864 くわえても何もできないからしまってて下さい
>>759 返事遅くなりましたが、やってみたらあっさりできました。
ありがとうございました。
>>863 2chはvpnのサーバのIPアドレスを逐一クロールして補足してるのかな?
Javaを勉強していてC♯にも興味を持っています C♯とJavaの似ている点、異なる点を教えていただけないでしょうか?
C#はだいたいJavaの上位互換 Javaにある機能はだいたいC#にもあり、C#の方がずっと機能が多く複雑な言語 周辺技術は圧倒的にJavaの方が充実してる C#はその点MS技術の枠内でわりとコンパクトに完結するので比較的わかりやすい
Javaのinterfaceデフォルト実装はC#に存在しない
僕はC#もといプログラミング初心者でふ(^^ まだ関数の有用性がわからないのでふ(^^ 優しく関数の使い道や例を紹介してるサイトはありまふか?(^^
僕はまだなぜ関数が便利なのかよく分かってまふぇん(^^ なので関数をコピペ以外で使ったことがないのでふよ(^^ 関数を使うとなぜ便利なのかを解説してるサイトを教えてくらふぁい(^^ ボッキング!(^^
大規模のプログラムで アチコチに同じような処理が実装されてると憂鬱になるだろ つまりそういうことだ
関数には大事な機能がいくつもある 処理の一般化 処理の抽象化 コールバック関数 再帰を利用できるようになる スコープの局所化 他にもいろいろある でも最初は同じ処理をなんども書かなくていいぐらいでいいんだな
遅くなりまひたがありがとうございまふ(^^ ボッキング!(^^
>>878 「関数って何ですか?」って質問を関数って単語を使わずに書き直してみてみな
関数のありがたさがわかる
どうもinterfaceがよくわかりません。
調べていくうち↓のサイトがありました。
http://garicchi.hatenablog.jp/entry/2014/09/11/181456 クラス設計する際、hasかasかの考え方があります。
メンバとして別なクラスを持たせるのか、継承するかですが。
ここに出てくるTVクラスとISwitchインターフェースは、
public class TV:ISwitch
となってて、TVクラスがISWitchから派生した子供のクラスのように見えてすごく違和感があります。
TVはISWitchを継承するんじゃなくISWitchをhasしてる方がはるかに考えやすいんですが。
そもそも、インターフェースってのは継承するものじゃなく、具備してるものでやっぱhasだと思うんですが、
どう考えたらいいんですかね?
あと上のサイトでTVのメンバ変数channelがprivateなので、触れないとか書かれてますが、 class TVそのものにChangeChannelメンバ関数を追加改変するならISwitchがあろうが無かろうが関係なく channelを自由にいじくれるんですけど。
テレビそのものに書くって事は人はチャンネルを変えらんない もしくは変えるために直接テレビを触らねばならない そうしたときにラジオが出てきたらめんどくさいことになる interfaceは受付窓口と同じ 駅、遊園地、ライブは内部でどんな処理をしてるかそれぞれ異なったとしても利用側はどこでも受付ってinterfaceに切符を渡せば望む結果を得られる c#は実装側の書き方がabstractとinterfaceでほぼ同じなので慣れるしかないよ それかここだけjavaで勉強するってのもあり
ChngeChannel を public にしてしまえば。 あるいはアクセサを用意すればprivateメンバに誰でもアクセス可能かと思われますが? インターフェースというならこういうアクセサのほうがずっとしっくりきます。 そもそもアクセサってインターフェースですよねwww たとえば既製のクラスにインターフェースを追加したいときってどうすればいいんでしょうか? よく既製のクラスを拡張するのに、基本クラスのコードには手をつけず、継承して、機能追加しますよね。 インターフェースにこういう発想は根本的に間違ってるのかな? でも、上のテレビで、址から赤外線リモコンインターフェースを追加したいと、 そして、元のTVクラスのソースヘッダは触れないときはどーすればいいか?です。
そしたら人が直接テレビを触らねばならない 人は必ず有効値を入れるとは限らない 故障の原因になり得る 触りたくないのであれば既存のクラスを継承してinterfaceを貼り付けた新しいクラスを作ればよい
そのサイトの例が悪いとしか言えない ISwitchじゃなくてISwitchableとでも考えればいい TVはスイッチを持っている!やTVはスイッチだ! じゃなくてTVはチャンネルを切り替えられるぐらいのこと
>>894 インターフェイスは継承関係のないクラスたちを、同じ手続きで操作する為の物なので…
そのサイトの例だと対象が1つなので、確かにアクセサの説明かの様になってしまっている
.NET Reference Sourceで既存インターフェイスの使われ方を見てみるのも良いと思う、複数実装とか
継承か委譲かというのはまた少し異なる話…というか妙な例えは往々にして本質からずれる気がする
このへんで詰まるアホって大抵ネットで拾ってきた一つの例題だけをこねくり回そうとして話が明後日に飛んでくよね
いやいや誰でも最初はこんなもんよ 多重継承の代わりと言われたinterfaceの内容知った時の落胆... 非力すぎて涙が出たわ
多重継承するとメモリレイアウトがおかしくなって効率悪すぎ ↓ じゃあ継承はひとつだけにしようか ↓ でもフィールドなければ問題なくね? ↓ ならフィールドなしなら多重継承していいよ ↓ 悪く無いねっていうかメソッド実装も衝突するから要らなくないか ↓ なんだこれ凄くイイぞコーディングがめちゃ捗る ↓ あまりにも便利だから名前付けて言語機能にしよう ↓ インターフェース誕生
多重継承が捨てられたのはそんな理由じゃない ググってから出直せ
>>900 javaのデフォルト実装についてコメント願います
結局テストするときはマトリックス書いて全部抜けが無いようにしなきゃいけないからインターフェイスなんて邪魔だけどな 継承なんてありがたがってるやつはまともなテストなんか要求されないゴミ環境にいるとしか考えられない
>>907 まともなテストをしたことがない人って不思議とみんなこういうこと言うよね
>>908 そうかな?
じゃあインターフェイスから派生してる処理は全部でいくつあってそれぞれいつ呼ばれるの?
一覧になってる?
こんな当たり前のこと聞かれても
本能に任せて作っちゃったもんだから
全く説明できないでしょ?
じゃ、明日までに一覧作ってテストやり直してくれるかなぁ?
って言われちゃうよ
単純に作るだけのアマチュアから脱却しなくてはならない
>>909 そんなのすぐにわかるよ
わからないならそれはお前にスキルがないだけだろ
というか君の認識は全く逆だよ
そういった「機能が幾つあるのか」「どんな時に使われるのか」ってのを明確にするためにインターフェースを使うんだろ
インターフェースを使ったらそれがわからなくなるという発言は全くもって理解が足りてない証拠
インターフェースも使わずに密結合しまくった汚いシステムだと
そもそも「どっからどこまでが1つの機能なの?」って問いに明確に答えられない
そして境界がわからないから、「幾つあるか」も数えられないし
それが「どんな時にどれが有効になるのか」もわからない(どれ?という問いは当然だけどそれぞれが明確に区別できる前提がないと答えられない)
さらにいうと インターフェースで疎結合を維持すれば自動テストを構築できる そうすれば明日までと言わずに1時間もあれば回帰テストをやり直せる インターフェースを使わないガチガチに密結合したシステムではこうはいかない テストだけでも丸一日、下手すれば数日はかかる
>>911 え?明確になる?
はぁ?
swich caseで並べてあるときよりも?
俺には動かしてみないとどれが死にコードでどれが生きてんだかわかんねぇよw
ここから俺とお前で (*゚∀゚)明確になるなる! (*゚∀゚)明確にならないならない! (*゚∀゚)なるなる! (*゚∀゚)ならないならない! って1000レスぐらい想定www
>>914 ほらね
やっぱりスキルがないじゃん
適当なコードを書くからわからなくなるんでしょ
switchでその手の分岐かますと汚くて保守性低いコードになるから嫌い
タイプコードswitchはたいていの場合おなじようなswitchをコードのあらゆるところにばら撒いてどこで何やってんだ状態(いわゆるスイッチヘル)に陥る インターフェースを使うとそのようなswitchは一箇所にまとめられたり、設定ファイルに抽出されたり、コーディング規約に従って動作するようになり、誰が見てもはっきりとどんな時のどの実装が使われるかを理解できるようになる このように構造化されていれば機能一覧や使用条件などをリアルタイムに出力することすらできる switchとの格闘で費やしていた無駄な時間をバカンスに割当てることもできるのだ
>>918 でも間違いが無いよね?
実行する場所ですべてのパターンがひと目でわかる
インターフェイスだとどう?
全部で何パターン処理があるの?
>>919 じゃあ、ホイ
unko.flyhigh();
いくつあるか言ってみろよ
お前が判断に必要な情報を俺が出していってやるよwww
>>920 間違いがあるのはswitchを多用する複雑怪奇な方法
間違いがないのはインターフェースを使ってエレガントな方法
switchでパターンがわかるのは1箇所だけ
実際にはswitchの数だけ掛け算したパターンを把握しなければならない
3分岐のswitchが4箇所で使われていたらそれだけで3 * 3 * 3 * 3 = 81パターンの実行パスが考えられる
このコードベースで処理パターンと条件を列挙するのは事実上無理と言っていい
ところがインターフェースを使った方法ならswitchは1箇所で済むのでコードパスの爆発は起こらない
機能一覧と使用条件を洗い出すのもとても容易になる
>>922 コード全部ちょうだい
コードってのはインターフェース使ってOOPで書かれたコードのことな
あっという間に数えてやるよ
ちなみにお前の書いた汚いswitchスパゲティは意味わからんからいらないよ
それはコードじゃなくてゴミだから
>>923 容易に判明するよ
インターフェースを使っていれば生成箇所だけを見れば判断ができる
場合によってはソースや設定ファイルを見ただけでわかるし
生成箇所が変数に依存して実行するまでわからない場合も生成箇所だけにログを仕込めばわかる
そして何より重要なポイントは仮に死にコードだとしても全く害がないということ
スイッチヘルだと全てのコードを追跡しなければならない
何時間も何日もかけてソースを読んで
ログを仕込む作業何百回と繰り返し
そのログを仕込む作業で凡ミスしてないかの確認を要求されて
また何時間も何日もかけて回帰テストを手作業で行い
スイッチヘルだと死にコードだからと言って無視することはできない
なぜならスイッチヘルでは死んでるコードと死んでないコードが密結合していて分けて考えることが極めて難しいから一緒くたに行きていると判断するしかないからね
もう考えただけでも嫌になってくるよ
>>925 それはすべてのコードを見ないと分からないという敗北宣言でいいのかな?
>>927 そう言っておかないとお前後出しするじゃん
じゃあ逆に
void main() {
switch (unko) {
case 1: foo();
case 2: bar();
case 3: baz(); } }
このシステムにおいてどの機能がいつ使われるか全て列挙して
もちろん関数の呼び出し先にも無数のswitchがあるけど聞かれたことしか教えないよ
>>928 だろ?
(*゚∀゚)なるなる!
(*゚∀゚)ならないならない!
ウォーズになっただろ?
そもそも根拠も示さないで
明確になるなんて嘘つくのが悪い
switch case以上のものなんかできねぇよ
>>930 根拠は示してるがお前が無視してるだけだろ
>>931 続けたいならコード出してよ
出せないなら続かないよ
底辺SIer丸出しで草 まあ初心者なら混乱するよな、処理追おうとして読んでもインターフェースの呼び出ししか書いてないからswitchのほうが分かりやすいってなる
>>934 いや、明確に判断するにはインターフェイスが継承されてるクラスをくまなく追っかけて呼び出されてる箇所マークして
死にコードと生きコードを分けなきゃならんでしょ?
こんな面倒臭いものをなんで有難がってるのか?
頭がおかしいのか?
switvh caseが問題とかいってるけどお前の脳味噌のが問題だよwww
>>933 全部見ないと分かんないって言ったよね?
あの一言で僕の勝ち
君の理論は腐っている
そして全部みなきゃ分からないという君の主張は正しい
だけどそんな複雑なものを好んで使おうとしてる君の脳みそは腐っている
前回の再復刻がふたつ同時だったから、以降はふたつずつ追加されるのかと思ったら今回はひとつだけで残念 実は実装間隔が半分に短縮されている…とかじゃないよね?
社内でユニットテスト定着させようとしたらこんな感じの話がズレている層に拒否られたの思い出したわ
.NETのソース見ればいいよ、switch連打じゃなくてインターフェースばっかだから
このクソ最近暴れてた奴だろ クソの相手するな スカトロ趣味かオメー
気づいたらすげー流れてるなぁ 関心があると考えたらいいこととも思えるけど
xp C#2008 メモリが30Mなんだけど、そんなもんなん?(正常に動きます)
>>891 要は、本来全然違う物を同じ物とみなして使いたい場合が結構あるってこと。
例えば、
例1:
外部機器との通信プログラムで、USBもRS-232Cもイーサも「通信ポート」とみなして
同じように扱えるようにしたい
例2:
ゲームのプログラムで、物理的なゲームコントローラも、過去の操作の記録データも、
AIによる操作も同じように扱えるようにしたい
インターフェイスは同じ物とみなされるために必要な要件を定義するためのもの。
C#使っててinterfaceの有用さを実感したいなら、IEnumerable<T>を実装したクラスたちについて調べるといいと思う (そして同時にジェネリックのありがたみもわかる)
スレが進んでると思えば… ID:YwzOlwqa0はNGにしておけばいいよ テストやったことない人の意見はガン無視でいい
頑固なヤツに成長はない そのまま消えていただければ幸いです
enumrableとenumratorの発音にいつも困る。
>>950 で、その結果がソース全部出せなの?
(*゚∀゚)ズイブンコウリツヨサソウジャン
>>953 誰と勘違いしてるんだか
まともにテストツールを使ったことがないか
まともな方法でテストしたことない人の意見は読むだけ無駄
>>954 おお、そりゃスゲェ
是非その超絶技巧をご披露いただきたい
(*゚∀゚)オモシレー
俺にレスしても無駄だよ お前の超絶技巧で.net framewaorkをinterface無しで再実装してからにしてくれ
>>956 アレ?お前はなんにもしないの?
(*゚∀゚)イツモドオリダナオマエ
まあ、お前の言いたいことはわかるよ みずほ銀行のシステムをcobol無しで再実装してからcobolの批判をしてくれないか? ってことだろ?
COBOLの話がすぐ出てくる辺りマジで底辺か、多分ほとんどの奴はお前と話合わないからすっこんでろ
>>960 え?お前誰?
単発IDが主義主張もなく割り込んでいいcobolじゃねーよ
>>961 誰でもいいじゃん、匿名掲示板なんだしお前と議論する気なんて一切ないし
>>961 ここはC#のスレだよ
COBOLの話は別でどうぞ
>>928 たとえばclass PCを定義したいと、
インターフェースとしてUSB、HDMI、DP、PCI-exを持ってる。
この場合
class PC: interface USB, HDMI, DP, PCI-ex
より。
PCはUSBやHDMIを具備していると解釈するのが自然でしょ。つまり
class PC{
public:
Interface USB{
};
Interface HDMI{
};
Interface DP{
};
interface PCI-ex{
};
};
とでもした方が感覚的にしっくりきませんか?
アクセス権としてはclass 内部でInterface宣言されたものはPCのリソースに無条件でアクセスできる。
としたほうが直感的にわかりやすくないですか?
USBやHDMIがPCを出産するってのはあまりに無理がある。
つづき 工業製品のシミュレートを考えると継承でインターフェースを増やす、とか機能を増やすとかがしっくりこない。 新製品が旧製品を継承するってならOKだけど、 ある世代のみの製品を定義するなら、 基本モデルに搭載された機能があって、 そこにオプションが追加されて、製品グレードが構成される方がしっくり来ませんか? この機能追加が継承で実現されるってのはしっくり来ない。 >USBもRS-232Cもイーサも「通信ポート」とみなして >同じように扱えるようにしたい これこそ各種インターフェースが通信ポートと派生関係 (is a)関係にある話で、 それらが搭載される大本のPCを派生関係に巻き込むのはおかしな話じゃないですか? PCから見て同じ通信機能を有するポートと見なしたいだけならエイリアスにでもするとか。 通信ポートがセクロスしてPC出産するなんて考える方が無理ボ
何論点に話してるがしらんけど、 部品を組み合わせるんだからhas aで持たせておけよ。 こんなのに継承なんか使ったら破綻するわ。
is-aって電子回路で例えるとICの非公開の隠しコマンド使うようなもんだからなあ その密結合した側からは百歩譲っていいとしても他からそのICを使うと整合が取れなくて マニュアル通りの動作をしないような事態になったらほとんど手直し不能と言う
インターフェイスとしては、 IDataIOConnectable みたいなのを持つのでは?
C#は移譲とプロバティーとインターフェースを使って、C++の多重継承と外形上同じものを構築できて しかもより安全なんだよね 道具は使いようだよ
個人的にはis-aは仮想関数のためにあるのだと思ってる
>>970 実際コンポジション(移譲)で90%以上事足りるしな
よくわからないなら特に理解する必要はないよ
>>967 が正解だし
きませんかと言われてもきませんとしか言えんわな Interfaceを理解することが目的じゃないならチラ裏いき 理解したいならとりあえず自分で利用したコードをかけとしか
そもそもPCクラスが直接USBインターフェイスを実装する必要なんてないし USBインターフェイスを実装したUSB1クラスとかUSB2クラスをプロパティで持つのが普通だろ IO装置としてのインターフェースって用語と、プログラミング用語としてのそれを混同してるとしか思えん
そもそも、USB端子2つ持ってたらどうするの? PC自体にUSBの機能を持たせたら、usb1と2の区別ができない。 よって、そういった場合を考慮すると、部品化して、プロパティとしてusb1、usb2を持たせるのが正しい。 終了。
この話どーせCOMやActiveXの時代までさかのぼるんでしょ?
Visual Studio2017でタプルを使いたいのですが (ネットで公開されている)正しいコードを入力しても「valueTupleがインポートされていません」 と言われてしまいます。 ターゲットフレームワークがタプルをサポートしているものより古い4.6.1であるのが原因だと思うのですが、 プロジェクトのプロパティには4.6.1までしか表示できず、visual studioの更新もいろいろ試したのですが(CreatorsUpdateなど) どうしても4.7を採用できません。 どうしたらよいでしょうか OSはwin10です
>>979 新しいプロジェクトの作成画面で.NET Framework 4.7になってないとか
もし古い.NETでプロジェクトを作成してしまっていたらソリューションを右クリック→プロパティ→アプリケーション
で、ターゲットフレームワークを.NET Framwork 4.7に変更する
>>979 インストーラーから4.7開発ツールインストールしてないなら当たり前
http://imgur.com/a/F6nPY >>979 さんがいうプロパティの画面はこれで良いでしょうか
画像の通り4.7が表示されません。
プロジェクトの作成画面も同様です。
ただのアップデートしただけじゃ4.7は使えない インストーラーから個別のコンポーネント選んでインストール
解決しました ありがとうございます 個別のコンポーネントを選択していませんでした。
複数の読み込みタスクと一つの書き込みタスクを並列で動かすとき、 書き込みタスクを優先させて動かしたいんだけど、どうするのが正解? タスクのプライオリティ上げるのかと思ったけど、調べるとどうも違いそうで。 ConcurrentExclusiveSchedulerPairとかのスケジューラをうまく使うのかな?
・複数サーバからネットワーク経由でファイルDL ・ファイル数が閾値を超える毎にDB書き込み(シリアル) DLタスクの並列数を増やすと、書き込みタスク1つあたりの処理時間が伸びて困ってる・・
それタスクの優先度じゃなくて単にファイルIOの問題じゃないの ファイルDLの書き込みとDLしたファイルの読み込みとDB書き込みを同じストレージに対して行っているなら処理時間伸びるのは当然に思えるが
>>988 書き方が悪かったかな、すまない。
DLタスクは書き込まない、HttpClientのGetStringAsyncでメモリに読み込む
>>989 System.Threading.Thread.CurrentThread.Priorityで、優先度弄れるらしいが、実際に使ったこと無いから何とも・・・
スレッドのメソッドの上の方で指定すればOK
スケジューラを実装するといいよ 優先度の設定があるけどそれをどう解釈するかはスケジューラの実装によるからね
並列にするメリットが全くわからないのだけれど? 分析能力の欠如っていうか脳がやられたの?
謎行為やってるなとは思うが 謎行為をする動機を語ってないからそう見えるだけだろ と好意的に解釈してやる
とりあえずダウンロードしたファイルはさっさとローカルに保存しなよ ネットワークに余裕がある時にDBにストアすればいい
現役PGの頃に宇宙仮面のサイトみてたけど 2014年で更新止まってるんだよね。 あの人生きてる???
>>990 ,991
ありがとう。スケジューラの方向で色々やってみる
>>992 ,993
ありがとう。動機を説明してみるので、おかしな実装だったら指摘してもらえると嬉しい。
わりと見たことある実装だと思ってるんだけど・・
どこの部分に対する指摘かわからなかったので3点で書いてみる
1.なんでファイルDLしてるの
→空いた時間にダウンロードして、日時の決まった時間にDBを更新するようなバッチじゃないから
2.DLタスクが並列な理由
DLタスクでは数kbのファイルを読み込んで、それをパースしてDBに格納するデータに変換してる。
ファイルは10数個のサーバ毎に日時で1万個くらい生成される。
→各サーバに対して並列で一斉(ないし数台)にリクエストを送る方が、サーバ*ファイル数分、直列でやるより速いと思ってる
3.DLタスクとDBへの書き込みが並列な理由
DLタスクが終了してからDB書き込みしてももちろん動作はする
(実際はメモリの関係で、何度かに分割するだろうけど)
DLタスクはネットワークがボトルネック
DBタスクはDBでの処理がボトルネック*1
→だったらDLタスクが一部終わる毎にDBに書き込ませていった方が、全体のパフォーマンスとして効率的だと思ってる
(本当にpriorityが問題なのかとか、*1が正いかとか、スケールの話は実装とか環境によると思うので省いてほしい。パースはDBタスクの方じゃってのも)
訂正 誤)1.なんでファイルDLしてるの 正)1.なんでファイルDLして保存しないの
書き込みタスクもファイル毎に別なのか? どうせシリアルなら書き込みはBlockingQueue使って単一コンテキストでループさせ続けるのが無難だと思うが
訂正 ConcurrentQueueを使ったBlockingCollectionだな BlockingCollectionなら上限数を指定しとけばコンシューマの処理が追いつかないときにプロデューサをブロックすることもできるよ
このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。 life time: 38日 7時間 47分 35秒
2ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 2ちゃんねる専用ブラウザからの広告除去
★ 2ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.2ch.net/ ▼ 浪人ログインはこちら ▼
https://login.2ch.net/login.php
read.cgi ver 07.7.23 2024/12/25 Walang Kapalit ★ | Donguri System Team 5ちゃんねる
lud20250323092133caこのスレへの固定リンク: http://5chb.net/r/tech/1497000961/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。 TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]©2ch.net YouTube動画>1本 ->画像>3枚 」 を見た人も見ています:・ふらっと C#,C♯,C#(初心者用) Part139 ・ふらっと C#,C♯,C#(初心者用) Part136 ・ふらっと C#,C♯,C#(初心者用) Part146 ・ふらっと C#,C♯,C#(初心者用) Part143 ・ふらっと C#,C♯,C#(初心者用) Part142 ・ふらっと C#,C♯,C#(初心者用) Part138 ・ふらっと C#,C♯,C#(初心者用) Part130 ・ふらっと C#,C♯,C#(初心者用) Part144 ・ふらっと C#,C♯,C#(初心者用) Part137 ・ふらっと C#,C♯,C#(初心者用) Part135 ・ふらっと C#,C♯,C#(初心者用) Part160 ・ふらっと C#,C♯,C#(初心者用) Part119 ・ふらっと C#,C♯,C#(初心者用) Part155 ・ふらっと C#,C♯,C#(初心者用) Part148 ・ふらっと C#,C♯,C#(初心者用) Part128 ・ふらっと C#,C♯,C#(初心者用) Part148 ・ふらっと C#,C♯,C#(初心者用) Part159 ・ふらっと C#,C♯,C#(初心者用) Part147 ・ふらっとC#,C♯,C#(初心者用) Part92 ・ふらっと C#,C♯,C#(初心者用) Part161 (78) ・ふらっと Q#,Q♯,Q#(初心者用) Part 1 (10) ・くだすれC++/CLI(初心者用)part2 ・ふらっと C#,C♯,C#(議論用) ・FX初心者スレ Part103 ・キャンプ 初心者 友の会 Part1 ・Xiaomi(小米科技)初心者 Part16 ・セキュリティ初心者質問スレッド Part137 ・【新バ】ウマ娘プリティーダービー初心者スレ Part139 ・【FF14】初心者の館 Part366 ・ロード初心者質問スレ part414 ・ロード初心者質問スレ part409 ・ロード初心者質問スレ part426 ・Java入門・初心者質問スレ Part.7 ・Ruby 初心者スレッド Part 65 ・クロスバイク初心者質問スレ part8 ・人狼ジャッジメント初心者スレ part9 ・【初心者歓迎】Small Basic Part 2 【片手間】 ・【初心者】ダイエットの質問・相談スレPart159 ・【プロスピ】プロ野球スピリッツA初心者スレpart139 ・【FF14】初心者の館 Part529 ・Java入門・初心者質問スレ Part.3 ・Ruby 初心者スレッド Part 67 ・Java入門・初心者質問スレ Part.11 ・Java入門・初心者質問スレ Part.5 ・クロスバイク初心者質問スレ Part59 ・クロスバイク初心者質問スレpart29 ・クロスバイク初心者質問スレpart33 ・【小説家になろう】初心者作者の集いpart.94 ・【小説家になろう】初心者作者の集いpart.70 ・【C++】 DirectX初心者質問スレ Part40 【C】 ・Cakewalk by BandLab 初心者質問スレ Part 19 ・ストリートファイター6初心者・質問スレ Part79 ・【DCS World】DCS 総合 Part.79 【初心者歓迎】 ・初心者歓迎イラストアドバイス練習気軽うp Part9 ・【ランモバ】ラングリッサー 初心者&まったり&質問スレ Part.49 ・くだすれFORTRAN(超初心者用)その7 (27) ・【初心者でも】エギングPart78【上級者でも】 ・くだすれDelphi(超初心者用)その60【Embarcadero】 ・C#, C♯, C#相談室 Part95 ・C#, C♯, C#相談室 Part94 ・Kotlin初心者質問スレ ・0からの、超初心者C#相談室 ・Python3を勉強中の初心者ですが
02:51:31 up 63 days, 3:50, 0 users, load average: 9.56, 9.58, 9.68
in 0.10684394836426 sec
@0.10684394836426@0b7 on 061915