ふらっと C#,C♯,C#(初心者用) Part136
レス数が1000を超えています。これ以上書き込みはできません。
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part135
http://mevius.5ch.net/test/read.cgi/tech/1517749348/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
-
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured invokeの意味がよく分からない。
別のスレッドからUIのコントロールを触るには、手順が必要でそれをInvokeを通すとちゃんとやってくれる
ということらしい。
疑問1:手順を踏まないと駄目なのはFormに貼り付けたコントロールだけなのか?
これは「コントロールはスレッドセーフじゃない」と同義のことか?
疑問2:一般的なクラスやListデータはスレッドセーフなのか?
例えば、100kバイトの受信データが常時更新されているとする。これをメインスレッドにコピーするときに
半分程度コピーしたときに、次の受信割り込みでスレッドが切り替わって上書きされるなんてことは起きないのか?
スレッドの切り替えはOSが勝手にやるんだから、これは当然起きてしまいそうな気がするんだが、防ぐ手立ては
あるんか? >>4
>手順を踏まないと〜
いいや、作成したコントロールすべて
>これは「コントロールは〜
スレッドセーフ性についてはリファレンスに書いてあるのでお読みください
勝手に判断していいことは何もない
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.control(v=vs.110).aspx >疑問2
個々のクラスのスレッドセーフ性については、使用するクラスのリファレンスを参照
スレッドセーフなコレクションクラス群というのも提供されている
https://docs.microsoft.com/ja-jp/dotnet/standard/collections/thread-safe/
スレッドセーフでないクラスをスレッドセーフに扱いたいのであれば自分でその機能を実装する必要がある
その際はlockステートメントやAutoResetEventクラスなどが役に立つだろう どうやって実装するかに関しては
一般的なスレッドセーフプログラミングのガイドに従うが
あまりにも広範すぎるのでここには記載しない
手っ取り早くはラッパクラスを書き、
ラッパクラスのプライベートなインスタンス変数にロックオブジェクトを確保し
すべてのメソッドの入り口でロックを取ってしまうことである >>5
こいつらだけがスレッドセーフでそれ以外はセーフじゃない。
M:System.Windows.Forms.Control.BeginInvoke(System.Delegate),
M:System.Windows.Forms.Control.EndInvoke(System.IAsyncResult),
M:System.Windows.Forms.Control.Invoke(System.Delegate),
P:System.Windows.Forms.Control.InvokeRequired,
and M:System.Windows.Forms.Control.CreateGraphics(ただしすでにハンドルが生成されていること)
ハンドルがクリエイトされる前のバックグラウンドでの.Forms.Control.CreateGraphicsスレッド
の呼び出しは問題をひきおこす。
って書いてあるので、まあそういうことなんだな。
セーフじゃないのは解ったが、スレッドが何処で切り替わるかが問題だな。
少なくともInvoke中は切り替わらないから、Invokeに渡すDelegateにガッサリとほりこんでやれば絶対に
安全ってことでいいのだな。
それなら別にLockもへったくれもいらない。なんも難しくないな。 >一般的なスレッドセーフプログラミングのガイドに従うが あまりにも広範すぎるのでここには記載しない
いったいどう広範なんだ? Lockしたら終わりだろ。変数の書き換え中に切り替わらんなら何も問題ないはずだよな。 ID:Jnf3+hM1は例のアホだろ。相手すると有害 Lock(object)
馬鹿っぽいのはこっちだな。なんでObjectでロックする必要があるんだよ。単にラベルでいいだろ。
Lock(name)
なんかサンプルにしろ説明にしろ難しそうに見せたがるんだよな。賢そうに見せたいんだろうな。要するに
賢くないってことだな。 ああ一昨日くらいにTaskでギャーギャー喚いていた人でしたか
気付かず相手をしてしまいました
申し訳ありませんでした 素人の簡単な質問に答えられないで、解った振りをするのは良くないぞ。 なんでワッチョイにしなかったの?
今更IDでNGとか面倒だわ >>15
忘れてた
次スレ作成機能でワッチョイ引き継がれないんだよ スレッドセーフについては
http://www.atmarkit.co.jp/ait/articles/0505/25/news113_3.html
ここが詳しい。これは頭のいい説明だからすぐわかる。
要するにロックすればいいのだが、あたりかまわずロックするとかなり負荷が
かかるので少し工夫がいるということだな。別に難しいことはなにもない。 >>12
お子様なら他へ行った方がいい
成人なら本当の意味でコミュニケーション障害
はっきりいうとおまえとは会話ができない どーせ、下でSendMessage, PostMessageがアドレス渡してるだけ 質問です。
class A
class B : A
class C : A
class D : A
のような感じでAを継承するクラスがいつくかあったとき、Aの関数に
public A Copy()
{
return new BとかCとかD;
}
みたいな感じで、Aから自分が今なんのクラスなのかを見て
B・C・Dを生成することはできないのでしょうか? >>20
if(this is B){return B}
みたいな感じでできると思うよ
普通はvirtualメソッドにして派生先でoverrideするのが普通だと思うけど >>21
ありがとうございます。
クラスが増えるたびにAに分岐を追加するより、派生先で実装しようと思います。 >>12
多分Lockを誤解してる
わざとどうでもいい名前にしてあると言うことを理解してないな 触るなって言ってんだろテメーも脳に障害おってんのか可哀想にな 質問があります。
.NET標準のChartコントロールなんですけど、
大量のデータ(50000件くらい)を表示してから
そのChartの上をブラウザとかエクスプローラとかを横切らせたら
Chart上に残像みたいなのができて(ちょっと時間が経ったら正常に表示される)
物凄い重いんですけど直す方法ってあるんですか? >多分Lockを誤解してる
>わざとどうでもいい名前にしてあると言うことを理解してないな
そこだな。「どうでもいい」のが名前の性質だ。ここは「どうでもいい」ということが重要だ。だからこそどうでもいい
名前にしないといけない。Objectである必要はないし、そういう制約をつけるのは間違いだ。そこのところを理解していないと思う。 >>26
Chartなんてそんなに大量に表示する物と違うだろ。だったら代表値にしてデータ量を
圧縮するとか見せ方を工夫すればいい。 田舎者は総じて優しいが、村にそぐわないと判断すると突然ブチ切れて仲間を募って村八分を宣告する。
ネット上に田舎者が多いのはやむえない。ああもう朝だ。寝よう。 >>30
触るなって言ってんだろ田舎者のバーコードハゲ すまんが、.netってパスワードを安全に保管するためのストアは用意されてるの? パスワードをローカルに保管するという発想そのものが本質的に間違っているからそんなものはないよ
ハッシュ値だけ平文で保管して、パスワード原本は速攻で捨てろ 別に間違っちゃいないw
多少のリスクより利便性を選択する人がいてもいいし、そういう人に倒して
「お前は意識が低い」なんて言うのは独善的で傲慢だ 原本のパスワード保存しちゃうのは流石に行儀が悪いにゃ それはただの思い込み
そんなこと言ったらローカルどろろかクラウドにパスワードするChromeやFirefoxは
もっとお行儀悪いよ
現実問題、個人のPCがハッキングされる可能性なんか交通事故よりはるかに低いし、
その上暗号化されたパスワードがたまたま見つかってたまたま解析される可能性なんかもっと低い どういう脅威に対してどの程度の安全性が必要なのか次第で対策が違う
PasswordValutだってある意味では安全なストア ローカルなのかクラウドかの話ではではく、
原本のパスワード(平文のパスワード)をそのまま保存するのは行儀が悪いと言いたかったにゃ MessagePackでバイナリ化してAES暗号じゃダメなんか? もしかしてWPFのPasswordBoxコントロールのSecureStringの事かいな? >>37
行儀の問題じゃないよ。
パスワードを保管することに意味があるか無いか。
極一部の例外を除いて、一般に開発者がユーザーの入力したパスワードを保管したいと考える(勘違いする)のは、
ほとんどが簡易的なパスワード認証を実装したいケースだ。
その場合、パスワードを復元可能な形で保管する必要はまったく無い。ハッシュを使えばハッシュ値の保管方法に気を使う必要はなく、
遥かに簡単でセキュアな認証情報管理が実現できる。 お互いに違うことについて話しているんだからどこまで言っても平行線 >>46
ハッシュを使ったパスワード認証ってセキュアプログラミングの基本中の基本だぞ
ほんとに分からないの?ちょっと危機感持ったほうがいいよ >>44
>極一部の例外を除いて、… ほとんどが簡易的なパスワード認証を実装したいケースだ。
これは完全に思い込みだよね
用途を聞く前からパスワード保管を全否定はいただけない 入力したパスワードをそのまま持っておくというのは、作り手側の危機感が足りないようにみえるね
大昔の yp からそんなことはしないものと決まっていたと思っていたが >>48
用途にかかわらずパスワード保管は薦められないですね >>50
平文で保管しろっていってんじゃないよ
それともパスワード管理ソフトも全否定? やっぱりちょっと何言ってるのか分からないけど、
>>47の人は認証するのが自分のコードだと思い込んでる気がするw
だからChromeとかFirefoxとか具体名出してるのに
ちなみに、FXとか株とかのトレードアプリでもパスワード保存機能がついてるのが普通ですよw
場合によっては億単位の金が絡むんだけどね。 だから言っただろ
お互いに違う話してるから平行線だって >>52
保存するならキャッシュで、というのが安全ですね
>>53
ブラウザのパスワード入力支援の話でしたか…そりゃ違う話ですねえ… 結局、Javaみたいなパスワード用のストアってないわけ?
証明書のストアがあるぐらいならあるのかと思っちゃったよ 用途とか細かく書かないと質問者そっちのけでマウント合戦始めるスレだからな >>59
なんか気付いてないみたいだけど、それ一番やりたがってるの君じゃないの?w
ずっと思ってたけど単細胞だよねお宅。
この単細胞な幸せ回路、ネトウヨだったりもしそうw ワッチョイ無くてもいつもの奴らが書いてるのが分かるの笑える groupをしてTimeSpan型の平均、合計をだしたいのですが
var C =
from a in db.Articles
group a by a.Category into B
select new ArticleHaving
{
合計 = B.sum(a => a.時間)
};
↑のa.時間がTimeSpan型だと型変換できなくてエラーになるのですが
どのように書いたらいいでしょうか? 構造体だからってオチ?
.TotalHourだったらどうなんのよ >>63
合計 = B.sum(a => a.時間.ticks)
として合計出して
TimeSpan.FromTicks(C) でTimeSpan型に戻せばいいんじゃね? >>57
MS的には資格情報マネージャを使えということになっているので
プラットフォーム独立な奴はない 同じソースを Framework 3.5 / 4.0以降 で使い回ししたいのですが、
コンパイル時にバージョンを識別させることできますか。
C言語ぽく書くと
#ifdef FRAMEWORK35
// 3.5用のソース
#else
// 4.0用のソース
#endif
的なことがやりたいのですが。 それ、いいと思ってるのは本人だけシリーズ
んなコード、ソース中に散りばめたこと想像するだけでゾッとするわ MSからしてみればさっさと最新のFramework入れろよとイライラしてそう >>69
良し悪しの問題じゃなく、好むと好まざると>>67みたいないことが必要な場合は実際にある。
質問者が言ってもいない前提まで加えてくだらないいちゃもんつける奴の方がよほどぞっとするよ >>65
ticks使えばいけそうです。
ありがとうございます。 >>71
は?ねーよ
ちょっと考えてみ
それさ、ソースのどっかにあったらアプリの挙動変わるんだぜ
いちいちそんなの確かめてらんねーよ
んでそれがあちこちにあったらもうプロジェクト終わるね
そこでやるべきものじゃないし
もうバージョン管理レベルで変更するものであってそこに書くもんじゃねーよ >>74
>バージョン管理レベルで変更するものであってそこに書くもんじゃねーよ
複数の.NETバージョンのサポートが必要なライブラリなんかを作る時に
新バージョンにしかない機能も使えるようにしたい場合
どういう風にバージョン管理レベルで変更すればいいの? 神エクセルの読み取りで使えそうな典型的処理をまとめたライブラリとかない?
100種類ぐらいの神エクセルファイルがあるんだが今月中に読み取りを全部自動化しなければならない
時々フォーマット間違ってるものもあってもう心が折れそう >>74
濫用すべきでないのは当たり前だが、意義を完全に否定できるものでもない >>80
と思うだろ?
お前が節約してる手間なんて実装だけだろ
テストや動作確認は各バージョン全部やらなきゃいけない上に
バージョン番号での分岐のテストも各バージョン毎全部しなきゃならん
分けた方が楽だぞ だから、バカの壁の向こう側に何言っても無駄w
コメントは二重管理になるからコメントなしで理解できるようなコードを書け、
と言っても問題意識を共有できない人がいるのと同じw
っていうかまさにそういうタイプの人なんだろう 質問者に対する提案ならともかく議論なら議論スレでやってくれ こんな過疎スレでそんな「交通整理」に意味あるの?
スレ違いって自分が言いたいだけだよねw
何よりそういう自己分析ができないってもう絶望的に頭悪いよ >>83
それでもやれ
何度も言うけどお前等は実装なんてチンケな工程にこだわり過ぎてる
処理はできるだけ共通化すると幸せになれるという根拠のないルールが呪いになっている
いくら共通化ったってここまで複雑になったコードが管理しやすいわけねぇだろ ソースから完全に分けるのと#ifdef使うのとなら
あらゆる状況でどちらかが常に優れてるわけじゃないんだから
状況に応じて選べばいいんじゃん >>88
それができてるの?
共通化全適用以外の選択肢を取れるの?
馬鹿だから無理でしょ? T where int,long のT a、T bの変数に対して、a+bを実行したいんだけとなんかいい方法ある? その話もうさんざん議論されてるからまずはググってくれ >>93
ダイナミックやリフレクションを使うとできそうって感じかな
どちらも採用したくないので諦めることにするわ int, longならlongだけ用意しとけばいいだろ
ジェネリックにしたくなる気持ちはわかるけど実際ほとんどの場合は結局一つしか使わないよ
YAGNI >>95
将来的にdecimalとかでも使うかもしれないから最初からTで作っときたかった いつのまにかwhereにintやlongやdecimalが指定できるようになったのか?
違うだろ? くだらないいちゃもんつける馬鹿多すぎだなこのスレ
いちいちいちゃもんつけないと死ぬのかねw int,longだとintかつlongだからそんなもの存在しない >>99
確かにそうだ
ビルドするまでエラーがでなかったから気づかなかったよ >>101
演算用の構造体を作る方法もあるのか
結局型ごとに構造体を作らなきゃいけないなら型ごとにメソッドを作る方がいいかな
考え方は面白いんだけど書いてあるとおりちょっと強引な感じがするし構造体の使い方もちょっと気になる >>102
まあそうだよね…
どうしてもメソッドを共通化したいときにこれをやるとしても、普通のオーバーロードでラップする感じになると思う 1週間で身に付くC#言語のページが見られなくなっちゃった atmarkitとdobonだけでいいよ
ググるとだいたいこの2つがヒットする WinFormのプログラムで85k超データなんて作ってないのにLargeObjectHeapが増えていくのはなんでなの・・・ 蓮メモリにならないように大きい単位で取るんじゃないだろか?
と尻もしないのにレスしてみる public static extern bool GetDiskFreeSpace(
string lpRootPathName,
out ulong lpSectorsPerCluster,
out ulong lpBytesPerSector,
out ulong lpNumberOfFreeClusters,
out ulong lpTotalNumberOfClusters);
上記だとビルドが通らない。
これのようなクラスタあたりのセクタ数、及び、セクタあたりのバイト数を取得する方法ってありますか? >>109
ビルド自体は通りそうだが…P/InvokeしたいならDllImportを付けないと
DWORDは32bitでulongは64bitなのは承知の上?ポインタ渡しであまり関係ないけど
[DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
static extern bool GetDiskFreeSpace(
string lpRootPathName,
out uint lpSectorsPerCluster,
out uint lpBytesPerSector,
out uint lpNumberOfFreeClusters,
out uint lpTotalNumberOfClusters
); WINAPI型(__stdcall)じゃないC++の関数を呼ぶ時は
DllImportに CallingConvention = CallingConvention.Cdecl 入れないとメモリ破壊する TextBoxにフォームロードの中で文字列を設定しています。
ウィンドウが表示された時にそのテキストボックスの中の文字列が
全て選択された状態で表示されてしまいます。
どうすれば文字を設定しても選択された状態にならないでしょうか? 教育系の研究データをとるためのアプリをwindowsベースで開発したくて
「確かな力が身につくC#入門」
を勉強終えた。
次のステップとして
「独習C#」
を終えるべきか、もう自分で調べながらプログラムを書き始めるべきかどっちがいいだろう? 教育心理系で
1. タッチパネル上に×を表示させて学習者に触らせる
2. ×とタッチの座標を記録して、二つの距離を計算
1,2を数十回実施して結果のデータをテキストで吐き出す。
が実走したい最低限の仕様。
可能であればネット経由で結果のテキストデータをサーバーに送信したい。
です。
「独習c#」
ぐらいは終えてからの方が、急がば回れで効率いいのかな?
ちなみにプログラム経験は20年前にCで人工知能の研究してたぐらいでほぼど素人。 ランサーズとかのクラウドソーシングで募集したら?
一万も出せば一瞬でできるでしょ >>119
実際に組み始めて分からないことは調べる方式のほうが習得早いのかな。
あまりに恥ずかしいコードにならないように、基本は身に着けたいと思ったんだけど
「独習C#」
のページ数にひるんで、これは辞書的に使う本なのかと・・・。 >>118
そういう手もあるのか・・・。
いやでも、実験しながら仕様は変えてくだろうから、やはりプログラミングの技術ももっておかないと。 Encoding.UTF8
と
UTF8Encoding.UTF8
の違いって何ですか? >>121
作ってさよならじゃなくて同じ人に継続的に依頼できるよ
お前はプログラミングで遊ぶより他にやるべきことがあるだろ
お前の時間はそんなに安いのか?
手段と目的をごっちゃにしてはいけない >>122
おんなじ
UTF8EncodingはEncodingを継承してて、
継承元.静的メンバ
派生先.静的メンバ
どっちを書いても継承元.静的メンバを指す >>124
なるほど、同じなんですね
使い分けするようなケースってあるんですか? >>125
無い
君自身が疑問を感じたように、実際紛らわしくて誤解の元になるので、常にそのメンバが本当に定義されているクラス(つまりこの場合はEncodingの方)を通して参照するべき。 >>121
学んでおいて損はないな
仕様次第だけどサーバー抜きで1時間あればできると思う >>121
コメント&ソースコード付で納品してもらうという手もある。おれは初心者のころ、金を払って自分が実現したいことの定石を学んだ。 ssh.netのドキュメントってどこにあるのか知っている人います? 2つのアプリ(win form)で情報をやりとりするとき、データベースを介してやるのって一般的ですか?
ソケット通信とどちらがいいでしょうか?あるいは、もっといいやり方がありますか?
情報といっても、数字や数文字の文字列をトリガーに動作する程度です。 一般的かと聞かれたら一般的じゃない
DB増えると管理対象が増えるだけだし
通知を監視するためにずっとDBポーリングするってことは無駄だよ
自分ならプロセス間通信のどれかを選んで使う ぶっちゃけここで質問するよりランサーズで外注して
教えてもらった方がはやいよ
俺もよくつかってる。
たまーに超人的なPGがいる。 >>131
キューに溜めたいならDBを
そうじゃなければソケットでやるかな >>126
そうします
回答ありがとうございました >>131
DBでも競合に弱いのもあるからな(SQLiteとか)
通信量が少ないのなら、ソケットでいいかと >>117
windowsベースで開発したい理由って何なの?
そのレベルなら言語の基礎文法を学んだあとに
GUIフレームワークを学びながら作れば十分だと思うが
window固有のGUIフレームワークを学ぶ価値がどの程度あるのかわからない また始まった
アホは人に突っ込む前に自分に突っ込むことをいい加減覚えろ
いちいち下らん突っ込み入れないと死ぬのかw >>133
俺も副業できるかな?と思って見てみたけど
一つも理解可能な案件が無かったw >>127
現場で表示時間のパラメーター等を変更するなどあると思うので、
勉強がてら独習c#をリファレンスに組んでみます。 >>128
人のソースコード読むのも勉強になるよね。
今の環境は周りにコーディングする人いないので、物によっては外注もありですね。 >>137
外部施設でコンピューターについて何もわからない人たちにデータを取ってもらう協力をお願いするため。
Linuxとか使ったらそれだけで強力拒否される。
なるべく多くの施設に手軽に参加してもらうには、一番普及してるOSがいいかなと。 OSに縛られたくないならhtml+javascript(typescript)という手もあるな >>132 >>134 >>136
ありがとう。やはりちょっと変ですよね。
いつの間にか決まってたのですが、一応異議を申し立ててみます。 >>139
理解できるレベルになると安い料金で要求だけ高い地雷だらけでエントリーしたくなくなるぞw >>146
っていうかやりようが無いようなクソ案件ばっかりじゃね?
そんなインターフェース提供されていないのに〇〇アプリと連動する〜とか
不可能なレベルの要求ばっかり ランサーズの案件見てると、なめてのか?
てめーでやっとけってなるな >>142
なるほど
タッチパネル端末で一番普及してるOSかどうかは怪しいけど
windows端末を使う前提で決まってるのならいいのかもね >>149
C#だとwindows、android、ios全部範疇に入ってくるのでいいかなと。
Linuxとか使いたいけど、普通の人に教育する手間考えるとWindowsがやはり無難なんだよね。 WinFormsとWPFに新しいコンポーネントが登場するらしいね
WebViewって言うEdgeエンジンのブラウザ WebViewはブラウザ作るためじゃなくてUIにWebコンテンツを組み込むためにあるんやで
WinFormsやWPFで取り残されてる可愛そうな羊たちにもWeb移行のチャンスをあげようという、MS様の粋なはからい win10でしか動かないEDGE
ついにwin7,win8の切り捨てがはじまったのか これで高単価ってタグ付けるとか舐めてるな
間違いなく、割に合わないだろ 学生のワイにはこれで本当に1万円貰えるなら最高なんだが本当に貰えるのかな そのサイトがスクレイピングNGにしてるかどうかが一番の問題 この価格じゃどう考えても割に合わない
保守も考えたら最低でも10倍以上はないと話にならんぞ >>163
動作テストと称してデータ抜いて渡してもらい逃走 >>158
追加でいくらでも変更依頼が来るし
最終的に目的を達成できないとして支払い拒否
しかもキレながらな
いい社会勉強になると思うわ >>164
あの金額だと仕様を詰めるだけでも無理だと思う 今日から勉強始めました、ってバカじゃなければ仕様があいまいな時点で拒否反応が出る >>169
この手のは依頼主自身が良く分かってないパターン。
詳細なんか出てこないと思った方が良い。 >>172
マジかよ、って思ったらほんとに出てたわ
このスレ見てたりして w そもそもスクレイピングって合法なのか?
国内でスクレイパーが逮捕された事件あったよねたしか >>176
図書館のやつは結局無罪だったと思ったが サーバー攻撃と見なされるような頻度でのアクセスがダメってことじゃね?
あと著作権や引用のルールとか >>177
不起訴になったが起訴猶予だったと書かれていたな
相手方とは後に和解して共同声明出してるけど
MDISも警察も検察も到底容認出来る対応ではない
赤の他人ながら未だに腸が煮えくりかえるわ >>150
Xamarinのこと言ってるんだろうけどそんな簡単じゃないよ
それぞれの環境に合わせた実行ファイルの用意と配布だけでも相当な手間だから
Windowsに限ってもOSバージョンや.NETバージョン別にテストが必要
ブラウザと違って環境用意するのも大変
仕事で使う物ならアプローチの仕方から相談できる人間を雇ったほうがいいと思うよ C#といっこも関係ないけど、5年ぐらい前にちょっと流行ったような気がするNUIって
結局一過性のブームで終わった?
それとも実は俺が知らんだけでじわじわ普及してる? はまった時にはランサーズに外注
Super Programmerがたまーにいるので
金払ってでも教えてもらった方が早いぞ。マジ。 結局Windows10用アプリはWindows10でしか作成できないってことか 揚げ足取るようだけどコーディングは出来るでしょ
開発環境で実機デバッグが出来ないだけでは?
リモートならデバッグも可能なはず UWPとかか?UCRTのお仲間かと思いきや消沈した事を思い出すな 確かUWPはWin7だとSDKのインストールすらできないんじゃなかったっけ 起動時にファイル等をOpenして、終了時にCloseがしたいのですが、
VC#のFormアプリでは各処理をどこに記載すればいいのでしょうか?
以下のような感じのことがしたいのですが。
try{
Open
Application.Run(new Form());
}finally{
Close
}
またform起動後にOpen/Close処理を行う場合(formにOpenやCloseのテキストを表示したい場合)は、
FormShownイベントにOpen処理を、FormClosingイベントにClose処理を入れればいいのでしょうか。
途中で落ちた場合を考えて、finallyを入れなければいけない気がするのですが、
どこをtryで囲んだらいいのか分からず、途中で落ちた場合もformは閉じることになるので、これでいいかと思ったのですが。 >>190
IDisposeインターフェイスを実装したオブジェクトならusingを使う、ILになれば結局同じ様なコードだけど
Formで持つなら保険はvoid Dispose(bool)で行う、VSフォームデザイナーだと*.Designer.csでoverrideされてる
開くのはFormShownなら例外ダイアログ設定後だしコンストラクタより良さそうだが…しかし開く対象は固定なんかな C#でASP.NET WebForm を使うことになりました。
そこでLINQに関する質問です。
なにぶんC#もLINQもよくわかっていないので
ご教授よろしくお願いいたします。
1) LINQ による列挙は、スレッドセーフでしょうか?
ローカル変数にメソッド構文で何らかのLINQクエリを記述して
メソッド内で使用する場合には、スレッドセーフでしょうか?
→ lock 文などは不要ですか?
2) 拡張メソッドを作成して内部で yield return 文などを使用して
LINQ のメソッド構文で使用する場合、yield return 文を
lock 文で囲む必要はありますか?
3) 以下のページの最後の方で、中信頼性とか高信頼性とかの記述が
でてきますが、ASP.NET でLINQを使う場合には、web.config に
これらの設定が必須ですか?
'https://msdn.microsoft.com/ja-jp/library/bb907622(v=vs.100).aspx
以上です >>190
落ちる前にストリームを閉じるのはたぶん無意味なので
無理してusuingやtryのブロックで囲う必要はないと思う。
open/closesするタイミングは教条主義的に考える必要はないでしょう。
要は必要になる前にopenして必要なくなった後にcloseすればよいだけ >>195
たぶんで答えるな
てか知らん事に答えようとすんな >>190
そのフォームを開く Program.Main だっけでやればいいんじゃない?
using( var stream = (ファイルを開く)) {
Application.Run(new Form1( stream )); // フォームのコンストラクタの引数にでも渡してやる
}
ただ本当にファイルを開きっぱなしにする必要があるのかとか、きちんと検証する事をおすすめ。 >>196
たぶんは婉曲表現で本当は確実に必要ない
お前くそくだらない突っ込みではなく意義のある発言をしろ馬鹿 >>198
確実にお前の理解が足りてない
意地張るな、な? 運用中にファイルの中身を確認できないファイルとな?
開いたらアプリもろとも死んでもらうまさに漢の中の漢よ >>194
スレッドセーフかどうかが問題になるようなコレクションを
ASP.NETのスレッド間で共有する必要があるのか考えたほうがよさげ
1) スレッドセーフではない。
lockが必要かどうかは使い方次第
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.ienumerable-1.getenumerator?view=netframework-4.7.1
2) IEnumerable<T>を自前で実装する話ならyield returnをlockで囲んだところで意味ない
必要なら呼び出し側で対処する
3) 知らん 別に普通でしょ。例えば、アプリのローカルフォルダにある設定ファイルは基本アプリの1インスタンスにのみ有効であるべきで、アプリ起動時に設定ファイルを書き込み権限でオープンして他は読み取りのみにしておけば、二重起動防げるし。
むしろ、設定ファイルを他から勝手に変更されないようにそうすべきであるし。
フォルダ変えれれば厳密な二重起動は防げんけど。 >>201
ありがとうございます。
教えていただいたURLを調べてみます。 おじいちゃんのやり方がことごとく常識外れ過ぎる
なのにドヤ顔で間違った事ばかり書いてくる >>191-193
ログ出力と、あまりOpen/Closeを連続でしたくない外部機器を考えています。
void Dispose(bool)調べてみます。
>>195-199
繋がっている外部機器を出来る限りCloseしたく、usingが使えないので下を試したのですが、
こういう事はダメなようで、定石みたいなものがあればと質問させて頂きました。
try{
Open
Application.Run(new Form());
}finally{
Close
} >>206
open/closeがデバイスハンドルの取得/破棄のことを指してるなら
やはり通常はアプリが異常終了する場合のことを考える必要はないと思う
(プロセスが落ちれば勝手に閉じられる)
そういう話ではなく、例えば232Cとかから何か送信する必要があるとかなら、
http://www.atmarkit.co.jp/ait/articles/0507/01/news134.html
これを利用するのが普通じゃないかな VS2010使ってます。
/// と入力した時のコメントの色を変更したいんですけど
/// <summary> ← この部分
Tool→Option→Environment→Fonts and Colors→ Display items
の中のどれのフォントを設定すればよいのでしょうか?
背景色を黒、文字色を黄色にしたです! >>209
自分で1つずつ設定するのは大変だから、設定済みのスタイルをインポートするのがおすすめ
お気に入りの色の組合せダウンロードしたら、「ツール」→「設定のインポートとエクスポート」とかで出来たはず
https://studiostyl.es/schemes >>210
自分の好みの色に変えたいんですよね。
例えばコメントの類は黄色
といった具合です。 XML ドキュメント コメント - テキスト
このへん コンストラクタの引数に型を渡して中で利用したいのですが
どのようにすればいいでしょうか?
public class Hoge
{
public Hoge(MyClass) ←引数にMyClass型を渡したい(MyClass型の他にも様々な型を渡せるようにしたい)
{
new Fuga<MyClass>(); ←MyClassをこのように利用したい
... unity上で人間の視覚を表現することってできるでしょうか?
人型のモデルの頭に2台のカメラを搭載して、その映像をもとに
別窓でリアルタイム3Dモデリングをさせたいのですが 視差とかステレオカメラで検索すれば原理はいくらでも出てくるが、
実装となるとがんばれとしか Intel RealSenceはC#でのサンプル開発例がネットに転がってると思う C#から指定したパスにあるBATファイルを実行する為に
次のコードを記述しました。しかし、なぜかDOSが起動しません。
何が間違っているのでしょうか?
直接バッチファイルをキックすると動きます。
string path_dayo = @"C:\Users\mariokun\test.bat";
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
psi.FileName = path_dayo;
System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi); ユーザーの下だから、アクセスする権利が無いとか
試しにC:\testとかフォルダ作って、その中でやってみたらどうかな? C#以前の話だけどProcessにcmd指定するの禁止なの? 最近使ってないから怪しいものだが、確かProcessに標準エラー出力をみるプロパティーかメソッドのようなものが有った気がするので
エラー見たら判るかもしれんね >>225 >>226 >>227
海外サイトに同じ質問してる人がいた。
みてみまーす >>224
ユーザー名違うけどユーザーフォルダ直下で普通に起動する
https://dobon.net/vb/dotnet/process/shell.html
>ProcessStartInfo.UseShellExecuteプロパティがTrueである必要があります
あとはC#以外の要素、例えばtest.batの中身に因るのか
関連付けに頼らず本来の方法であるCMD.EXEと引数に変えてみるとか visual studio 2015を使ってます
Nugetでいくつかのパッケージを導入したのですが、ビルド時にパッケージだけを/debug/vendorフォルダへ移動させて/debug直下をスッキリとさせたいのですが、そういうことは出来るのでしょうか。 ずっと2010使ってるけどさすがに2015あたりに俺も
乗り換えたほうがいいのかな? インテリセンスの利き方が違うし、やっぱり新しいIDEの方が洗練されてるのねん 個人なら2017でいいだろ
アホみたいにアグレッシブにアップデート入れてくるから時々動かなくなったりするけど >>231
IDEの機能の話は専用スレでやれ。その方が早い
Visual Studio 2015 Part8©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1484855822/
>>237>>238
2017まではExpress editionもある >>239
2017のExpressはDesktop版だけだけどね >>239
返信ありがとうございます。
質問先のリンク助かります。
スレ違い失礼しました。 ここで質問で合ってるかわかりませんが、質問です
WPFのNuGetでTesseractを入れて使ってるんですが、
DLLをEXEに埋め込みたくなって、いろいろ試したのですが、うまくいきませんでした
一つはcsprojをいじってDLLを埋め込み、スタートオブジェクトを変えてアセンブリを読み込む方法
これはDLLがないと言われてエラーが出ました
もう一つはCostura.Fodyを使った方法で、TesseractEngineのコンストラクタの引数がおかしいと言われます
いずれも埋め込まずに普通に作ると動くので、何かしらが悪さをしてる感じです
DLLからDLLを呼んでいる場合などにマージがうまくいかないとネットに書いてありましたが、それかもしれませんが確証はありません
なにかうまいやり方があったら教えてほしいです >>243
ILMergeはWPFでは使えないとネットに書いてあったので試してなかったのですが、
一応調べてみますありがとうございます マシンがポンコツだったらVS2010のままがいいと思うけど >>246
VS2015は辛いけど、2012や2013はそこそこ軽いと思うが 俺環の割とポンコツなWindows10のPCで数万行のソース扱うのにVS2015よりもVS2017は軽い
更新が頻繁なので不具合が怖いのなら勧めない うちでも 2017 の方が軽かったので 2015 は削除しちゃったな。
2015 は仕事で3年くらい前のハイスペックノートPC で使ってるけど、こっちでは快適に動いてる。
たぶん SSD の有無の違いだと思う。 うちは自社サービスのベンチャー企業だけど、そんなところですら2017のアップデートはヤバいから即更新はやめろと言われてるわ
それくらいヤバイ >>250
cuda が突然コンパイルできなくなってしまった… プレビュー版せっかく提供してくれてるのに使ってないの? VS2010は、
Corei7で今のところサクサク
ゲーミングマシンだからね。 >>253は初心者さんのフリした上級者の釣りなのかそれとも本当にnoobなのかどっちなんだろう・・・ さすがに今時async/awaitすら使えない2010に固執してるのは老害を自覚すべき 2017これだけアップデートしまくってて次のバージョンどうするんだろうな
どこかで打ち切って今後の更新は2020買ってねにしたとしても、十分に差が開くまでだいぶ時間がかかりそう
MS的にはVSの売上ってほとんどがサブスクリプションらしいから、このままローリングアップデート&サブスクリプションモデルに移行するのかな >>254
初心者ではないかな。
ただ、道具が古いから宮大工と化してる。 >>250
別に珍しくないだろ
製品作る環境と最新版のお試し環境を分けてるって普通じゃね? >>258
なんで宮大工が出てくるのかわからんけど、宮大工ってスーパーエリートだぞ >>253
Core i7っていつのだよ
10年位前のから現行のまで沢山あるぞ >>261
未だに3桁ナンバーのi7だけど流石に2015以降は参照表示でもたつきあるな >>260
だからEクラスなんでしょ?
5段階評価で 宮大工は一般の大工が持っていない技能を有しているから価値があるんだろ
きっと258の周りには、自分の使ったことのあるバージョンよりも古いバージョンのVSを使わせたら
ストレスで気が狂ってしまう特殊な人が集まっているのだろう 宮大工が高層ビル建てるわけじゃねーし
いらねーだろ >>61
まじか。
3念位前のやつや
そこそこいいCPU思ってたのに。
スレッドりっぱー言うヤツかおうかな。 いやいや、CPUの世界はムーアの法則が成立しなくなって10年以上経つ
もうPCが2,3年で旧式化するような時代じゃない
買い換えても体感できる差なんか生じないはず スレッドリッパーに乗り換えるでぇ!!!
Core i7 でもVS2010は結構サクサクなんやでぇ〜〜〜!!! >>255
async/awaitってGOTO並みにバグの温床じゃね >>275
流石にawaitのスレッドがどう動いているか知らずに作っている人は居ないだろ
居ないよな? ちゃんと原理を知っていれば問題ないと思うけど
ちゃんと教えてくれる親切な存在が非常に少ない
GUIがそこでメソッドの終了を待機しますなんてクソみたいな解説は死ねばいい >>281
っていうかどっちかっていうと
必要になるときの仕様と機能にズレがあるような uwpは非同期前提でライブラリ組まれているから
ファイルとか通信弄ったら強制的にasync使わされるな >>283
マジで?
ファイル弄ってる間何しろって言うんだろうねw
@ファ
Aファ
Bファ
Cファ
Dファイルオープン!
ってユーザが押したら
デフォルトで@〜Cも実行されんの? >>284
@のオープン処理のawaitで待つのでオープン処理が排他で開きっぱなら、@のオープンが終わった後にA〜Dでオープン失敗で例外吐くんじゃね >>286
待機せずに実行ならどれか一つがオープン処理が終わって他が失敗で例外やね、まず@が最初に終わるだろうけど
非同期当たり前だと、待機中の操作で悪さできないようにに考えないといけないのがまた面倒だわな >>287
100個処理ある内のあって2〜3個ぐらいの動作をデフォルトにしたのか
気が狂ってるな >>284
ファイル弄る前にボタンを無効化するだろうが・・・ >>289
処理中はWinFormだろうが入力無効にするな
そういう安全策とらずに文句言うのが初心者らしくていいじゃん 個人的にはあんまりよい方法と思わんが、UIじゃなく
処理の再入を無効にするってアプローチもあるよ async/awaitがリリースされたときはヘルスバーグも耄碌したかと思ったな
今ではJavaScriptやPythonにもパクられているという コーディング速くて正確な人って入力補完とかリファレンス見なくても頭の中で全部関数把握してるのかな VB職人みたいな人の中にはそういう人もいるね
頭使わず手癖でコピペコードを量産するタイプ >>294
そんなの無理だからちゃんと確認してるんだよ
正確じゃ無い人は覚えてると思い込んでてテキトーにやるんだ >>296
本当に速くて正確な人を知らないんだな
まともな仕事をしてれば割とよく居るぜ >>297
だから確認するのも速いんだろ
暗記なんかしてねぇよ
馬鹿じゃあるまいし 過去に自分が速いって言われてたときは、
・普段から出来るだけ汎用的なコードを書くように心がける
・上のをテンプレートとして頭の中やソースファイルに保存しておく
結果迷いがないから「手が止まらなくて気持ち悪い」とか言われてたなぁ。。。
それにだんだんと洗練されていくからか、同じような機能を持ったコードを書いたときに自分の方が行数が明らかに少なかった。
つまり考えてる時間が短くて、打ち込みも少なかった。
そういう例もあると言う事で。 じゃあ、次は俺の番だな
ゴレイヌ「まずゴリラを具現化しようと決めてからはイメージ修業だな
最初は実際のゴリラを一日中いじくってたな。とにかく四六時中だよ
目をつぶって触感を確認したり、何百回何千回とゴリラで射精したり
ずーっとただながめてみたり、なめてみたり、音を立てたり、嗅いでみたり
ゴリラで遊ぶ以外何もするなと師匠に言われたからな
しばらくしたら毎晩ゴリラの夢を見るようになって、その時点で実際のゴリラをとりあげられた
そうすると今度は幻覚でゴリラが見えてくるんだ
さらに日が経つと幻覚のゴリラがリアルに感じられるんだ
重さも冷たさもすれあう音も聞こえてくる
いつのまにか幻覚じゃなく自然と具現化したゴリラが出ていたんだ」
で?何の話だっけ? >>297
それっていつも同じような処理を書いているからじゃなくて? 別にいいじゃん速いやつ居たってw
てか普通に居るわw
悔しいんかおまいら?w そういう議論があること自体初心者からすると絶望だわ
調べる時間、確認する時間が段々短くなっていって最終的には何も見なくても
なんでもできるようになるもんだと思ってたが >>305
何も見てないのは確認してないだけじゃん インテリセンスのなかった頃は、普通にviやmifesで書いていたわけで
当たり前のようにライブラリの関数名など記憶していた
何もなければ人間はそうやって順応するものだよ くだらない話だけど、ライブラリに登場する識別子の数はその牧歌的な時代から何倍ぐらいになってるのかと。
100倍じゃきかないと思うけどね ちょっと聞いてみたいんだが、株の予測でぼろ株を当てるのに利用するとして、C#で株のろうそく足が週足で連続3回ダウンしたチャートを見つける方法があるとしたらどうプログラミング組める?
是をアプリに組み込みたいとしたらの話で分かる人いる?
例えば、株のx軸が価格、y軸が期間なら、21日以内でろうそく足が3回連続ダウンしているってのを見つけるだけだけど
i= genzaichi = 1
for(i = 1; i<4; i++ ) //4回未満=3回のループで使用したい
x=kakaku , y= kikan
x軸の0ラインからの乖離率として、1-7/10 // =0.3 x軸の0ボトムラインから30%乖離、
1-8/10 // =0.2 x軸の0ボトムラインから20%乖離、1-9/10 // =0.1 x軸の0ボトムラインから10%乖離
など使うのか?と考えてみたんだけど、そもそもこれC#で本当にできる? 21日前の価格-14日前の価格
14日前の価格-7日前の価格
7日前の価格-現在の価格
---の銘柄 >>312 それどうやるのさ?
x=21日前の価格
i =7日後の価格
x-i=[14] // 21日前の価格-14日前の価格
x-i*2=[7] //14日前の価格-7日前の価格
x-i*3= [x >1] ??? //7日前の価格-現在の価格
x軸の価格が1未満?そもそも株の価格が底値になるってのは0でいいのか?
なら底値=0 だから1未満にすればいいのか? どっかにあったスクリプトをコピペして、自分のやりたいように改良したいんだろうけどさ
そう言うのはクラウドソーシングかどこかでお金を払ってやってもらったら良いんじゃないかな、話さえきちんと伝えられれば大してお金もかからないでしょう
C#を勉強中の人の邪魔にならないだけでなく、初心者の小遣い稼ぎにもなるだろうし、あなたもちゃんとしたプログラムが手に入る、良いことづくめだよ >>316 ま、そうだよね これで商売してる人いるんだわ
知恵○でぶくったら重回帰分析だのモンテカルロ・シュミレーションだの難しいこと知ってる人いたわ
キャリア積まないとわかんない話だってことは理解した さんくす >>311
作ってあげようか?
もとになるデータは何処からとりだしてくるの?
チャンとしたソフトにするには80hくらいはかかるんじゃないだろうか?
その程度の費用で。 何も理解していなくてもスレ的にはいいけど、仕様・設計の段階で来られてもどの言語スレでもスレ違い >>311
「週足のダウン」をどう定義するのか知らんが
仮に陰線ならダウンってことにすると、週ごとの始値・終値を比較して
値上がりしてるなら0、値下がりしてるなら1とすれば
3週間なら[0, 1, 1]みたいな配列ができる
[1, 1, 1]になってれば連続3回ダウン
(>>312の内容と意味は同じ)
プログラミングは難しそうだからExcelスレをオススメする >>311
プログラミングの基本は分割統治。
まず落ち着いて、
(1) 〇足(週足、日足、n時間足...)のローソクを表すCandle型を定義する
(2) 任意の期間の時系列の株価データを受け取って、その期間の〇足のCandleの配列を返すメソッドを書く
ここまで出来たら後は簡単でしょ C# なんて難しい。
Ruby の、chunk_while でグルーピングできる
# 終値が減少部分だけの、配列に分ける。
numbers = [100, 50, 70, 70, 60, 55, 65, 45, 40, 30, 20, 25]
results = numbers.chunk_while { |prev, num| prev > num }
.select { |ary| ary.length >= 3 }
p results #=> [[70, 60, 55], [65, 45, 40, 30, 20]] ここで聞くべきかわからないんだがiis+asp.netで webapi作ったとして
リクエストをサーバーで処理してレスポンスをクライアントに返して届かなかった場合にaspでその失敗ってわかる? すみません、どなたかにお聞きしたいのですが
intやshortのような整数型同士のキャストはどのくらいの負荷があるんでしょうか?
出来る限りメモリを切り詰めたいので常に最小の整数型を使っているのですけど
計算や引数を渡す過程で頻繁にキャストを書かなければいけないのはどうなのかなと思いまして >>326
気にしなくて良き。負荷気にするには数年速いわ >>326
大体の場合負荷は限りなく低い
でも局面によって違うから自分で試す以外答えはでない
普通に作ったのと切り詰めたのを比べるといい
DateTime.Nowの値を保存しておいて差分でどのくらい時間がかかるか見る
差が小さすぎるなら何万回もループさせて差分を見る >>326
もうPC-98の時代じゃないんだからw >>326
データをストックする場所を最小にしたいのならともかく計算の過程で頻繁にキャストしていたらムダでしかない
キャストのコストが0でも保守が面倒になるだけ >数年速いわ
音速の貴公子と言うより天文学レベルカー
と、微妙なtypoが何故か気になった つーか、整数のキャストなんてHWが自動でやってくれない時代だって
符合拡張するか上位バイトを捨てるだけだよw 4バイト整数に、1バイト型を4つ詰め込んだりするのは、組み込みC とか
GC もある、C# でやるだけ、ムダ! ムダ! ムダ! 単純な話で32bitCPUで動いているとすると計算の基本単位が32bitなんだから
コンパイラ上で16bitに切り詰めて計算したところで意味がない
メソッドの引数でメモリの節約とかの発想なら根本的に間違い >>325
TCPなんだから届かなかったら確実にエラーになるよ >>326
メモリを切り詰めるために最小の整数値にしても
32ビットだと32ビット単位のほうが効率的だから
コンパイラがパディングを詰めて32ビット単位にしてしまうから無駄だよ
組み込みなら話は別かもしれんが もしかして、boolとかもintにしたら2倍早くなるのかな?
bool b = true; //1bit分メモリ確保
if(b){}//メモリから読み出され、論理演算を2回を挟み、trueと比較
int i = 1; //32bit分メモリ確保
if(i==1){}//メモリから読み出されたら、そのままtrueと比較 boolはビットフィールドじゃないってw
論理演算なんか入りませんw
x86の機械語知らんけど、普通に考えればboolの評価は変数の値がゼロかどうかだけだが、
intの==演算子はコンペアが入るから、そっちの方が遅いことはあっても早いことはありえない でも32bitなりなんなりの単位で読み出されて、ビット演算無しでどうやって取り出すんでしょう なんでアンマネージ型の話を始めたの?ガイジだから? >>341
StructでPack指定すればパディング詰めない その手の話をするなら、とりあえずILとスタックを確認できるようになってから
可能ならRyuJITで吐かれるアセンブラまで見るべき sizeofが1で出てるものを勝手に変えたりするものなのか? -1から1の範囲を分岐無しでビットに詰めるのってどうやるんだっけ?
aabb ccddみたく4つの数値を1byteに詰める小技を昔見た気がするが思い出せない 64bit-CPU なら、8バイトしか無い。
1〜7バイトなんて無い。
使わない部分を、0 and で、マスクするだけ
並列処理で、4 + 4バイトとして使うとか、そういう命令はある >>347
何言ってるのかよくわかんないw
分岐って何だw >>348
俺はそこまで詳しくしらんが普通にあると思うが。
64ビットレジスタを普通に32ビットのEAX,EBX,ECX,EDXなどとしてアクセスできるし。
http://www.zombie-hunting-club.com/entry/2017/10/15/220724 それともアドレッシングの話か?
あれアドレッシングってどうなってんだっけか。
SP(スタックポインタ)レジスタとかって64bitCPUなら8バイト単位になるんだけっか? >>349
// aabb 0000
bit |= (a == -1)? 0x80: (a == 1)? 0x40: 0;
bit |= (b == -1)? 0x20: (b == 1)? 0x10: 0;
こうやるのは簡単なんだよ
これを三項演算を使わずビット演算だけでやる方法があるはずなんだよ
入れる方はシフトしてマスクすれば出来そうだが取り出す方法がまるで思い出せん >>352
-1を0b10じゃなく0b11に割り当てれば>>354の言う通りだね >>350
>64ビットレジスタを普通に、32ビットのEAX,EBX,ECX,EDXなどとしてアクセスできる
8バイトよりも小さい用途には、マスクして使っているだけ
実際に、8バイトよりも小さいレジスタを作るのは、場所・回路のムダ。
しかも統一的に扱えないから、ややこしいし、通信するのにも時間が掛かる >>354-355
ちょっと書いてみてくれよ
俺がやるとキャストの乱れ打ちにしかならん byte bit = (byte)(((a & 0x3) << 6) | ((b & 0x3) << 4) | ((c & 0x3)<< 2) | (d & 0x3)); 1. 「確かな力が身につくC#「超」入門」
を勉強し終えて
2. 「独習C# 新版」
を読み始めたんだけど、この本厚すぎて通読には分量有りすぎる・・・。
1を読み終えてもう少しレベルアップしたい人におすすめな薄めの本ってありませんか? 勉強という言い訳でいくらでも足踏みできるから
ノロノロしてるとそれだけで終わっちまうぞ
時間かけた割には何にも身についてなかったりする
経験と知識のバランスが大事だ
一つ本読んだらせめて一つはプログラム作れよ いや一生本読んでいればいいよ
自由度の高い分野で「レベルアップしたい人におすすめな薄めの本」ってもう発想が「楽してレベルアップ」で無理だから 言語仕様だけ知ってても実力は上がらない
でもやみくもに手を動かしても得られるものは少ない
c#向けじゃないけど昔は脱初心者レベルのソフトを作りながら学べる本があったけど
今はそういった需要は薄いのかあまり見かけない
初級者と上級者の差を埋める本大事だと思うけど
プログラマー的思考を身に着けるために
初歩のアルゴリズム系の本でもじっくり読んで将来に備えよう >>366
闇雲に動いた方がいいよ
この業界、〇〇体系とか超クソだし
単純に作成したアプリの数が力になっていくと思う >>368
昔は今よりできることが少なかったから
やみくもにやっても到達する範囲は広かった
今は広すぎるのでやみくもにやると割に合わない
ずっとググってるだけになりがち やりたいことをググれば、だいたい答えが出てくるのがC#のいいところ その当時流行りのライブラリの使い方なんてすぐに陳腐化する
本質的に長く使えるのはプログラマ的思考
基本的なアルゴリズムがわからないのにプログラマを名乗るのははずかしい
問題解決の手段はググってライブラリをみつけるだけじゃない ○○をやりたい
↓
c# ○○ で検索
↓
ヒットしないのでやめる
じゃなくて
○○をやりたい
↓
本やwebで○○について学習
↓
c#でコーディング >>372
> プログラマ的思考
怠惰は美徳
明日出来る事は今日やらない
アルゴリズムを学ぶよりはライブラリをググる >>372
こういうこと言う人間って結局何も出来ないやつのコンプレックスなだけ
プログラミングで一番大事なのは動機。何かを作りたいという情熱だけ 真逆の思考の人が両方ともプログラマーを名乗る
それでも全然問題ない >>378
>>372のような初心者に教えたがる初心者は居ない方が良い >>380
しかし376のような方が情熱で作るのをコピーするのもプログラマ というより、現場の土方も橋の構造の設計者も同じ「建築関係者」ってことでしょw
ただ、土方が「構造力学なんて必要ねえ!」って吠えるのはその通りだけど滑稽ではあるねw Qiitaみたいに公共領域であるWebにゴミを棄てないなら何でもいい
勝手にやってろ やりたいことを言語仕様を学んだだけではコーディングできないことがある
やみくもに手を動かすだけでは目的を達成できないことが出てくる
過去の確立された手法を学ぶことで徐々にこうすべきだとが体が覚えていく
そして内部で何が行われていてどれだけの計算コストがかかりメモリなどが消費されるのか
正確じゃなくてもそれが多いか少ないかを何となく雰囲気がつかめるようになると大成功 何かを作って問題にぶちあった時に発揮する問題解決能力に勝るものはない
くそみたいなネットゲーム作ってる会社が最先端のライブラリを生み出してる現状がそれ >>387
ここには初心者しかいないw
>>374
の上が全く納得できなかったけどコピペプログラマの考え方だと合点がいった
>>361
そもそも何のための勉強なのか
就活のための勉強なら読んだ本が多い人と簡単でも実績のある人がどちらが有利なのかはわかる
趣味のための勉強ならここで聞かずに好きにしたらいい
>>363の下の2行を否定できる人はまずいないだろうな 今時、本を読んでコードの勉強する奴なんているの?
いんたーねっとを知らんの? >>367
趣味に使えるも使いないも関係あるかよ(´・ω・`) >>394
いまは何をされてるんですか?
代表作は何でしょか? >>390
インターネットの情報もすべて書籍から生まれてるわけだが >>396
そんな事ねーだろw
むしろ逆なんじゃないの?
ブログから書籍なら分かるけど >>396
MSDNのリファレンスは書籍が元になってんのか? PSVRでもやればいいのに(´・ω・`)
スクエニ、「結婚指輪物語 VR」を5月25日配信--漫画の世界に入る新しいVR表現
https://japan.cnet.com/article/35116459/ 書籍が情報の原点だという意味では
まぁそんなこと言い出したら知識伝播の原点は壁画時代にまで遡る >>394
そんなにやっていて初心者のスレで真っ赤になった上にバカにされるんだ
こんなプログラマにはなりたくないな
そして忘れ去られる元の質問者 努力で解決しちゃう奴がプログラミングをやると>>394みたいになりがち 永遠の初心者よりいいと思うけどw
コピペしかできない人間にはなりたくない そんな真新しくプログラム作ることってなくないか?
自分のライブラリ使うのもコピペに入るならほとんどコピペみたいなもんやろ
ネットから拾ってただコピペは知らん 彼はコピペしかできない人達の何かを刺激してしまったんだなw コピペって言えばQiitaやHatenaの記事は酷いもんがあるよな
間違ったテクニックや誤魔化す技が一度紹介されたら、そのコピーブログが量産されてくんだ >>410
酷くていいんだよ
ああいうのは>>394みたいな努力系プログラマーが排出するゴミの受け皿なんだから ここでいいかな。
分かる人いたら教えてください。
C# で作成する webアプリで、web.config の appSettings セクション?の下の add には
通常では key と value の組で設定の名称と値を保存していますが、key と value の他に独自のプロパティを追加して、たとえば
<appSettings>
<add key="名称" value="設定値" explanation="この項目の説明"/>
</appSettings>
みたいな事をしたいのです。
ずっと前に appSettings の拡張クラスを定義する事によって可能になるというような記事を読んだ記憶があったような気がするのですが
いまは見つけられませんでした。
上のようなやり方の是非はともかく、実現の可否と、やり方を教えてください。 できるけど面倒くさいぞそれ
設定は別のファイルにしたほうがいい exeというのはCやC#をコンパイルしたものですか?
PyhronやRubyをコンパイルすると拡張子は何になりますか? 参考にしたい実行ファイルがあるんですがexeはどれもCやC#にデコンパイルできるんでしょうか?
構文の勉強をするにはどうすればいいですか? exeはWindowsの実行ファイル
PythonやRubyはインタプリタが実行することが多いけど、exeにする方法もある
簡単にでコンパイルできるとは限らない
必要に応じて逆アセンブルを読む 1. 各言語 → 実行ファイル
2. 各言語 ← 実行ファイル
1. のように、各言語をコンパイルして、実行ファイルを作ることはできるが、
2. のように、実行ファイルを逆コンパイルして、
各言語のソースコードに直すことは、無理
特に、他人が作ったものは、年十年も研究しないと無理
1. のように、まず自分でプログラムする事を、勉強した方が速い >>419
C#で作られたものならILSpyなどのデコンパイラを使えばかなり高精度でソースを復元できる
でも他人のソース見て勉強したいならGithubでOSSを読むのが一番だと思う
上の人はこの板の名物基地外だから無視するように ていうかc#って難読化しないとソースが丸々実行ファイルに入ってるよね 読まれたら困るような技術やマルウェアでも仕込んでんのか? >>419
CとC#が同じように見えるレベルででデコンパイルで勉強とか無理
それ以前に言語スレで質問するときは最低限その言語で「Hello World!」実行できるようになってから Cで書いても逆アセンブルすればだいたい読めるじゃん >>415-416
ありがとう。
調べてみます。
>>417
茨の道っぽいかもですね。
まあ先の用例のケースなら <!-- --> でコメントを入れてもいいので、適宜、工数を考えてみます。
でも <!-- --> でコメント入れると、行挿入したときとかに勝手に改行が入ったりするので。。 読み込んだ画像を縦横に連結して新しく出力したい。
横への結合はあるけれど、縦・横並べるにはどうしたらいいんだ
■
↓
■■■
■■■
こういう風にしたい 読み込んだ画像を上下にずらしながら描画すればいいんじゃねーの? >>432
C#以前に画像の大きさと座標を考えるだけじゃないの
横に連結できるのに縦横ができない方が意味不明 class TypeA: IType{}
class TypeB: IType{}
IType[] table;
こんな感じの構成で配列にI/Fを格納してステートマシンをやりたいのに、
何をnewして配列を初期化したらいいのか分からない誰かたすけて >>436
IType[] table = { new TypeA(), new TypeB() }
とか? ごめん
IType tmp = new IType[2];
としたら普通に出来た
インターフェースはnew不可能って嘘言ってる奴は死ねばいいのに Interfaceはnew出来ないぞ。
それは配列をnewしてるのであってInterfaceをnewしてるわけでは無いんだよ。 >>421,428
サイト見ながらハイ&ローゲームを作ったけどめっちゃ難しかった
でもマインクラフトなんかよりずっと面白いな!
お前らみたいに長年プログラムを書いてるとソースコードを見ただけで吐き気がしたり嫌になったりすることもあるの?
今でも楽しく書けてる?もうロボットになっちゃった? ソースなんか見なくても
テストが全くない、仕様書はない、前任者が逃亡
のどれかを聞いたら吐く 好きなことは趣味だけにとどめておけとは良く言うな
まぁ広い世界を見るのと見ないのじゃ、得るものも考えも違ってくるけど 起動中の任意のウィンドウをクリックスルーさせるアプリを作りたいんですが開発言語は何がいいでしょうか?
C#で作れますか? > クリックスルーとはウェブサイト上の広告をクリックすることによって広告主のコンテンツに移動することであり、
> ウェブサイトの広告効果を測る一つの尺度である。
残念ながら意味不明 エスパーすると任意のwindowの後ろの座標クリックしたいんじゃね? 言い方が悪かったですね
クリックスルーとは手前に表示されているウィンドウではなくその奥にクリックイベントを送ることです
私の作った造語です。
クリックをスルーさせる。なら分かったでしょうか? WndProcでマウス関連のメッセージが来たらそれを後ろのウインドウに送れ 関数も知らない初心者なのでよくわかりませんが、
ありがとうございます
頑張ってみます C#でWindows7や10の通知を検知する方法ありますか? >>450
これだと自分自身のフォームに対するクリックしか対応できないんじゃね?
>>448で自作する話かと思った int[] ii = {1,2,3,4,5,6,7,8,9,10};
var i = ii.Where(x=>x>=11).FirstOrDefault();
Console.WriteLine(i);
こんな感じのことをしたいのですが、iに0が入っていたときに0が検索結果なのか?それともデフォルト値の0が返されたのか?を調べる方法ってないのでしょうか? >>454
var i = ii.Where(x=>x>=11).Cast<int?>().FirstOrDefault();
これならデフォルトはnullになる >455
ありがとうございます
null許容型にしてしまう技は全然思いつきもしませんでした 普通に.Any()みたいのでチェックしたほうがいい気がする 普通にanyとFirstでやるほうがいいと思う
null許容型を嫌っている人も多いし forでやればいいと思うけど一行で無理やりやるとしたら
var i = ii.ToList().FindIndex(x => x > 11);
で位置が取れる
見つからなかったら-1が帰る
値はii[i]
※これはLINQじゃない 見直したら
var i = Array.FindIndex(ii, x => x > 11);
でも行けた
失礼 そういうラムダ式ってぶん回してるとGCガリガリしそうな気がする俺は素直にforで判定してる GC大量発生しているじゃないか!とGen0と1の数字で大騒ぎしているお客さんみたいなこと言わないでよ >>463
VRが90fpsなんて無茶を求めて来なきゃ俺だってLINQとか使いたいよ Listの実装にもよるけどvector的ならインスタンス1つ増えるだけでしかも速やかに回収される
GCからみたらただの良い子だね いくらLINQでも探索でGCガリガリなんてするわけないじゃん パフォーマンス追求するときは使わなきゃいいだけじゃん
何回目だよ >>470
だったら使うの止めてよ
パフォーマンスが要求されるところで使えないんでしょ
普通に組めばいい話じゃん コンパイラーによって最適化された結果リンクの方がパフォーマンスがいいときもある
勝手に使えないと決めつけるんじゃなくてちゃんと調べた方がいいよ >>473
その調査で生じる賃金はどこのどなたが払って下さるんですか? 今回はLINQ関係ないだろ
Listのメソッド使ったんだから
ラムダが嫌ならPredicateのdelegate渡せばいい リンクだろうとラムダ式だろうとパフォーマンスは実際にやってみないとわからないってのが言いたかった
こんな所でボトルネックなんてでないから好きに書けばいいと思うけど >>472
簡単だし楽だから使うよ
おまえは全部C++でやっとけよ どのくらいのパフォーマンスが必要なのかも分からないのにパフォーマンス必要だから止めろって奴何なの? くだらないことで揉めるんじゃない
ただanyからのfirstは無駄だとは思う 無駄というか作法的にイマイチ
IEnumerableは列挙するたびに結果が変わったり一度しか使えなかったりする実装もあり得るから、
終端操作を二度やるのは一般には良くないね >>479
何に対して何が遅いと言っている?
あと許容出来る遅さと許容出来ない遅さは区別することを前提でお願いね。 >>480
>ただanyからのfirstは無駄だとは思う
なんでそう思うの? >>485
本来同時に得られるはずの情報をわざわざ二度の処理で求めているからだろ
処理効率は別にしても、マルチスレッドとか考慮するとバグの元になる可能性もある anyで条件付きのループした後にfirstで同じことをするより、2回目は直接該当データを参照する方が早そうって感覚 列挙元の内容が変更されないことが保証されているのは列挙子が有効な間だけ(変更されたら列挙子が無効になる)
Anyの直後のFirstは新しい列挙子を使用して列挙をやり直すので、
前回から列挙元の内容が変更されていない保証は一般には無い >>488
正しいよ
でもお呼びじゃないんだカス
静かにしててくれる? >>488
anyは存在確認でfirstはデータ取得が目的だから順序が変わっても問題なし
むしろfindindexからインデクサでデータ取得する時の方が大事になってくるかな
だから、>>461はいいけど、>>460は少し危ない気がする いや正しくないってw
別のスレッドでコレクションが変更される可能性があるならそもそもLINQは使えない。
LINQのメソッドが返す列挙子はオリジナルのコレクションのコンポジションに過ぎないことを
忘れちゃダメよ >>490
問題あるとかないとか以前に、同じコレクションを2回スキャンするのは
無駄だなと思うことはプログラマの最低要件だと思う >>492
別にそこは否定してないんだけど
また、リストや配列のメソッドはスレッドセーフじゃなかったと思うからanyがとか以前にロックしなきゃ駄目かな
それはまた別の話だから別に触れないけど こんな場合には使えないんだ!←わかる
だから絶対にどんな場合にも使うな!←キチガイ >>486
うーん、考え方としては理解できるんだけど、
現実問題としてintみたいにdefault値に0を返す型の場合で
whereでフィルタした結果に要素があるかないかで処理を分けたいときにどうしてるの?
>>455みたくnull許容型にキャストするのは一案だけど読みやすさは低くなるよね >>495
場合によっては Enumerable.DefaultIfEmpty 使うものあり >>495
whereでフィルタかけたならそのリストを作って、countで判別でもよさそう >>496
例えば Where(…).DefaultIfEmpty(-1).First() みたいなこと?
>>497
それは遅延評価のメリットを完全につぶしてるよね
扱ってる型によってはcountでもO(1)で性能的な問題はない場合もあるだろうけど >>499
> 例えば Where(…).DefaultIfEmpty(-1).First() みたいなこと?
そう。元のコレクションに -1 があったら使えないけど >>494
プログラマなんざ99%キチガイだから正しいだろ?
根拠あげろって?皆さんが根拠だろうにご冗談を public static class MyLinqExtensions {
public static T? FirstOrNull<T>(this IEnumerable<T> s) where T : struct {
foreach (var i in s) return i;
return default(T?);
// return s.Cast<T?>().FirstOrDefault();
}
public static void ForEach<T>(this IEnumerable<T> s, Action<T> a) {
foreach (var i in s) a(i);
}
}
class Program {
static void Main(string[] args) {
var s = new [] {7, 0, 1, 2, 13, 3, 4, 5};
var x = s.Where(i => i >= 11).FirstOrNull();
if (x != null) Console.WriteLine(x);
s.Where(i => i >= 11).Take(1).ForEach(Console.WriteLine);
}
} 俺、そんな大ごとになるようなことを聞いちゃったのかな・・・・・ このスレはlinqを異常に嫌っているおじいちゃんが生息してるから注意してね WEBサイトのデータを取得するコードを書いているのですが
サーバのデータを書き換えて、クライアントからアクセスしても
キャッシュされた値が取得されてしまい困っています。
キャッシュポリシーというのでキャッシュしない設定が出来る様です。
以下コードを書きましたが、エラーが出てしまいます。
何が原因なのでしょうか?
using System.Net; //WebClient
using System.Net.Cache;
****************************************************
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
******************************************************
エラー
Error 8 The type or namespace name 'HttpRequestCachePolicy' could not be found (are you missing a using directive or an assembly reference?)
Error 11 The name 'request' does not exist in the current context
Error 10 The name 'HttpRequestCacheLevel' does not exist in the current context >>506
コードも張らないとアドバイスできんがな >>507
WebRequest req_1 = null;
req_1 = WebRequest.Create(str_url);
res = req_1.GetResponse();
でWEBサーバに設置したデータを取得しています。 >>506
https://msdn.microsoft.com/ja-jp/library/system.net.cache.httprequestcachepolicy(v=vs.110).aspx
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
WebRequest request = WebRequest.Create(uri);
request.CachePolicy = noCachePolicy;
uriに文字列設定したら普通にビルド通るけど、他に何やってる? >>509
ありがとうございます。
凡ミスしてました!
using System.Net.Cache;
を別のソースファイルに書いてました、、、 エラーは消えましたが、WEBサーバ上で書き換え前の値が取得されてしまいます。
うーん、キャッシュポリシーの設定はあっているはずなのですが。
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy; >>511
今ナウいのは何に使うんですか?
WEBサーバ上にはというファイルをおいてます。
[ hoge_status.dat ]
1,aaa
2,bbb
3,ccc
そして、サーバ上で「2,bbb」→「2,babaa」に
書き換えて、クライアント(C#)から上のコードを実行した時に
「2,bbb」が取得されてしまいます。 ありがとうございます。
サイトに記載の内容を参考に↓のコードを書きました。
namespace ns_test
{
public class c_udoxn
{
[DllImport("WinInet.dll", PreserveSig = true, SetLastError = true)]
Error 29 The type or namespace name 'DllImportAttribute' could not be found
(are you missing a using directive or an assembly reference?)
すると今度は、DllImportAttributeが見つからないというエラーがでます。
何か間違っていますか? using System.Runtime.InteropServices; // DLL Import
これでエラー消えました。 How can I view the allocation unit size of a NTFS partition in Windows 10? >>518
fsutil fsinfo ntfsinfo 特定のクラスのインスタンスを探したり列挙したりすることって出来ないのでしょうか?
A a = A();//オブジェクトの生成をどこかに記録するとか面倒なこと無しに
A b = A();
A c = A();
FindObjects(A).ForEach(・・・・・);//雰囲気としてはこんなことがやりたいんです コンパイラの選択次第で出来上がりの性能でそんなに変わる? >>521
できない
お前が言ってるのを実現してしまったら、
var a = new Message(text: "うんこ");
a.Print(); //textに渡した内容を出力する
で一行目と二行目の間にaの内容が勝手に他所から書き換えられている可能性を常に考慮しないといけなくなるんだぞ?
初心者ならピンとこないかもしれないけどね
初心者がプログラミング言語を学ぶときは常に以下のように考えることが大切
・これを作った人は自分より遥かに頭が良く経験豊富である
・普通の方法でできないのは、それが悪いことだから >>521
コンストラクタでどこかに記録しときゃいいだけじゃね?
任意のクラスでやりたいならコンパイラに手を入れるなりしないと無理 >>521
生成後、List<A> Alistにaddすれば可能。 >>521
class A{
public static readonry List<A> allList = new List<A>();
public A(){
allList.Add(this);
}
public void Dispose(){
allList.Remove(this);
}
自分ならこうやってクラス内のstaticに入れておく >>521
参照するだけなら自分に属しているフォームやクラスは列挙できるだろ
あとは名前で探せよ 明示的にDisposeを呼ぶのが面倒というなら、
リストに入れるのを弱参照にしてデストラクタを実装すれば全自動に出来るよ >>531
探して代入したものでDisposeやCloseもできる。インスタンスの書き換えはできない
521が何のためにやりたいかによる レガシーシステムで一番困るのはグローバル変数
これ以外は簡単にリファクタリング出来るがグローバル変数だけは簡単にはいかない 普通の知能持ってたら>>529みたいにクラス内のスタティック変数でやると思う
グローバル連呼してる奴は知能足らなさすぎじゃね? 他言語のグローバル変数マンがpublic staticマンになる >>534
ただ、
UnkoWorld-●UnkoArea-●Unko
みたいな関係にしたくなったとき
それでやってると
ウンコみたいにウンコウンコになるんちゃう? >>534
パブリックなら同じ
最初に書くときにらくだからって堕落して思考停止してグローバルを使うと
だんだん考える力が衰えてこういう判断ができなくなる パブリックスタティック書くお^q^
グローバル連呼は知能がたらないお^q^
ぼくはかしこいんだお^q^
おっおっ^q^
これがグローバル変数を使う人間の末路です
恐ろしですね 俺も一瞬いいかな?
とか思ったけどpublicにされた時点ですべてが駄目なことに気づいた 具体的にどういうときにそうしたくなるか書いてあればヒントがでてくるかもしれないけど
一般的になんでもかんでもそうしたいと言うのはNGだと思う >>529のケースだとpublicにする必要ないよね ローカルで使い捨て目的でAを作ったとしても
明示的にdisposeしないと消えない
c++のnew deleteのメモリリーク問題を回避するためにガベージコレクションの仕組みができたのに
また逆戻りするだけ privateならOKってのも短絡的だよな
独立に生成したはずのオブジェクト同士が外から見えない部分で密かに連携し合っているとか破滅の臭いがプンプンするぜ >>542
>>529はNG
こうやって使いたくないときもこうなっちゃうじゃん
static抱えちゃうのは悪手 public じゃなかったらどうやって要素を列挙するんだよ >>546
多分仕様がウンコ
客と詰めきれてない
コードばっかり見てるとバカになるやつの典型
外の空気でも吸ってきたらよい >>546
えっ? w
まあパブリックにしても外部から書き換えられないなら大抵は問題ない
>>537とかはパブリックと言うだけで思考停止してる老害なんだろうな >>545
フレームワーク側でstaticをガンガン使ってるけどそれには文句言わないの? そうか、>>521で書いちゃったのが実現できるようにすると、いつまでもインスタンスへの到達可能性が残ってGCが機能しなくなるのか
全然わからなかったわ >>551
そういうこと
目的を絞った特殊な状況でしか使えない
一般的に使うのはNG いつもそうだけど、本質を少しも突かない頭の悪いやり取りしかないねw
論点は>>521,>>529的な仕組みが必要になるケースがあるかどうか。
俺はないことはないと思う。
ただ、揚げ足取りかもしれんが、>>529はList<T>をそのまま公開してるのはまずい >>554
実際やるときはさすがにprivateにしてstatic ForEachを実装するし、
ライブラリ化するならセーフティとしてリストをWeakReference<T>にしてデストラクタで自動削除するよ
ただ掲示板でそこまで長々と書く気はないだけで 指定の時刻を過ぎたらbackgroundworkerを止める仕組みを作りたいのですが
なにかおすすめの方法はありますでしょうか? >>555
クラスの扱いの話がクラス自身を変更しちゃってる実装に違和感 >>556
それだけだとどこで時間を確認するべきかすらわからん
仕様きちんと決めてから質問して >>549
はあ?
そう言うイテレーター作るだけだろ w >>551
デストラクタでリストから外せばいいだけ
もしくはIDisposableにしてdispose( )で外すとかでもいい >>560
参照が残った状態でデストラクタが働くの? そういやここ初心者スレだったか
>>548みたいなのも居るか また元の質問者蚊帳の外に置いて盛り上がっている
オレオレ仕様で議論されても誰の役にも立たないんだよ >>563
グローバルガーって知ったかして恥ずかしいからって粘着するなよ w 初心者スレでマウントするイキリオタクにはなりたくないね グローバルガーでマウント取ろうとして失敗したID:Ol/c1EKtをそこまでバカにしてやるなよ w インスタンス生成と生成されたインスタンスをコレクションに追加するのは別のクラスの役割
>>521はコレクションの要素を型でフィルタリングできたらいいわけだから素直に実装したほうがいい よう分かりませんけど、このスレをプリントアウトして明日朝一番で精神科にかかることをお勧めします
このIDが僕です!って正直に言うんだよ >>569
わざわざクラスを増やす必然性はないだろ >>569
クラス単体で閉じてる機構をわざわざ外部に別けて何がしたいんだよ
メンテナンス性が下がるだけじゃん >>572
いや、この仕組みが入っているがために使えない状況が出てきちゃうんじゃね? 本来クラスAがクラスA足る為に必要な処理じゃないんだよ
リストに追加なんてのは >>571
>>572
きみたちマジか!!
オブジェクト指向設計原則の基礎だぞ
それを破るだけのメリットがあるユースケースなのかな? >>573-575
そこまで言うなら実際に書いて見せてみろ? >>577
へっ?
外出ししてグローバルにしろとでも言うのか? w >>575
型として絶対使わない機能を分離してどうするの?
オブジェクト指向の目的もしかして理解してない? >>579
誰もグローバルなんて言ってないけど
どっから出てきたん? >>581
どこの誰がどんなスコープでList持つ想定でいるの? >>583
A.ForEachでアクセスする変数をA以外に持たせたら漏れなくグローバルになるけど、何を思ってAの外に出せと言ったの? >>581
なら
> 普通にlist外に出せよ
のlistをどこに置くのか言ってみろよ >>586
使うやつが勝手に作ればいいじゃん
クラスAにはなんの関係もないことだ >>587
自身の生成したインスタンス一覧を保持するのはclass Aの基本要件だが、
何でお前はそれを無視してclass Aの仕様そのものを変えたがるんだよ >>590
え?要件定義でそんなの出てくるの?
頭おかしいからだろ? 初心者がマウントのために吠えあうスレになってんなw
>>521は作成したインスタンスをコレクションで持っていれば終わる話なのに たった数行のコードなりUMLなり書けば伝わる話なのに、
何十行も日本語書き連ねて言い訳してる時点で初心者以下だと思うのね
俺の考えた設計が最高と思うならC#で書けよ
書けないなら黙れ、素人 >>596
でもお前単発じゃん
ご自慢の主張したいコードが付いてないけど? しょうもな
一般論を言えば>>587が正しいが、これでは質問者の要件は満たせない。
>587は必要があってシングルトンにしてるクラスについて、
そんなことしなくても使う側が一つのインスタンスだ作ればいいじゃないか、って言ってるのと同じ >しょうもな
>一般論を言えば>>587が正しい
ここで止めろよ
初心者の質問なんだからよ
正しいこと覆して話進める価値あるの? >>592
> >>521は作成したインスタンスをコレクションで持っていれば終わる話なのに
いや、そんなことはみんなわかっててそのコレクションをどこに置くんだって話
老害レベルの知ったかがグローバルとか口走ってごまかすのに必死になってるだけ w グローバル変数を使うど素人はさっさと転職したほうがいいぞ え?まさかプロがこんな所覗いて浅い知識ひけらかしてる訳じゃないよな? Nugetでdll等をインストールする時にApp.configも一緒に差し替える事って可能なのでしょうか?
無理ならApp.configを書き換える手段を知りたいです
EntityFrameworkをインストールするとプロジェクトのApp.configも一緒に書き換えられてると思います
これと同じことがやりたいです >>520
しらなんだー
使ってみます!
仕事でプログラム組んでた時にはいろいろと新技術を追いかけて勉強してたんだけど、
仕事じゃなくなるととりあえず、やりたい事を達成する為に
必要な機能をおいかける様になりますな。 引数ありで起動した場合はフォームを表示させずに処理させたいんだけど……?(°_ 。)?(。_ °)? >>576
>>580
あおりじゃなく君たちがマジだったってのはわかったよ
質問者が明示的に指定した要望を満たす事だけを考えてるから話が噛み合わなかったのね
指定されたwhatが正しい前提でhowを考えるか
正しくない可能性も考慮してwhyを含めて考えるか
視点の違い 「○○なことがしたいんだけど…」
「その要望は正しくないから考えを改めるべきだ!」
正しくないからやらない
プログラマとは思えない凄い斬新な発想だな 素直に「ぼくにはできましぇん(泣)」って言えばいいのにね 質問でも回答でもないレスは他でやれ
>>607
わかりやすい方法の一つ
Visual StudioでWindowsFormで作るとProgram.csが作られるから書き換える
static class Program
{
[STAThread]
static void Main(string[] args)
{
if (0 == args.Length)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
return;
}
//ここから下に引数があった時の処理
}
} とりあえず初心者用スレで語るの辞めてもらえませんか >>610
設計しない下請けプログラマー的発想だな 元請けだと実際>>610は普通にあるね
ほとんど全ての案件において、客の妄想のとおりに作るなんて不可能だし、できたとしても結果的に客の利益にならない >>615-616
よく知恵袋にいる質問者にSEKKYOしてる奴みたいなことしてんのか
お前らさては無職だな? またボケ老人同士のの繰り言合戦が始まった
繰り返すが、論点は>>521,>>529的な仕組みが必要になるケースがあるかどうか。
恐らくないことはない。
一般論としては要件の合理性に疑問を持つことは悪くないが、
上記の通りこの件に関してはただの言い掛かり より素晴らしい設計が本当に頭に浮かんでるならそれを見せればいいのにね
何も開示しない、ただ頭ごなしに否定するだけなら、言っちゃなんだけど何も作れない素人の戯言だよね こういうコントロールの構造なんですが、Buttonがクリックされた時にTextBoxの文字を変更したいんですが、どうするのがベストでしょうか?
今は、Buttonから、ParentでFormまで辿って、そこからTextBoxまで辿り着いてるんですが、凄い非効率な気がします・・・
これと同じ構造のインスタンスが最大70個くらい出来ます。
↓
Form - Panel1 - Panel2 - TextBox
- Panel3 - Panel4 - TabControl - TabPage - Panel - Button 直接インスタンスを指定できないの?
private void Button_Click ( ... )
{
this.HogeTextBox.Text = "hoge";
} イベントメソッドの共通化や、自作のボタンクラスの話だったりといった特殊なことをしたいのかな?
普通は上にある通りクリックイベントでテキストボックスの値を変えるだけ70個ボタンがあるなら70個書けばいいだけなんだけど スタートボタンを押すとbackgroundworkerのwhileループを実行し、キャンセルボタンを押すと停止するプログラムを作りました
これを9時になると自動でスタートし、17時になると停止するプログラムにしたいのですがどうすればいいでしょうか?
自動停止時にはキャンセルボタンを押した時と違いそれ専用の処理を行いたいです。 コントロールの種類・処理が異なるなら、
各コントロール毎に、イベントハンドラーを付ける
逆に、コントロールの種類・処理が同じなら、
各コントロールの親に、イベントハンドラーを付けて、親で処理する
同じような関数を、たくさん作るのは良くないから >>623
「windows タスクスケジューラ」で検索! どういった方法を使えばいいかすらわかりません
タスクスケジューラーはなしでやりたいです。 >>626
なんで?
それだともうサービスアプリみたいな方法しかないけど
苦労の割にタスクスケジューラと変わんないよ >>623
タスクスケジューラなんて関係ないから騙されちゃダメwww
要は今はUIのボタンを押して人が手動で開始/停止してるのを
開始時刻/停止時刻で自動でやりたいってだけでしょ?
そんなのタイマでも使って時計をポーリングするだけ。
何が難しいのよ逆に アプリは起動してる前提でいいの?
終了してると動かないけど 何が難しいかと言えば、ボタンが有るだけに「閉じるボタン」押されてアプリが落ちる件 また常駐アプリの概念すら知らない初心者が知ったかでアドバイスしてる これ前も書いたけど、常駐なんて概念は20年以上前のシングルタスクのDOSの概念
今時何の意味ももたない
何が知ったかだよアホかほんと マルチタスクで常駐が意味無いなんて初めて聞いたがどこ情報だよ
ソース出してみ? windowsで○○時にアプリを起動したいという目的に一番かなっているのはタスクスケジューラー
linuxでもcron使う局面
ずっと起動しっぱなしのアプリやサービスでポーリングやタイマー使うこともできるけど無駄 >>635
『アプリを起動』なんて言葉は>>623のどこにも書いてないけどな 単に起動するだけならタスクスケジューラーでよいと思うのですが
時間が過ぎたら、それ専用の動きをして停止したいのです
なのでタスクスケジューラーでは難しいかなと
timerで検索したり、同じような悩みの質問を探してみると必ず「タスクスケジューラー!」という回答者がいるのですが、求めているのはそれではないんです! 時間が過ぎたらってただ単にDatetime.Nowが指定した時間を経過したかどうか調べるだけだけど >>629
タイマーを使って時計をポーリング?
という方法で調べてみます
ありがとうございます backgroundworkerのwhileループで指定された時間を超えてるか調べる
もし超えてたら何かをして終了 >>632
ボタンが有るGUIのあるソフトなんだから、普通にユーザーがウインドウを閉じることを想定すべきだよ
対策は閉じるを無効にするとか、GUIと本体を分離するとか、ユーザー教育でなんとかするとか、パソコン自体をソレ専用にするとか
何処らへんで妥協するか考えないとな 「大変!右上の×押したらプログラムが終了しちゃう!」
だから常駐化しろよって話だろ? それでいつ開始すんだ?
朝7:00に起動するとして
前日18:00に閉じて
朝8:00に開いたので起動
でおk? 聞かれとこと答えずに必要のないこと聞き返したり聞かれていないこと回答する人たち
oo+qoL1t
b4TsAUH3 >>645
いいじゃん
後は質問者が抜けを塞げばいいよ 職業柄すべてのケースをマトリックスで表現しないと組ませてもらえないから気になるんだよ ポーリングは、やったらダメなのが常識だろw
素人が助言してる
CPU が動き続ける。
CPU使用率が100% になって、フリーズするだけw >>648
1秒タイマーでもCPU負荷なんてゼロも同然だよ
まさかノーウェイト全力ループさせることしか思いつかないとか? デスクトップアプリでAzureのデータベースと接続したいのですが、一般的に接続文字列等はどうやって隠蔽するんでしょうか
ハードコーディングしてもリバースエンジニアリングされたらモロバレになるので気になります 現在の日付時刻が設定した日付時刻より後か前か判断するにはどうしたらいいでしょうか?
datetime同士で引き算とかは可能なのですか? >>653
キーワードわかっているものはさすがにググれ
https://msdn.microsoft.com/ja-jp/library/system.datetime(v=vs.110).aspx
減算・後の数値かどうか。メソッドも演算子も全部書いてある ありがとう御座います
datetime同士の計算結果であるtimespanはtimespan>=0やtimespan<0で場合分けしても差し支えないのでしょうか >>655
いや普通にDateTime同士で大小比較できるぞ なるほど、datetimeで大小比較すればいいのですね
ありがとう御座います
msdn分かりにくくありませんか?
難しい(*_*) >>658
分かりにくいよね
俺も前からそー思ってけど言い出しにくかった unixtimeを4.0でDateTime型に変換するにはどうすればよかたい backgroundworker開始時に次の17時になるdatetimeを取得してループ開始、ループ毎に現在のdatetimeと設定のdatetimeを比較して過ぎていたら停止させようと思うのですが
次の17時のdatetimeを取得する方法はありますか? >>662
datetimeそのものじゃなくても時間だけならHourを比較したらいいよ
var h=Datetime.Now.Hour;
if( h>=9 ){ ... } //9時以降なら >>664
それがすごい気になるんですが
9時以降っていうのは何時までを指すのでしょうか?
極端な話次の日の8時とかになっても条件を満たしますか? >>665
.NET Framework4.0のこと?もうとっくにサポート切れてるけど合ってる? どこ基準のUNIXTIMEか知らないけど1970年1月1日からの経過秒数だから
var origin =new DateTime(1970,1,1);
var unixtime=DateTime.Now-origin;
タイムゾーンは自分で好きなようにしてください
>>666
Hourはあくまでも時間の部分だけだから0時になったら満たさなくなる
条件はよく考えて自分で設定すること ああ抜けてる
var origin =new DateTime(1970,1,1);
var unixtime=( DateTime.Now-origin ).TotalSeconds; なるほど、ではループが30分の場合
終了を23時50分に設定してしまうと止まらず動いたままになる可能性もあるということですね >>662
var n = DateTime.Now; // 今
var s = n.Date.AddHours(17); // 今日の17時
var x = n < s ? s : s.AddDays(1); // 次の17時
while (DateTime.Now < x) {
// 次の17時まで何かする
} Datetimeのコンストラクタはいろいろなパターンがあるからどうとでも作れる
DatetimeはTimespanを足して新しいDatetimeもつくれるので
まあじっくり見て勉強することだな
終了条件をどのように設計してるのか知らないけど特定の日付の特定の時刻を設定してたら
途中で休止などして時刻を過ぎた後、再度復帰した場合すぐ終了してしまう
そして、指定時間以降だったらまたすぐ動くことになる
などどういうことを想定するよって何を選ぶかは変わる >>671
これいいですね!
解決しそうです。ありがとうございます。
xの?や:の意味がわかりませんがとりあえずコピペします
ラムダ式みたいなものかな? >>675
>>676
勘違いしてた
9時スタートで5時終わりの話を引きずってるのかと思ってた よかったです
?はifで:はelseみたいなものですかね?
便利ですね 16時59分スタートなら1分でストップ
17時00分ジャストなら次の日の17時まで24時間でストップ >>671は17時直前に呼び出すと何もしないで終わる可能性があるな
do whileのほうがいいかもしれん 終了を17時30分にしたい場合は以下のようなコードで大丈夫でしょうか?
var n = DateTime.Now; // 今
var s = n.Date.AddHours(17).AddMinutes(30); // 今日の17時30分
var x = n < s ? s : s.AddDays(1); // 次の17時30分
while (DateTime.Now < x) {
// 次の17時30分まで何かする
} >>680
こんな感じでも特に問題はありません。
むしろわかりやすくて希望通りです。 DateTimeなんてめったに使わんけど、使ってみたら値型のくせにイミュータブルで
なんだか使いづらいね
// 時分秒が指定した値となる現在より後の直近の日時を返す
public static DateTime GetNextDateTimeFromNow(int hour, int min, int sec)
{
var now = DateTime.Now;
var next = new DateTime(now.Year, now.Month, now.Day, hour, min, sec);
return next > now ? next : next.AddHours(24);
} >>682
試せばいい
DateTime.Nowじゃなくて自分てnew Datetime()して
自由にnを作って試せばいい >>684
AddHours(24)なのはなぜ?
うるう秒があったらずれる(そんな仕組みは多分ないけど) とりあえずその時間帯ですが21時から5時までとかにも対応するようにしたいです。
とりあえず出来そうです助かりました。 >>669
.NET4.6以降ならBCLに専用のAPIが用意されてるからこんなことしなくていいんだけどね >>694
4.0はもうサポート対象外だし、Windows Server 2012も非対応なのに使わざるを得ないとか同情するわ >>692
最大実行時間は何時間なん?
21時〜3日後の21時までなんて可能性は排除できるん?
平日と休日とで違いはないん?
とかね
なんか仕様がモヤっとしてんじゃん >>696
だいたい8から13時間程度の稼動になります! 4.X系ならアップグレードのコストはそんなにかからないだろうに
お前が変えさせるか、辞めちまえ >>697
最大よ最大
返答に範囲が返って来ると気が狂うん
イレギュラーケースの最大を聞いてん 同期プリミティブ
http://www.tokumaru.org/techterm/primitive.html
ポーリングは、ダメの見本。常識
ランデブーとか、待ち合わせしたいだけだろ。
それか、非同期で、callback してもらえば良いだけw task.delay(100)とTheading.sleep(100)ってどう違うの? CPU100%とか言ってるし無限ループと勘違いしてるんだろ >>702
Thread.Sleepは指定した時間自分のスレッドを停止する
Task.Delayは「指定した時間停止するスレッド」を生成する
Task.Delayは単独では意味がないのでawaitなりContinueWithなりする async/awaitの勉強しているんだが、async voidやasync Taskのメソッドをawait無しで呼び出したらそのメソッドの処理は投げっぱなしになるの? そもそも、MS が、50ms 以上掛かる処理は、同期処理するなって言ってるだろ。
非同期処理にして、callback してもらうようにって
「ポーリング」で検索して、色々な記事を読め 何がそもそもなんだw
>>709の世界ではDateTimeの比較演算に50msもかかるのかw
30年前のPC-98だってそんなにかからないと思うけどww
ネタなのかマジなのか知らんけど、そもそもHW資源を直接触れないOS上で動くコードは
一件コールバックのように見える処理も実態はポーリング
単にそれがシステム側のコードに隠蔽されてるだけ spin lock なんてものは無かったんや
いやぁ勉強になるなぁ 元々タスクスケジューラで十分な話をよくもここまで長々と続けられるな 質問にとは関係ない部分で知識をひけらかしたい奴がいるから 仮にオレがこのソフトを作るとしたら、NotifyIconのデザインで小一時間悩むところから始まるだろうね 何時間も待つ処理だろ。
50ms を超えてるから、非同期処理を使えって、MS が言ってる
自分でプログラミングで、ポーリングしたらダメ
OS の内部処理とは関係ない 指定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?
c:\test
aaa.txt
bbb.txt
ccc.txt
...etc
指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。
アンパンマン → バイキンマン
といった具合です。 1秒タイマーでタイムアウトするたびに目的の時刻を越えたか
調べるだけでいいじゃないの
違ったら即抜けるだけなのに、50msも掛かる処理じゃねーよ
なんでわざわざタスクスケジューラー使わにゃならんのだ コミュ障は病気だからやむを得ないが
読解力は人並みに身につけてから書き込んで欲しいよなw タイマーのインターバルは10秒とか100秒だけじゃなくて、10年でも100年でも設定できるんだから
起動時に開始と停止までの時間を計算してタイマー設定すれば
ポーリングしなくても良いんじゃね? >>723
時刻合わせせずPCの時計を常に基準にするのか
というか仕様や設計の話は他でやってくれないかな >>723
Timerのインターバルはint型でmsec指定
1年の秒数は31536000秒
あれぇ? >>724
PCの時刻を基準にしないでどうすんの?
純粋に興味あるから教えてくれ >>725
wpfばかり使ってたんで、DisptcherTimer基準にしていたわ
悪いな 初心者の陥りがちなミス
Timeの精度を信用してしまう
途中で時刻修正の入る場合などを考慮しない >>724
今のPCはネットに繋がっていれば時間は自動で合わせてくれる
インターネットに繋がっていない前提ですか? こういうインフラの煩わしい制約からコアになる処理を分離したい
ワーカー側は終了再開するためのapiを用意して時間や終了再開するタイミングの事は一切考えない
時間を管理するクラスが適切なタイミングでそれらのapiを実行する
というのが正解な
時間管理クラスが内部でループぶん回そうがシステムコール使おうがそれはどうでもいい c#環境では指定時刻にイベントを起こすAPIは用意されてない 指定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?
c:\test
aaa.txt
bbb.txt
ccc.txt
...etc
指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。
アンパンマン → バイキンマン
といった具合です。 >>701
callbackはどんな条件のものをどうやって作るんだ
>>729
時刻合わせのタイミングでインターバル補正するコードは思いつかないな
時間定期的にcheckするだけのものをどこまで難しくする気だコイツら >>737
お仕事でなんでこの仕様からこんな糞コードが生まれるんだろと不思議に思うことあるけど、このスレの流れ見たらある意味納得だわ >>737
1秒ポーリングでも最大1秒弱の誤差が出るわけだが、内蔵時計ってそこまで精度悪いの?
実用上問題ない誤差に見えるがちょっと気にしすぎじゃね? どうでもいい
そんな盛り上がるネタじゃないだろうw
いい加減止めたら? 1秒ポーリングでやろうぜ
現在時刻が開始〜終了時刻の範囲
起動Flagなし
起動処理
起動Flag立てる
現在時刻が開始〜終了時刻の範囲外
起動Flagあり
終了処理
起動Flag下ろす
(*゚∀゚)bできた! 持ってるけど少し勉強すれば誰でも取れる資格に意味なんてあるの?
精々資格手当で給料が5000円プラスされる程度の価値しかないぞ 5000円の価値も分からないとか働いたことないのかな? 5,000円も上乗せとかウラヤマ過ぎだろ
うちなんて高度取っても報償金30,000円だけ
基本や応用ではなにもでない 10年以上やってる奴でも、基本情報技術者は取れない
大卒の新米が、こんなの簡単に取れますよねって言ったら、
中堅社員は皆、新米をにらみつけていたw
企業の資格取得率は、年1%(100人中1人)ぐらいだろ。
10年いても、9割の社員は、資格を取れない 申し込みしたけど忙しくて受験できない人は沢山居るけど受験して落ちる人はいない 俺は応用情報まで持ってて+1万だなー
>10年以上やってる奴でも、基本情報技術者は取れない
……冗談だろ? さておき、建築士だの医師だの弁護士だのみたいに
「この職務に就くには、○○の資格が必要」とかいう業界じゃないんで
本当に、ただ給料が増えるだけではあるな (採用試験でもまあ有利にはなるかもしれん)
増えたら増えただけ嬉しいもんではあるが
年間で+12万なら、家電の買い替え費用くらい楽に捻出出来るし 定したディレクトリの中を一発で全て置換する何か便利なソフトはありますか?
c:\test
aaa.txt
bbb.txt
ccc.txt
...etc
指定したディレクトリの中に複数のファイルがあります。
その中にある特定の文字列を全て一括で置換したいです。
アンパンマン → バイキンマン
といった具合です。 >>752
普通は資格手当ては基礎賃金扱いだからボーナスや残業計算対象でもっと貰えるよ
基本情報で5000は羨ましいけど資格手当て込みのベースにしてるパターンもあるから一概にいいとはいえないかもね Ruby の、Dir.glob で書ける
Dir.glob('C:/test/*.txt') do |file|
# gsub(/アンパンマン/, 'バイキンマン')で全部を置換する
end C# もしくは 既に要件を満たすツールがあれば教えてください。 >>753
マジレスするとVisualStudioで可能 >>757
WindowsでC#使ってるならVisual Studio使ってるんだろ?
フォルダーを指定して置換でいいと思うが
https://msdn.microsoft.com/ja-jp/library/a40ywt0a.aspx >>753
awkやろ
百歩譲ってRubyとかのP系言語
C#は向いてない public Pixel(IList<byte> data, int index)
{
B = data[0];
G = data[1];
R = data[2];
Index = index;
}
var list = new List<(int x, int y)>();
// 何故か背景色がFFA07A固定なのでそれ使って適当に
list.AddRange(pixels.Where(x =>
Math.Abs(x.R - 0xFF) < 5 &&
Math.Abs(x.G - 0xA0) < 5 &&
Math.Abs(x.B - 0x7A) < 5
).Select(x => (x.Index % width, x.Index / width)));
ビットマップをPixelクラスに読み込んで特定の色(FFA07A)のピクセルを検出しているのですが
(x.R - 0xFF) < 5
ここのRGBから16進数をマイナスして5未満の意味がわからないのですが
なぜこんな計算をしているのでしょうか? >>759
VS2017にそんな機能があったんですね。便利!
VS2010じゃその機能はないよね? >>762
その前にMath.Absが付いとるじゃろ
目的の値との差をとって、その絶対値が5未満
つまり、ぴったり一致しなくても±4までの誤差ならOKとしている >>768
なるほど!誤差の為ですか
ちょっとした技を使ってたんですね
ありがとうございました。 質問です。よろしくお願いします。
ttps://tb.click-sec.com/fx/historical/historicalDataDownload.do?y=2018&m=01&c=21&n=USDJPY
をブラウザで開くとzipファイルのDLが始まるので、これをC#でDLしようと思ったのですが、
このURLのままだとSystem.Net.WebClient.FileDownloadでもWebBrowserコントロールで開いてもzipファイルのDLができません。
どうすればいいのでしょうか。 👀
Rock54: Caution(BBR-MD5:8e40a50a3146c71e5aa506574dbd07bd) IEに開かせればできるかもと思ったのでやってみます。 すまんが、イベントハンドラーを空っぽにするのってどうやんの? nullから空っぽのラムダ式を入れる
もしそのイベントを持つクラスの外からやりたいと言ってるならそれは無理
無理と言うより、そんなことをしたいと思うこと自体が間違ってる ユニットテストについて質問
例えば計算クラスのテストをするときは
[TestCase(-2, 2)]
public void AbsTest(int a, b){
int n = Math.Abs(a);
Assert.AreEqual(n, b);
こういう風に正しい値を予め手計算で用意しておくものなの? >>776
一般的にはその通り
間違っても n = a < 0 ? -a : a とかやってはいけない
ちょっと考えたら分かると思うけど、そういうのは全く意味のないオレオレテスト
手計算がどうしても困難なら、デバッガで動かしてその結果が合ってるかを検証してその値をコピペしとけ
少なくとも意図しないデグレの検出には役立つ >>777
ありがとう!
チェック項目が増えると引数が酷いことになるから何か間違えてるのかと思ってた >>778
それはテストの観点を適切に直行化できてないんじゃないか?
引数xが3以上のとき結果は必ず負になることが期待されるとしたら、
テストは3と3を超える値を引数に入れて、それぞれの結果yについて y < 0 が真となることを確認すればいいんだぞ
何を確かめたいのかを明確にしてそれをそのままコードで書くんだよ LinqのJoinメソッドに渡すメソッドなんだけど、ラムダ式で書く方法が全然理解できないぜ・・・・
多分、掲示板で解説するのも難しいと思うので、やさしく解説してるページやら本やらがあったら教えて!!! >>780
どれがわかりやすいかなんて人それぞれだから宛にならないよ
ラムダ式でぐぐって良さそうなら熟読してわからない所を質問するといい ラムダ式とか正規表現とか、記憶してるやついないから大丈夫
毎回ググればいい ラムダ式って、無名関数の構文糖だろ
func (引数1, 引数2) => 戻り値
(a, b) => result λを採用した祖の言語LISPなんてわざわざ(lambda〜)と毎回書いてるのに変な略称=>なんて許されんばい
λと書きんしゃい >>780
この本よかったぞ
基本的な知識はあるがLINQ、ラムダ、推論型の知識があやふやならおススメ
「C#プログラマーのための 基礎からわかるLINQマジック! 」
https://www.amazon.co.jp/dp/product/B01FEZ7QNY/ref=as_li_tf_tl?camp=247&creative=1211&creativeASIN=B01FEZ7QNY&ie=UTF8&linkCode=as2&tag=bookmeter_book_image_image_pc_logoff-22 質問失礼します。
以下のようなプログラムを書いたところコメントに書いたようなメッセージが表示されますが、
このメッセージに従ってインライン化しようにも、どのように修正すれば良いか分かりません。
これはIDEのバグだと思って無視しても良いものなのでしょうか。
インライン化の有無は可読性だけの問題でパフォーマンスなどに影響はないのだと思いますが、
このようなメッセージが表示されたままプログラムを完成とするのはあまり気分がよくありません。
プログラムの修正方法や、このようなメッセージに対する考え方など、
分かることがあれば教えていただけないでしょうか。よろしくお願いします。
static void Main(string[] args)
{
void getMessage1(out string _message) => _message = "x is 1.";
void getMessage2(out string _message) => _message = "x is not 1.";
int x = 1;
string message; // IDE0018 変数の宣言をインライン化できます
if (x == 1)
{
getMessage1(out message);
}
else
{
getMessage2(out message);
}
Console.WriteLine(message);
} そんなもん買っても十中八九忘れる
基本ネットに転がってるコピペで食いつなぐのが一流 >>789
なんでoutを使うのかが分からないんだけど >>789
"IDE0018"でググったら一発で解説が見つかるんだけどw
何でその長文タイプうする前に検索しないのよw
そこが分からん >>792
そういうことを言ってるんじゃないと思うけど…
手元にあるc#7.1じゃ再現しないんだけど 普通に考えるとスコープから外れるからインライン化できないはずなのにインライン化を進めてくるってことでそ 早速たくさんのレスありがとうございます。
お返事に少し時間がかかってしまいそうなので、上から順に書き込みたいと思います。
お待たせしてしまって申し訳ありません。
>>791
レスどうもありがとうございます。
色々なクラスで定義されているTryParseやIDictionaryのTryGetValueは
使いやすいと感じていて、それを参考に定義したメソッドをifの内側で使おうとしたのが
>789のようなプログラムを書いた経緯です。
しかし確かに複数の情報を返却したければそれ用のクラスを定義すれば良いことですし、
C#7ではタプルも構文化されているので、もはやoutは時代遅れということでしょうか。
C#にはいくつか負の遺産もあるということなので、その辺りについても勉強したいと思います。 >>792
説明が不十分で申し訳ありません。
>>795の方が分かりやすく説明してくださっているので蛇足になってしまうかも知れませんが、
私が検索した範囲では、
string message;
getMessage1(out message);
は
getMessage1(out string message);
に直せば良いということは分かったものの、変数の定義と関数の呼び出しとの間に
(今回の例のifのような)別のコードがあって、それが移動できないように見えても
メッセージが表示されてしまう場合があるということです。
ただ、「移動できないように見える」という部分に自信がなかったのと、
仮にそれが正しかったとしてもこのようなメッセージをどの様に受け止めれば良いのかが
よく分からなかったので質問させていただきました。 >>793
IDEがなんと言ってきているのか、とういことでしょうか。
サンプルコードを空行も含めて上から数えて7行目のコメント文なのですが、
「IDE0018 変数の宣言をインライン化できます」というメッセージが表示されます。
それとも、私がどのようなお返事を期待しているかとういことであれば、
このメッセージに対処するためのプログラムの修正方法や、
このようなメッセージに対する考え方などを教えていただけないかと考えています。
しかし、私の期待していること自体が見当はずれということもあると思うので、
それ以外でも何か気がつくことがあれば教えていただけると嬉しいです。 VSとターゲットのフレームワークのバージョンを書いてないのがいまいち >>794
早速検証までしていただいてどうもありがとうございます。
また、本来書くべきC#のバージョンが抜けてしまっていて申し訳ありません。
>>789
を始めに確認したときのターゲットフレームワークは4.6.2だったので、
以下の対応表によればC#のバージョンは6.0ということになるのでしょうか。
https://qiita.com/nskydiving/items/3af8bab5a0a63ccb9893
しかし、その後ターゲットフレームワークを4.7.1や3.5に変更して試してみても
やはり同じメッセージが表示されました。
あと、これも後出しになってしまって申し訳ないのですが、
あからさまな構文エラーと違ってこのメッセージはコンパイルするまで表示されないようです。
IDEはVisual Studio 2017を使用していて、OSはWindows 10 Pro 64 bitです。
他に何かお伝えすべきことがあれば教えていただけると嬉しく思います。
よろしくおねがいします。 >>795
分かりやすく補足していただいてどうもありがとうございます。
C#のバージョンについてもそうですが、正確にお伝えするための情報の確認が不十分でした。
これはプログラミング以前の問題だと思うので気をつけていきたいと思います。申し訳ありません。 >>799
アドバイスどうもありがとうございます。一日程度このスレッドを拝見してみて、
私の勘違いという証拠が見つからなければマイクロソフトに報告してみようと思います。
報告する場合、Visual Studio の
「ヘルプ(H)>フィードバックの送信(F)>問題点の報告(P)」を利用しようと考えていますが、
もし他におすすめの連絡先などがあれば教えていただけると嬉しく思います。 つまりこう書けるよってことじゃないの?
if(x == 1) getMessage1(out string message);
else getMessage2(out string message); >>800
おっしゃる通りで、大変失礼いたしました。申し訳ありません。
>>801と内容が一部重複してしまいますが、これまでの内容を改めて整理したいと思います。
(これまでいただいたレスの表現を一部お借りしています)
問題の概要:
関数のout引数に関して、スコープから外れるためインライン化できないと思われる場面で
インライン化を推奨するメッセージが表示されることがある
問題を再現するコード及びメッセージの内容:
>>789
問題が再現する環境:
Windows 10 Pro 64bit
Visual Studio 2017
ターゲットフレームワーク:3.5/4.6.2/4.7.1 で確認
備考:
コードのコンパイル後にメッセージを確認
以上です。他に何か書くべきことがあれば教えていただけると嬉しいです。
どうぞよろしくお願いいたします。 >>803
何でそうなるw
だから、まずググろうよ"IDE0018"で
そうすればこれはC#7の追加機能に起因する警告であり、不具合ではないとすぐに分かる。
何でそんな長文タイプする手間は惜しまないのにちょっと検索する手間は惜しむのよw
意味が分からん
ちなみに、この警告を無視するにはこうするんだってさ
https://developercommunity.visualstudio.com/content/problem/159716/is-there-a-way-to-disable-ide0018-globally.html
これもググってれあばすぐに自分で見つけられてるはず 一行ならブロックスコープ外せるから>>804だと思うんだけど自分の6.0環境では試せなくて悲しい ごめん、無理だね
ブロック外してもスコープはローカルになっちゃうみたい >>804>>808>>809
修正方法のご提示とご検証どうもありがとうございます。問題は>>809にお書きいただいたとおりです。
ただ、お書きいただいた通り問題はスコープにありますので、
Console.WriteLine(message);をifとelseの両方の中に書けばこの問題は起こりません。
この程度の内容を2回書くことは大した問題になりませんし、
この部分に対応するコードが長くなってしまった場合もメソッドとして切り出せば同じことですので、
いただいたレスを読みながら、>>789のようなプログラムを書くこと自体が筋が悪くて、
やはり>>804に適合するプログラムになるよう全体を修正するべきなのかなとも考えました。
ただ、メソッドとして切り出す方法であらゆる状況に対応できるかどうか自信がないので、
いずれにしても確信は持てていない状況です。 >>807
いつまでトンチンカンなこと言ってんの? >>811
トンチンカンでもおじいちゃんでもないからw
こんなググればすぐに理由も対処法もわかる話でMSにクレーム付けたら
質問者が恥をかくだけ >>813
じゃ、どうしろって書いてあんの?
リンクのどこ見ればいいかわかんないよ
対象のコード貼ってくれ おじいちゃんに触れても無駄だよ
いつまでも間違いに気づいてないしレスも読んでないから >>815
無視するか気になるなら>>867で対処する
当たり前でしょう >>819
だから何でそうなるw
意味が分からない >>819
おじいちゃんはまだ何が起こってると言う話なのか判ってないからレスしても無駄
スコープもわからないから >>821
トンチンカンなことを言ってるのは君の方なんだけど、自覚がないってのは幸福でいいねw >>820
いや、バグでしょコレ
だってこんなん指摘してきた同僚がいたらキチガイじゃん >>810
Visual Studio のバグでしょ
とりあえず頓珍漢野郎の>>807のリンク先に抑止方法書いてあるからそれでしのげばいいかと っていうか、>>789みたいなコードが警告されるのはむしろ当たり前。
outの変数を使いまわしするなんてよい作法とは言えないからだ ジジイはトンチンカンすぎてダメだな
いつまでたっても成長しない >>825
使うからoutしてんじゃん
ガイジが過ぎるぞ自重しろ しかし、バグバグいってる連中はちゃんとググって解説記事読んでるのかねw
こんなのが同僚だったら張り倒すよw ジジイは失礼なので取り消しておじいちゃんにまた戻す >>829
ありえねーレベルのアホだなw
outしたの使わないでどーすんだよ >>805
参考ページのご紹介どうもありがとうございます。
このページは拝見したのですが、問題の解決に至る道筋を見つけることができませんでした。
(確認したページのうち主要なものはあらかじめお伝えしておくべきだったかもしれません。
申し訳ありません。)
質問させていただいている身でこのようなことをお願いするのは大変心苦しいのですが、
もしお時間に余裕がありましたら具体的な修正方法のご説明をお願いすることはできませんでしょうか。
ご説明の中で私の疑問を理解していただければ幸いですし、
いただいたご説明で問題が解決できれば願ってもないことです。
煽るような文章で答えを引き出すような形になってしまい大変申し訳ありませんが、
私の説明能力の無さゆえの苦肉の策ということで、どうぞ失礼をお許しください。 >>832
とりあえず別のことに時間使ったほうがいいよ
ひまーな時に思い出して修正されたか確かめるといい
うちじゃ全然再現されないからどうしようもない ID:+cAt7TAV 様
警告の抑制方法についてご案内いただきどうもありがとうございます。
他に解決策が見つからなければマイクロソフトに問題を報告し、
マイクロソフトに修正していただけるまで教えていただいた方法で警告を抑制したいと思います。
ただ、他の方にいただいたレスも拝見し、やはり私としてはこのメッセージが適切であるとは確信できずにいます。
もしお時間に余裕がありましたら、>>832のお願いを ID:+cAt7TAV 様にもさせていただけないでしょうか。
お願いの方法も内容も大変失礼なもので申し訳ないのですが、どうぞお許しください。 まあ質問者がここのお馬鹿さんを代表してMSに質問してみたらいいと思う。
恥をかくのも勉強のうちかも
個人的にはちょっと調べてちょっと自分の頭で考えれば分かるはずのことを理解しようとせず、
「このバグどうなってんだコラー」なんて突撃するのは愚の骨頂にしか思えんけど
つーか、ちょっと考えれば、この警告は余計なお世話のように思えて
一定の合理性があることぐらいすぐ分かると思うんだけど、ガチで分からない奴もいるんだね世の中には >>835
だから、警告の意図はout変数を値を戻す以上の目的で使うのはよい作法じゃないよ、
ってことでしょう。
外側のブロックでも値を使いたいなら別の変数にコピーしてねと たくさんご反応をいただきどうもありがとうございます。
とても勉強させていただいています。
お返事が遅くなってしまい申し訳ありません。
予想以上のレスの多さでこの話題に触れてくださった方すべてにお返事するのが難しくなってきましたので、
大変勝手ながら、これ以降、直接私の書き込みにアンカーを付けてくださった方と
特に教えていただきたいことがある方へのメッセージのみ書き込みたいと思います。どうぞよろしくお願いします。
>>825
皆さんのお話を聞いて、コードの無作法が警告メッセージの直接または間接的な原因なのではということを
かなり感じてきました。ただ、作法に関する私の理解が不十分でどうにも宙に浮いたような感覚なのです。
もしよろしければ、>>810考えについてコメントなどをいただくことはできないでしょうか。よろしくお願いいたします。 >>836
どう書けばいいのかを書いてからほざけば? w >>824
レスどうもありがとうございます。
やはりバグと考えるのが妥当なのかなという気持ちが強くなってきました。
これだけたくさんのレスをいただき、バグであろうというご意見もいただいているので
もうマイクロソフトに報告を出してしまってもいいかなという気もしているのですが、
一応>>803に書いたとおり一日置いてから報告しようかと思います。
ただバクだとしても、このバグが今まで大した問題にならなかったということは
再現するためのコードに多かれ少なかれ作法の問題があるのではという気持ちもあり、
色々と勉強させていただきたいと考えています。 >>842
現象再現するソリューション一式をアップローダにあげたら何か進展あるかもよ >>789
以下の書き方ってビルド通るっけ?
ビルドエラーの時は原因と関係ない警告でたりするからmessage=nullみたいに何かいれれば解決したりしない?
string message;
if (x == 1) getMessage1(out message);
else getMessage2(out message);
Console.WriteLine(message);
後outメソッドではなく、戻り値で文字列を返すのが普通
根本的な解決じゃないけどoutキーワードを使わないgetに直せば警告を消せる >>834
アドバイスとご検証どうもありがとうございます。
再現性の問題については、警告のカスタム規則セットなどは使っていないつもりなのですが、
そのあたりの理解が不十分でお伝えすべきことが不足してしまっているのかも知れません。
念のため、解説ページなどを読むなどしてもう一度確認したいと思います。
また、とりあえず別のことに時間をということについて、お心遣いをとても嬉しく思います。
ただ、せっかくこれだけの反応をいただけたのだからできる限りのことを吸収して…という
殊勝(?)な考え以上に、私が感じた問題に多くの方が興味を持ってくださったことが嬉しく、
娯楽という意味でもう少しこの場にお邪魔させていただきたいと思っています。 >>837
大変勉強になるコメントどうもありがとうございます。この観点はまったく気づいていませんでした。
確かにout変数の使い道をそこまで限定することで警告は表示されなくなりますし、
この制限はプログラムの保守性を高める効果もありそうです。
これで私個人の、警告が表示されて気持ちが悪いという問題は解決したように思います。
どうもありがとうございます。
ただそれはそれとして、今回の警告はやはり意図されたものではないと思うのですが、
もしよければこの点についてもご意見をお聞かせいただけないでしょうか。
私がこのように思うのは、以下のコードで警告が表示されないというところにあります。 bool tryGetMessage1(int _x, out string _message)
{
if (_x == 1)
{
_message = "x is 1.";
return true;
}
else
{
_message = default(string);
return false;
}
}
void getMessage2(out string _message) => _message = "x is not 1.";
int x = 1;
if (!tryGetMessage1(x, out string message))
{
getMessage2(out message);
}
Console.WriteLine(message); >>837の制限に従えば上のプログラムのifの部分は次のように修正されるべきです。
しかしこの例では警告文表示されず、従って警告文は>>837の制限を課すためのものではないと思われるので、
「今回の警告は意図されたものではない」という結論に至りました。
int x = 1;
string message;
if (tryGetMessage1(x, out string message1))
{
message = message1;
}
else
{
getMessage2(out string message2);
message = message2;
} >>843
アドバイスどうもありがとうございます。
今更ですが、警告が表示されるコードを含むソリューションをアップロードしてみました。
https://dotup.org/uploda/dotup.org1498398.7z.html >>844
レスどうもありがとうございます。
お書きいただいたコードでは、ビルドは通りますが>>789と同じ警告文が表示されました。
これは message = null と書き換えても同じようです。
戻り値で文字を返すべきだというのはおっしゃるとおりだと思います。
ただ>>796のような理由もあり、out変数でも警告が表示されずにすまないか思って質問させていただきました。 >>849
えー、このスレで解決しないといけないの?
初心者スレの領域越えてない? >>851 >>852
申し訳ありません。
もともと不具合なのかどうかの判断もできずこのスレで質問させていただきましたが、
IDEの不具合であるとすれば、おっしゃるとおりここで解決を目指すことではないと思います。
ただ、もしこの問題に興味を持ってくださる方がいて、問題が再現されないようであれば、
>>849のソリューションファイルでもお試しいただければ嬉しく思います。
これ以降は、「IDEのバグ修正」という方向の話について私の方から書き込むことは控えたいと思います。
しかし、すでに私が書き込んでしまった内容にお返事をいただいた際のレスについてはお許しください。
以上、長々と失礼いいたしました。 >>806
Visual Studio 2017のバージョンは?
最新版(15.6.4)で>>849のソリューションビルドしたけど、IDE0018は出なかった。
後、ID:+cAt7TAVは頓珍漢な上に指摘を一切聞かない人だから無視した方が良いよ。 >> 853
Visual Studio 15.5.7 だけど IDE0018 は出なかった
リファクタリングしたらどうなるの?
https://codezine.jp/article/detail/9861?p=4 レスどうもありがとうございます。お返事が遅くなってしまい申し訳ありません。
日中はVisual Studioを使えそうになく、申し訳ないのですがきちんとしたお返事は夜になってしまうと思います。
中途半端な内容になってしまいますが、ひとまずいただいたレスにお返事したいと思います。
後ほど改めて書き込みますので、失礼をお許しください。
>>854
Visual Studio 2017のバージョンについてご報告できておらず申し訳ありません。
恥ずかしいことに最新版を使うという意識も持てていなかったので、古いバージョンを使っているかも知れません。
(ただ、古いバージョンで検証して下さった>>855様もIDE0018は出なかったとのことなので、
なにか他のところに問題があるのかなとも思っています。)
>>855
ご検証どうもありがとうございます。
>>854様の結果と合わせて2つのバージョンで再現しなかったとのことなので、
私は何かとても基本的なところで間違いを犯してしまっているのかも知れません。
リファクタリング機能については、ご指摘をいただいた上で試したわけではないので後でまた確認しようと思いますが、
問題の箇所では動作しなかったように記憶しています。 >>855
不具合報告スレでも立ててそっちでやれよ >>789
正解だけ教える
bool TryGetMessage1(out string x) { x = "1"; return true; }
bool TryGetMessage2(out string x) { x = "2"; return true; }
string GetMessage(int x) {
if (x == 1 && TryGetMessage1(out var s)) return s;
if (TryGetMessage2(out var s)) return s;
return null;
}
WriteLine(GetMessage(x)); (結局調べれば分かることで、ググれというレスを罵倒してた奴らは今どんな心境なんだろう) >>863
もともと修正方法教えろって言ってるんだからこれが正解だよ >>862
> (結局調べれば分かることで、ググれというレスを罵倒してた奴らは今どんな心境なんだろう)
罵倒されてもしょうがないよね
って感じですけど?
しかも恥の上塗りしてる奴までいるし w >>865
>>789と出力結果が違うのに正解とか何ほざいてんのw FirstOrDefaultについて教えて下さい。
List<T>をFirstOrDefaultで条件のものを返してきた場合、
それは参照先のアドレスが返ってくるのでしょうか?
それとも写像としてコピーされたものが返ってくるのでしょうか
取り出したものの値を更新したときに、元のListは更新されますか? List<int>とかとList<MyClass>とかで違うよね的な? やってることは同じ(値をコピーしてくる)だけど結果が違ってくると言うこと 教習所の教官「生徒が減ったので褒めちぎったら運転技術は向上!合格率も事故率も改善!俺はなんで今まで怒ってたんやろう?」 [274141358]
https://leia.5ch.net/test/read.cgi/poverty/1522384054/
5 名前:番組の途中ですがアフィサイトへの転載は禁止です (ワッチョイWW d3e8-gBuS)[] 投稿日:2018/03/30(金) 13:30:33.99 ID:F53Z/ySd0
よく考えたら本当にジャップ案件だよな
初心者に対して怒鳴り散らしてどこが悪いかは一切教えない
部活と一緒だわ >>869
List<T>とかHashSet<T>とか初めから使えるやつはTが値型か参照型かだけ考えればいいよ
あと「Listが更新されるか」という言い方はTが参照型だと意味が曖昧になるから改めたほうがいいかと
ふと↓こんなのが頭をよぎったけど意味が分からなければスルーしておくれ
class MyList<T> : IList<T> where T : ICloneable { ... } IListは実装したことないな
実装例は見かけるけどOSSで実装してるのは見かけない >>875
>>874でIEnumerableでもICollectionでもなくIListを選んだのには深い理由があるのよ
文字数という理由がね
まあIsReadOnlyプロパティとかどうかとは思うよ ご指導ありがとうございます
Tが値型か参照型かというところが意識から抜けておりました
適当に組んで試してみて、その違いも確認できました モニタの解像度によらず実寸A4サイズのウィンドウを開いて2pの×を座標ランダムに20表示
それをクリックするというアプリを開発しようと思ってます。
最初モニタの解像度取得してモニタの実寸をユーザーが入力して、
そこからA4サイズは何ドットになるか計算してというのをフォームで作り始めたんだけど、
これだと×や他のボタンも全て計算して調整しなければいけないのかと気づきました。
WPFで開発するとこういうモニタサイズにかかわらず実寸で表示って簡単に処理できるの? 実寸はモニタ変更するたび変えないと駄目じゃん
フルHDのスマホとモニタじゃちげーし ユーザーが勝手にWindowsのDPI設定を変更してない限りはできるけど、
今更オワコンWPFに手を出すくらいならHTMLで作ることを強くお勧めする
CSSならmm単位で実寸指定できるからWPFよりも簡単だよ イベント処理でキー読み込むのと、ただ単にキー読み込むのではどう違うの?
実行すると速度が全然違うんだけど... 例の教育心理系君か
AWS S3にHTML/CSS/JavaScript置いてURL教えるのが一番手っ取り早いだろうな
結果もJavaScriptからS3 APIで保存するようにすれば完全サーバーレスだ
その程度なら料金は月10円もしない ご無沙汰しておりました。
教育心理系のものです。
ようやっとC#の本読み終えて作り始めましたけど、
実世界での用紙とか×とかの大きさを統一しないと実験結果に影響が出るので実o単位で画面表示が必要なことに気づきました。
a. ディスプレイ解像度はC#で取得できたので、後は実モニタサイズをユーザーに入力してもらえば、小学生の算数レベルでA4用紙のウィドウは作れる
でいいかと思ったんだけど、
そうすると×の大きさや当たり判定の範囲まですべて計算しなければいけず、
なんかあほらしいことをやってるのか??
と疑問に思ってきました。
ブラウザ上に表示するとユーザー側でctrl+スクロールで表示の大きさ変えられちゃうんですよね。
実世界でのo単位での大きさを固定したいってあまりなさそうな要求だし、aでやってくしかないのかなぁ。 そこまでやるなら被験者とモニターの距離も計測して一定にしないと… >>885
その通りですね。
同じような実験で被験者の姿勢によりスコアが変わるらしいので。 >>878
WpfにはViewBoxと言う拡大縮小自在なモジュール在るから上手くやりゃなんとかなるよ >>889
ViewBox調べてみます。
少しフォームベースで初めてみたんですけど、
これから勉強するならWpfとフォームどちらで作るのがおすすめですか?
フォームでもゴリゴリやっていけば狙ったものはつくれそうな感じはするんですけど、
wpfのほうがいいというのも聞いたりして悩み中です。 >>890
件の用途だとformsは厳しいと思われるのでwpfを奨めるが、情報少ないから習得は簡単じゃないと思うよ
もし、不特定多数への配布を考えているならwpfの進化形であるUWPを使うのを奨める >>882
ただ単に読み込むのはどのタイミングでどうやってるの? >>891
wpf情報少ないんですか・・・。
UWPも書籍はまだ少ないみたいですね。
ど素人なので学習のための情報は欲しいなぁ。
フォームでも×を線で描いてしまえばなんとかなりそうなんですけど、
拙速コードでも早期論文化を目指してフォームでやるか
将来のためにUWPを勉強するか悩みますね。 >>893
WPFでもFormでもスケーリングはページ変換使うだけだから難しくないと思う。
■ Formを使う場合の問題点
- 自動でスケーリングされるのはグラフィックだけ。コントロールやそのフォントは
コードでスケーリングや座標変換する必要がある
■ WPFを使う場合の問題点
- GDI+ほど簡単じゃない
- 多数の図形を描画する場合はパフォーマンスが問題になる 何処の座標を実寸通りにしたいか?
だけでformでいいだろ
なんでボタンまでやる必要があるんだ? A4相当の大きさのウィンドウ表示って調べてみると難しいんですね。
DPI取得もなんかOSで100%以外の拡大表示にしてると当てにならないみたいだし、
ディスプレイの大きさはユーザーが実測値入力で妥協してももいいのかな・・・。 厳密な同環境を求めてるみたいだが、
マウスの移動速度で無理が出ると思う >>896
だからできねぇって
スマホもフルhdだろ?
モニタもフルhdだろ? >>896
一応モニター自身が持つEDIDとかいう情報に表示領域の物理サイズが含まれているらしい
WPFはどうだったか知らんけど、FormはOSのDPI設定を無視して指定ピクセルサイズでFormを
表示させられると思った。
だからDPIさえ分かれば目的の物理サイズのウィンドウを表示することは難しくないはず >>898
さっきからスマホスマホうるさい
WPFの時点でデスクトップWindows固定だって理解できないの? >>900
えー、だから解像度に対するモニタのサイズが決定しねーと駄目でしょって話何だけど?
スマホを例に挙げたのはあんな小さいなりして解像度はフルhdだから ユーザーがモニタサイズを入力って何回も書いてあるじゃん
それじゃ不満なの? デスクトプPCとタブレットPCにでもしときゃ良いだろうに >>902
逆にそこまで決定してると疑問が出るのが謎 やっぱりC#もバカばかりなんだなあ
現代の三大バカ
ペチパー、ジャバパー、シーシャーパー
で決定やねw 教えてください。
以下のような事をしたいと思います。
再現のために最低限必要なところだけを抜き出しているので、これだけだと意味が不明ですが、
同じような処理があちこちにあるので処理をまとめるため、このような事をしています。
public void Execute( string sql )
{
using (var command = new System.Data.SqlClient.SqlCommand(sql.ToString() ))
{
}
}
これをビルドしても警告等は出ませんが、コード分析の実行を行うと SqlCommand のところで
CA2100 の警告が出ます。意味は以下のページの通りです。
https://msdn.microsoft.com/ja-jp/library/ms182310.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3
要するに関数パラメータで受け取った文字列にはなにが含まれているのか分からないので危ないよ、と言われているのだと思いますが
出来れば上の関数を利用する形式で進めたいと思います。
この形式のまま CA2100 を回避する手段のアドバイスをいただけると助かります。 >>906
生のテキストを送るなバカ
PrepareなりSqlParameterなり使ってSQL文とデータを分離しろバカ
詳しくは「C# インジェクション対策」でググれバカ MDT_RAW_DPIで物理的なppiに近い値が返ってくるからそれ使えで済む話、で終われば良いんだが
あれちゃんとした値が返ってくる保証が無さそうなのがねー >>907
それはやってる。
再現する最低限までコードを削った結果としてその部分が見えなくなってるだけ。 >>912
あ。ごめん。
いろいろ試してたときのコードが残ってました。
.ToString() がなくても再現します。実際にもそんな事してません。 >>911
えー?
でも出てる警告ってSQLインジェクションの警告ちゃうのん? >>911
ほんとにやってる?
このコードだけ出されても警告でるに決まってるし、リンク先のような対策しろとしか言えない >>906
一応コード分析で警告表示させないようにするだけでいいなら、SuppressMessage属性を付ければでなくなる
チームでやってるならメンバー全員の許可は必須 >>906
ちゃんとリンク先読んでる?
メソッドに渡された文字列引数から構築された文字列を使用して IDbCommand.CommandText プロパティが設定されています。
って書いてあるんだからSqlCommamd.CommandTextに外部からもらった文字列を設定した時点でその警告になるよ
パラメーター云々はその後の話
その形式のまま使いたいなら>>917が書いてる通り抑止するしかない
ちゃんとやるならやりたいこと毎に関数作ってSqlCommamd.CommandTextに固定の文字列を設定するようにしないとダメ レスをくださった皆さん、ありがとうございます。
>>917
現状では、 教えていただいた属性をつける方法を相談して、NG ならこのまま警告を残す。って方向かなと思います。
一応、先のリンク先の以下に当てはまるのでセキュリティ的には問題ないと考えます。
>警告を抑制する状況
>コマンド テキストにユーザー入力が含まれない場合は、この規則による警告を抑制しても安全です。
>>918
>ちゃんとやるならやりたいこと毎に関数作って
同じような処理があちこちにあるのを嫌って、906 のように出来ないかなと考えました。
ただ、一般的なやり方ではなかったかも知れません。
>>919
ストアドとは、たとえばこのリンク先の事で正しいですか。
https://code.msdn.microsoft.com/windowsdesktop/DataAccess-howto-32c91bf0
自分が試した限りでは CA2100 が出ました。
いままではストアドでも execute 付けて普通に SQL 文として実行してましたが、こういう方法もあったのだと勉強になりました。
またストアドはローカルDB では問題ないのですが、基幹DB では使わせてもらえないようです。軽く聞いてみた範囲での事ですが。 20年以上前にcを使っていたことがあるという状態で、c#を独学で学び始めたところです
極めて初歩的な話だとは思いますが、どうしてもわからないので教えてください
下記のコードで、「未割り当てのローカル変数'num'が使用されました」というエラーが出て
コンパイルできません。
try-catch構文の後の Console.WriteLine(...) を、try節の中に中に入れるとコンパイルが
できるのですが、try - catch構文以降は、変数のスコープが失われてしまうということなの
でしょうか。
using System;
class ExceptionTest
{
static void Main()
{
int num;
string s;
try
{
Console.Write("enter a number : ");
s = Console.ReadLine();
num = Int32.Parse(s);
} catch(Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("Your number : " + num);
}
} >>921
もしtryブロックの中で例外が発生した場合、
> Console.WriteLine("Your number : " + num);
この行に到達した時点でnumの値はどうなってるでしょうか? >>921
null許容型にするか、素直に0で初期化しておく >>921
スコープの問題ではなく、try節のnum代入に到達しない可能性があるから
文脈からすれば仰る様にnum出力をtry節に含める、あるいはint num = 0;等…
C#はそういうの然り、C/C++よりガチガチに厳しい そのうちc#にもdeferが導入されるみたいだけどそういうのでボコボココンパイルエラーが出るようになるのか >>926
C/C++でだって未初期化の値を使うコードを書くべきじゃ無いけどな 未初期化の(可能性がある)変数は、参照できない。バグ 皆様ありがとうございます
変数numが定義されていないというエラーだとばかり思っていたのですが、初期化されていないという意味だったのですね
理解できました >>931
私もそう思っていたのですが、違うのでしょうか
手元に書籍がないので、参考にしている本にはなんと書いてあるか不明ですが、
c#では整数型の変数は自動的に0で初期化される、と書いているサイトも
あるようです >>933
訂正
クラスのフィールド変数は初期化されるけれど、メソッド内のローカル変数は初期化されないのですね
誤解していました >>935
ここが技術板なのでプログラマ板で聞いてください winformsのTableLayoutPanelで2つの列を作成したとき、プログラムの実行中に左右の幅をマウスで調整することはできますか? >>937
どのコントロールでもMouseDown/Move/UpイベントとSize指定ができればいくらでもできる 解釈の原因は解釈者が持つ自分ルール。解釈の自由は責任を伴う
言葉風紀世相の乱れはそう感じる人の心の乱れの自己投影。人は鏡
憤怒は一時の狂気、無知無能の自己証明。中途半端な知識主ほど激昂
「真実は一つ」は錯誤。執着する者ほど矛盾を体験(争い煩悩)
他人に不自由(制約)を与えれば己も不自由(不快)を得る
問題解決力の乏しい者ほど自己防衛の為に礼儀作法マナーを要求
情報分析力の低い者ほどデマ宗教フェイク疑似科学に感化洗脳
自己肯定感の欠けた者ほど「己の知見こそ全で真」に自己陶酔
人生経験の少ない者ほど嫌いキモイ怖いウザイ憎い想定外を体験
キリスト教は世界最大のカルト。聖書は史上最も売れているト本
全ては必然。偶然 奇跡 理不尽 不条理は思考停止 視野狭窄の産物
人生存在現象に元々意味価値理由目的義務使命はない
宗教民族領土貧困は争いの原因ではなく口実動機言訳(原因帰属錯覚)
虐め差別犯罪テロ紛争は根絶可能。必要なのは適切十分な高度教育
体罰は指導力問題解決力の乏しい教育素人の独善甘え怠慢責任転嫁
死刑は民度の低い排他的集団リンチ殺人。「死ねば償える」は偽善
核武装論は人間不信と劣等感に苛まれた臆病な外交素人の精神安定剤
投票率低下は社会成熟の徴候。奇人変人の当選は議員数過多の証左
感情自己責任論 〜学校では教えない合理主義哲学〜 m9`・ω・) 2chビューワのスレ欄のように、listViewでマウスオーバーするとその行の文字にアンダーラインが入るようにしたいです。
やってみると、以下のサイトにそれに近い方法がけいさいされていたのですが、サイトに指摘があるように画面がちらつきます。
ListViewのアイテムがポイントで選択、シングルクリックでアクティブにできるようにする - .NET Tips (VB.NET,C#...)
https://dobon.net/vb/dotnet/control/lvpointselection.html
そのため、ちらつきを抑制する方法を探したところ、いろいろ出てきましたが、どこにどのコードを記述すればいいのかさっぱりわかりませんでした。
下記サイトが一番丁寧な気がしましたが、これを参考にしてもフォーム上にlistviewが出てきません。
ListViewを更新したときのちらつきを抑制する(C#メモ): amongの雑記
どうすれば、ちらつきを抑えたlistviewを作成することができるのでしょうか?教えてください。 すいません、
>ListViewを更新したときのちらつきを抑制する(C#メモ): amongの雑記
についてはNGワードとなってしまいました
下記のURLのスペースを抜いたものです。
http://amonution.sb lo.jp/article/45398035.html >>940
これもどのコントロールでも同じなんだがコントロールにダブルバッファのプロパティを付け加えた新しいコントロールを作ってそれを使う
おなじdobonのサイトに「リフレクションを使って、DoubleBufferedプロパティにアクセスする」もある
https://dobon.net/vb/dotnet/control/doublebuffered.html >>942
返信ありがとうございます。
初心者なもので
>ダブルバッファのプロパティを付け加えた新しいコントロールを作ってそれを使う
これの方法がよくわからないのです。
そのページも見たのですが、
>public class DoubleBufferingListView : ListView
以下の部分を全体のコードのどこに記述ればいいのか、記述したあとそれをどうやって使うのか、というのがそもそもわからないのです。 >>938
すみません、もう少し詳しくおしえていただけないでしょうか?
もとの文では分かりづらかったかもしれませんが、コントロール中の左右の幅(比率)を変更したいです。
(デザイナ上でやるように、つまみを掴んで左右に動かすイメージです) とりあえず、namespaceの直下に貼り付けてみてビルド→うーん、エラーか
public partial class Form1 : Formの下に貼り付けてみる→動いたが、じゃあ次に何をすればいいのかわからん。
こんなレベルです。 >>943
クラスとして記述してデザイナに表示されなければ新しく作ったコントロールを含めたアセンブリを一度ビルドする
dobonのどこかにもやり方あるんじゃないの
>>944
MouseDown:
マウスが押されたe.Location(をスクリーン座標に変える)を変数に記録する
決められた位置で押された場合にフラグをセットする
MouseMove:
フラグがセットされていれば現在の座標と記録していた座標の差分を計算してSizeを変更する
MouseUp:
フラグを破棄する >>946
public partial class Form1 : Formの直下に記述して、F7を押してビルドして、form1.cs[デザイン]タブを開いてみましたが、
特に何か増えたような様子はありませんでした。
ご指摘事項を正しく実行できてますでしょうか? >>946
>>937です。
分かりやすく説明ありがとうございました。明日すぐ実装してみます。 すいません、これで解決しました。
System.Windows.Forms.Control のダブルバッファリングをさくっと有効にする - kawanon
http://d.hatena.ne.jp/m_kawanon/20100708/1278587297 リッチテキストボックスのスクロールバーだけ、ドラッグしてもバーがついてこないのですが、
私だけでしょうか? 業務用アプリをオサレな画面にしたいんだけどWPF使ってそこらのテーマ拾ってくるのが手っ取り早いかね >>951
WPFのテーマなんてクッソ古臭いデザインの10年近く前からメンテされてないのしかないぞ
WebかUWPで今風のフラットデザインにしましょう 普通は大事じゃない
メジャーな一部の奴だけなぞっておけばいい >>951
Material Design In XAML Toolkitが今風で良い感じだよ。
タブが必要なら同じ作者のDragablz Tab Controlも併せてどうぞ。 ざっと知っておくに越した事は無い
使うかどうかは別としてね
むしろ、「これはやるな」っていうアンチパターンを覚えた方が良いかもだ material designとかタッチメインならいいけど、マウスメインのデスクトップアプリならmaterial designはスペースが無駄すぎる excelファイルを操作する必要があり、いろいろ調べたらclosedXMLを使うのが良さそうという
結論に達したのですが、詳しい解説のあるサイトや書籍はないでしょうか。
ファイルの開き方、セルの参照方法などは普通に見つかるのですが、提供されている
メソッドの一覧とか、発生する例外とか、実用上知っておくべきことを知りたいのです
(主にエラートラップをするためです)
公式ドキュメントがどこにあるかすら発見できなかった程度の英語力ですが、ドキュメントの
ありかを教えていただければ、辞書を引きながらでも調べてみます Excel操作はCOM Automation以外には手を出すな
地獄を見ることになる ExcelのCOMオートメーションはサーバーでの動作保証が無い時点でゴミなんすよ エクセルファイルなんてグレープシティのスプレッド買えば一瞬で終わるだろ WPFってどういう用途なら使うべき?
文献やネット検索が少なくて使えん >>968
いかなる用途でも使うべきではない
MSの推奨はElectronとASP.NET やたらElectron推す人いるけど、言うほどMSが勧めてるかなぁ Electronは縦書きエディタすら作れない駄目なやつ
表示はどうにでも出来るが入力が機能的に絶対無理とか俺が費やした半日を返せよ >>961-966
触れてはいけないものに触れてしまったかのような反応ですが、なんとかドキュメントを
読んで頑張ってみますわ・・・
>>967
趣味で書いてたVBAマクロをスタンドアロンに書き直したい(データだけexcelファイルから
流用したい)という用途なので、万円単位の買い物は無理です、残念 MSがPWAに手を出したから、類似技術のElectronは始まる前にMSでは終わった コンソールとフォームしか作ったことないけどまだまだいけますか? 趣味ならどうでもいい
職業ならWebできないと仕事ない てっきり今後はWPFが主流になると思って使ってみたけど、
情報がネットに少なすぎてまいったわ 例外処理について教えてください
簡単な例で、キーボードから数字を入力させて処理するとして、非数字が入力されたら
数字が入力されるまで、正しい入力をするよう促したいとします
(これだけなら例外を使わなくても簡単ですが、あくまで例として)
bool flag = false;
string str;
int i=0;
while(flag != true)
{
try
{
Console.Write("enter a number = ");
str = Console.ReadLine();
i = Int32.Parse(str);
flag = true;
} catch
{
Console.WriteLine("incorrect number.");
}
}
Console.WriteLine("your number is : " + i);
こんな感じで、try-catchの間をループで囲んで、脱出フラグを用意するのが正攻法
なのでしょうか?
なんかもっとスマートな方法がありそうなのですが >>981
いや、例だと
回答してもこれは違う実は書いてないけど
こういう問題があって駄目だの
小出しでどんどん出るから
ピンポイントでこの問題を解決したいってのを書いて var i = 0;
while (true) {
Console.Write("enter a number = ");
var str = Console.ReadLine();
try {
i = Int32.Parse(str);
break;
}
catch (FormatException) {
Console.WriteLine("incorrect number.");
}
}
Console.WriteLine("your number is : " + i); >>982
すいません、ピンポイントで課題に直面しているのではなくて、勉強中で疑問に思ったので
質問しました
例えばファイルオープンで存在しないファイル名を掴まされたとか、テキストファイルを想定
しているところにバイナリを噛まされたとか、そういうケースのリトライをどうやって実装するのかと
疑問に感じたのです >>984
このソースは理解できましたが、>>985はどういう意味でしょう?
私は921でもあるのですが、この時指摘いただいたとおり、iを初期化しておかないと
未割り当てとしてコンパイル通りませんが >>986
ファイル読み込みに失敗しました。
Windowsを終了します。 気持ちは分からんでもないが、抽象的な質問しても抽象的な答しか返ってこないと思うw
static void Main(string[] args)
{
var number = 0;
Func<bool> tryAskNumber = () =>
{
Console.Write("enter a number = ");
return int.TryParse(Console.ReadLine(), out number);
};
while (!tryAskNumber())
Console.WriteLine("incorrect number.");
Console.WriteLine($"your number is : {number}");
} >>986
そんなもん具体的に何をどうリトライしたいのかによる
それが明確になってるならそれをそのまま実装するだけだ
ネットワークエラーのようにそのまま自動的にリトライ可能なエラーならある程度決まったパターンがあるけど、
>>986のように条件を変えない限りリトライしても必ず失敗するケースでは個別に考えるしかない >>987
この場合は while を抜けたときは必ず i に値が代入されているとコンパイラが判断できるので通る
https://ideone.com/kUpXYh >>989
私の学習では、まだ
Func<bool> tryAskNumber = () =>
この書き方が理解できていないのですが、これでやっているのは例外の処理ではなくて
boolでメソッドの戻り値を評価して処理を繰り返しているのですね?
抽象的な質問だと言われればそのとおりなのですが、エラーが発生したときに例外を
返してくるメソッドを使っているときに、正常処理ができるようになるまで同じ処理を繰り返す、
というケースの質問でした
条件を変えるとかは本質的な話ではなくて、「例外が発生しなくなるまで繰り返す」という
処理フローそのものの質問です
>>984で、break文でtryの中からwhileブロックを抜ければよい、と理解できたので十分です
(tryブロックから、その外側のwhileを抜けられると思ってなかったので躓いてました)
数字入力を取り上げたのは、例として単純で、言わんとすることがすぐに伝わるかと思った
だけです
>>991
>>984
の var i=0; を var i; にしただけだとエラーになりましたが、int i; なら通るんですね >>981
例外が出たらアプリケーションを止める
ファイルオープンだとしてもそれは変わらず、存在しなくてリトライしたいなら以下のような事前チェックをするべき
if(存在していない)continue;
ってのが理想だけどファイル系のエラーってたくさんあるし、確認しずらいのもあるからtry-catchを使わないのが現実的じゃないことも
メソッドが例外を出すのは使ってはいけない使い方をしているということなので、使っていい状態か確認してから呼び出すよう心がけるべきかな foreach(var a in XXX)
{
みたいなことを可能にするためには
XXX はどんなクラスを継承してないといけませんか?
(何が必要か)
たとえば、XXX がDataRowCollection 型だったら
foreach(DataRow a in XXX) とやらないと怒られてしまいます。
DataRow[] だったら、var が使えます。
この違いは一体なんだろう(なにが必要なのかと)、と つまり、DataRowCollection は
IEnumerable を継承しているから、foreach の in に使えるけど
IEnumerable<T> は継承してないから foreach(var は許されない
ということですか >>992
ラムダ式を使わずに書くとこう
static void Main(string[] args)
{
var number = 0;
while (!TryAskNumber(out number))
Console.WriteLine("incorrect number.");
Console.WriteLine($"your number is : {number}");
}
static bool TryAskNumber(out int number)
{
Console.Write("enter a number = ");
return int.TryParse(Console.ReadLine(), out number);
}
プログラミングの基本は一気にすべてを解決しようとしないこと。
問題を小さな問題に分割すること。
「○○が成功するまで繰り返す」なら、○○の部分と成否を判定してリトライ
する部分は分けた方が基本的に分かりやすくなる
抽象的な質問に対して何か言えるのはこの程度だと思うけど.... >>994
継承は関係ない
GetEnumeratorってメソッドがあればok このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 33日 23時間 52分 35秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。