TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼
Java入門・初心者質問スレ Part.9
【普通のやつらの】 Arc Language 0 【上を行け】
【Delphi】Embarcaderoオッチャ その33【C++ビルダ】
プログラマー目指してるんだが色々と教えてくれ
HSPだって
【統計分析】機械学習・データマイニング27
くだすれDelphi(超初心者用)その55
フリーソフトなどに使われる言語は?
【上流社会】MSDNサブスクリプション総合【最先端】
ふらっと C#,C♯,C#(初心者用) Part142
ふらっと C#,C♯,C#(初心者用) Part138
- 1 :2018/06/05 〜 最終レス :2018/08/02
- 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.2ch.sc/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part137
https://mevius.2ch.sc/test/read.cgi/tech/1523004019/
■コードを貼る場合は↓を使いましょう。
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: checked:vvvvv:1000:512:----: EXT was configured
- 2 :
- (*゚∀゚)b
- 3 :
- デコーダーがイベント監視してる時点でなんかおかしいって気が付かなきゃダメだよ
クラスの責務は1つなのだからデコーダーはデコードすることに集中しなきゃならん
なのでイベントの購読、デコーダーへのデータ供給は別のクラスの仕事というわけだ
どうしてもデコーダーにイベントソースを掴ませたいならより抽象化されたストリームを渡すべきだろうね
- 4 :
- 前スレ>>999
酷い言い掛かりだなw
この人、自分の議論が
(1) FrameDecoderは使い捨てされるオブジェクトである(CommunicationPortより寿命が短い)
(2) FrameDecoderを使う側(メインクラス?)はプログラムと同じ寿命
っていう自分勝手な前提に立ってることに気付いてるのかな。
そんな勝手な前提を置いたらどんなイチャモンでも言えるよw
既に書いたが、結局抽象的に言えるのは
----
使い捨てのオブジェクトが自分より長寿のオブジェクトのイベントに
メソッドを紐づけする場合は、イベント購読解除を忘れるとリークする
----
これ以上でも以下でもない。
だから俺の書いたコードhttps://mevius.2ch.sc/test/read.cgi/tech/1523004019/985
に対して、「FrameDecoderがプログラムと同じ寿命じゃない、使い捨てされるオブジェクトなら
いらなくなったタイミングでイベント購読解除するようにしないとリークするよ」と質問者にアドバイスするのなら
意味があると思う
イベント発行側を引数でもらったらイカンとか、そんな訳わかんない
俺様ルールを他人にごり押ししてどうすんの。
- 5 :
- それとさあ、、これも繰り返しになるけど、
だから俺は質問者の参考になるかもしれんコードの骨組みのサンプルを書いてるだけであって、
そんな細かい別の話をしてるんじゃないってばw
何でもっと建設的になれないかな
- 6 :
- 死なないと分かんねーのかな
- 7 :
- >>4
分かってないなあ
FrameDecoderの寿命はFrameDecoder自身が決めることではなくてそれを使う側が決めることでしょ
引数をはじめとして、自分の管理外にあるものに対して自分自身を登録することは、その了解を破ってるという点で好まれない
OSSのソースとか読んだことないかもしれないけど、実際滅多にないよ?
FormやTimerのようにGCRoot持って自分自身で寿命を制御してる例外も無くはないが、
それはフォームはXボタン、タイマなら一定時間経過、というように自分自身の性質が寿命を決めているからそれが自然なんだよ
- 8 :
- >>4
分かってないなあ
FrameDecoderの寿命はFrameDecoder自身が決めることではなくてそれを使う側が決めることでしょ
引数をはじめとして、自分の管理外にあるものに対して自分自身を登録することは、その了解を破ってるという点で好まれない
OSSのソースとか読んだことないかもしれないけど、実際滅多にないよ?
FormやTimerのようにGCRoot持って自分自身で寿命を制御してる例外も無くはないが、
それはフォームはXボタン、タイマなら一定時間経過、というように自分自身の性質が寿命を決めているからそれが自然なんだよ
- 9 :
- >>7
分かってないのは君
だから、君は勝手に「FrameDecoderを使う側の寿命はCommunicationPortと同じが
それより長い」という前提に立っている。
何度も言うが、そんな勝手な前提を置いたら何でも言える。
じゃあFrameDecoderを使うオブジェクトの寿命がCommunicationPortより短い場合はどうするのか。
- 10 :
- >>9
なるほど、そんな初歩的なところを勘違いしてたのか
イベントを使うにしろ何にしろ、CommunicationPortから引数の受け渡しによってデータを受け取る以上、
当然、CommunicationPortからFrameDecoderへは参照を辿って到達可能でなければならないよ
問題にしてるのはその参照を登録したり解除したりする責任の話ね
- 11 :
- つか、シリアル通信クラスって標準のがあった気がするけど
それが合わないとしても、それを模倣して作れって言うのが普通じゃないのか
- 12 :
- すいません
回答ありがとうございました
何か揉める原因になってすいません
ttps://dobon.net/vb/dotnet/vb2cs/event.html#section3のデータを返す方法がやりたいことになるのかなと思って調べてました。
- 13 :
- 彼らは病気だから気にしなくていい
いつものことさ
- 14 :
- >>10
何を言ってるのかさっぱり分からない
だれか分かる人がいたら解説してw
「CommunicationPortからFrameDecoderへは参照を辿って到達可能でなければならない」
必要なんかどこにあんのw
しかし、こういう「俺様ルール」を正当化するために
勝手な前提条件を設定してかつその自覚がない人ってのは困っちゃうね
- 15 :
- >>12
別にもめてるわけじゃw
プログラミングは技術の一種なんだから質問スレであっても
議論に発展することがあるのは当たり前で、それを異常なことのように
感じる人間の方が病気で、そういう人間こそ無視していいと思う
以前「マウンティング」って言葉が好きな御仁がおったけど、
ようするに彼はそんなくだらないことでマウントを取りたい自分を
表出することで何かを語るに落ちてることにも気が付かない素朴なお方だw
- 16 :
- >>1読め
- 17 :
- どうでもいい質問ですがvisual studioの初期設定で
C#が中括弧だけで1行使うのはなにか理由があるんでしょうか?
C++他の言語だと最初の中括弧の前では改行しないスタイルの方が多いと思うんですが
- 18 :
- ない
- 19 :
- https://ja.m.wikipedia.org/wiki/字下げスタイル
- 20 :
- >>17
波動拳みたいでいいだろ?
- 21 :
- >>19
どうも、よく分かりました
- 22 :
- パイソンスタイルが至高
波カッコとか要らん
- 23 :
- 俺はブロックが解り易くて良いと思うけどな
縦に長くなるのが嫌だって人がいるのも理解しない事はないが
- 24 :
- >>17
C++は { だけで一行使うスタイルの方が一般的だと思うぞ
C#はもともとC++開発者の取り込みを狙って作られた言語なので、ソースのスタイルも含め、意図的に全体的な雰囲気をC++に似せている
- 25 :
- >>22
C#はコード畳めるんだぜ?
- 26 :
- 言いたい事は解るけど、それは言語仕様でなくIDEの機能では……
- 27 :
- あのコード畳める機能って極悪だよな。
もうそろそろ終わりだなぁと思ったら畳まれているコードが数百行隠れてましたとか泣いたよ。
- 28 :
- 畳まれてるコードがあって泣くってどういう状態だよ・・・
- 29 :
- どうせ20000行のメソッドとかなんだろ
- 30 :
- クラスの作成について教えてください。
内部でstring程度の情報しか持たない場合でも、Disposeは実装しなければならないですか?実際、何もやる事ないですが。
- 31 :
- しなければならないと言った人に聞いてくださいよ
一般的に、決定権がある人が必要ないと判断すればしません
- 32 :
- すみません、聞き方が悪かったです。
しなければならないと言われた訳ではないのですが、作法としてどうなのかな?と心配になって質問しました。
自分だけで使うならどうでもいいのですが、他人にも公開するものなので、恥ずかしくないものを作りたくて。
- 33 :
- 作法というかIDisposableは主にアンマネージリソース解放の用途だよ
OS機能を直接扱うとか、メンバーが使用してるとか。インスタンス解放ではない
むしろ実装の仕方に作法があるのでMicrosoft DocsなりMSDNなりを
- 34 :
- >>32
やることが無いならDisposeやファイナライザを実装してはいけない
それらを実装するのは例外的なケースであり、無いのが普通
- 35 :
- >>33
>>34
レスありがとうござます。完全に勉強不足でした。
IDisposableが実装されてないクラスなんて山ほどあるのに何を勘違いしてたんでしょうか。聞いてよかったです。
- 36 :
- >>27
行数表示してないのかよw
- 37 :
- コントロールが表示されないのですがなぜでしょう
Microsoft.Toolkit.Win32.UI.Controls.WinForms.WebView wv = new Microsoft.Toolkit.Win32.UI.Controls.WinForms.WebView();
wv.Dock = DockStyle.Fill;
this.Controls.Add(wv);
wv.Navigate("http://www.yahoo.co.jp/");
- 38 :
- >>35
アンマネージなシステムリソースを確実に解放するときに使うよ
- 39 :
- どういう考え方をすればできるようになるんだよ!教えろお前ら!!ホラホラホラホラ!!!!
- 40 :
- プロセスゾンビを確実にkillするにはどうすればよい?
- 41 :
- シャットダウン
- 42 :
- kill -9 プロセス番号
- 43 :
- init 0
- 44 :
- >>17
私は { は単独にしない派ですね。
理由は、少しでも多く画面内にソースを表示して見通しやすくするためと、昔からの Basicの名残で、ifなら thenに相当する { は行末。endifの } は単独という位置づけですね。
今はideの進化で { } のペアの書き忘れがほとんどないというのもあるかな。
- 45 :
- >>37
試してないけど、対応OSで実行してないとか?
- 46 :
- >>44
その言語の流儀に素直に従った方がいいんじゃないかと
- 47 :
- 流儀に従うなら、どっちでもいい、では?
- 48 :
- int c = 5;
for(c = 1; c < 61; c++)
{
//処理
}
Console.WriteLine(c.ToString());
これで一番最後でCが62になるのですが
C<61の判定後でも++のインクリメントは行われているってことでいいのですか?
- 49 :
- >>48
新規でコンソールアプリ用のプロジェクト作ってそれをコピペして実行してみたら?
処理の中身に問題が無ければ62になるはずがない
- 50 :
- >>48
https://ideone.com/Sr1WXN
- 51 :
- つーか、この程度の検証もせずに他人に質問を投げる神経が分からんマジで
- 52 :
- >>47
パブリックなAPIかそうでないかによって違う
- 53 :
- >>45
OSのバージョンは問題なさそうなんですよね。
- 54 :
- >>52
え、何が?
{の位置にそんなこと関係ある?
- 55 :
- 構造化制御文はインデントされた行を1行と1行、例えば if (a == b) { と } で挟むのが、
パッと見たとき一体に見えて分かりやすい。{ を単独行にすると、{ と } で挟まれた
無名ブロックがあって、その上に構造的に無関係な1行のif文があるように見えてしまう。
もう少しじっくり見れば、行末の ; の有無で下のブロックとの関係を判別できるが、
その一瞬の認知の遅れに違和感を覚え、もっとはっきり言えばキモいコードだと思う。
同じ理由で、条件が真のときの文が1つの場合の
if (a == b)
c = d;
e = f;
のようなスタイルもキモいし、Pythonの
if a = b:
c = d
e = f
g = h
はもっとキモくて、まさに蛇蝎のように嫌いだ。
関数・メソッド定義と制御文の見分けという観点からも、前者は
int func(int arg)
{
後者は
if (cond) {
で始めて、( の前のスペースの有無と { の前の改行の有無のどちらでも前者と後者で
違いをつけた方が、すんなりと見分けられて良い。
- 56 :
- >>55
if (cond) {
}
と書くのだったら、関数の場合も
int func(int arg) {
}
とするのが統一がとれていいんじゃない?なぜ関数と if 文とで書き分けるのか、その理由がわからない
- 57 :
- その自己主張要る?
- 58 :
- あ、>>57は>>55宛てね
宗教論争は他所でやって頂きたい
- 59 :
- メソッドとif文に差付けなくてもインデント違う時点で判別付くんじゃないのか
と思ったが、ローカル関数出てきたんだっけか
- 60 :
- if (cond) statement;
if (cond) call();
if (notcond) return;
statement;
statement;
statement;
{}がなくても見やすいね
- 61 :
- >>56
それぞれの制御文 (if, for, whileなど) 同士は機能が似通っているが、
関数は全く違うから、見た目も書き分けた方が良い。
Pascalだと関数は
function func(arg: integer): integer;
begin
で、制御文は
if cond then begin
で始まり、前者は begin の前に ; が入り、関数頭部を書いて一旦区切ってから
関数本体を書く格好になるので、頭部の行の独立性が比較的高い。これに倣い、
C系でも関数は頭部だけで改行した方がすんなり読める。
>>58
じゃあ、スレ立ててよ。
- 62 :
- >>60
1行if文は否定しないし、自分自身も割とよく使うよ。
- 63 :
- >>61
pascal に習う必要はないと思いますが…なぜ pascal を持ち出してきたのでしょうか?
私は関数と if/for/while を別にする必要性はないと思っています
{
}
とかスペースの無駄にみえてしまいます
- 64 :
- 構造がクリーンなコードを心がければ自然と{}を使わないコードになる
まあ俺から言わせてもらうと{}は綺麗なコードが浮かばない時に仕方なく使う苦肉の策ってところだね
- 65 :
- >>63
Pascalの悪い所、例えば条件を ( ) で囲まないので条件が目立たないのは真似する
必要はないが、良い所は参考にすべきだろう。C#は開発主導者がTurbo Pascalの
作者だったこともあり、Pascalからもいくらかの影響を受けていて、赤の他人ではない。
関数と制御文は機能が違うし、関数の方がより大きなブロックだから、書き分けた方が
すんなり読める。自然言語で小さな区切りには , を、大きな区切りには ; を使って
書き分けるのに似ている。あるいは章や節の見出しのスタイルに視覚的な差を
つけるようなもの。
- 66 :
- >>65
>>61
昔のpascalのif 文は
if cond
begin
..;.
end;
が主流だった気がします
if cond begin
end;
はむしろCの影響を受けているのでは?
- 67 :
- >>54
うん。C#のコーディング規約はあくまでもパブリックなライブラリに関するものだから。
プライベートなものについてはお好きにどうぞって感じ。
- 68 :
- 改行コードが構文に影響を与えない言語仕様なんだから、好きにすればいいんだよ。
- 69 :
- pascal流はマジキモイな
func() {
}
if () {
}
else {
}
が一番利に適ってる
- 70 :
- これ以上続けても宗教の違いみたいな話で
なにも建設的なハナシにはならないからここらで終わりにしておけば?
- 71 :
- いくら議論したところで、お仕事なら我が社のコーディング規約で終わっちゃう話だしな
- 72 :
- どうでもいいしキモい
- 73 :
- この手の嗜好がただの慣れと思い込みにすぎないっていい歳こいて気付かない人は
プログラマとしてかなり筋が悪いと思うw
たぶん知能もあんまり高くないw
2週間も違う書式で作業してたらすっかりそっちが「普通」になるw
人間なんてそんなもの。
これフォントにも言えるね
- 74 :
- >>70
泥仕合にならないかぎり、意義があると思っています、これから泥仕合になるのかもしれませんが…
- 75 :
- エディタとコーディングスタイルの話はしないのが紳士のたしなみ
- 76 :
- >>73
フォントは目に優しいのを使った方がいい
カッコの位置などというくだらない問題とは違う
- 77 :
- >>61
ふらっと C#,C♯,C#(議論用)
http://mevius.2ch.sc/test/read.cgi/tech/1469538912/
- 78 :
- >>75
よい習慣をお持ちですね。素晴らしい
- 79 :
- VisualStudio2017 でコンソールアプリケーションを作っています。
System.Windows.Forms.Clipboardクラスを使いたいのですが
ビルドの設定をReleaseにしているとエラーはでないのに
Debugにすると FormsがSystem.Windowsに存在しないといわれてしまいます。
(アセンブリ参照はしています)
どなたか原因分かる方いないでしょうか。
https://i.imgur.com/sgkx4HK.png
https://i.imgur.com/Tr2VkYB.png
- 80 :
- >>79
csprojファイル晒して
- 81 :
- >>80
新しいソリューションを作成してコードをコピペしたら問題が発生しなかったので
とりあえず解決したということにします。
ありがとうございます
- 82 :
- フォームアプリで画面の真ん中に線を引きたいと思って単純に
(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)/2
のところに線を挽けばいいと思ったんですが、モニタのピクセルの半分のところに線を引くと
フォームの上の -□× のあるバーの下から0ピクセルになるから20ピクセルほどが下にずれてしまいます。
フォームの中央に線を引く方法ってないでしょうか?
- 83 :
- 枠無しフォームでやれ。
- 84 :
- >>82
フォームの中央なのか画面の中央なのかまずはっきりしてくれ
スクリーン座標←→クライアント座標の変換を行うには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html
- 85 :
- フォームの中央なのかディスプレイの中央なのかどっちだよ
- 86 :
- 自分でもどっちでいいかわからなくなったw
最初単純にフォーム最大化してるんだから、モニタの真ん中が真ん中だろと思ったら、
windowsって下にタスクバーあるわ、モニタの下に非表示領域20ピクセルほど隠れてるわ、フォームにフォームバーあるわで、
モニタの真ん中が真ん中に見えない。
たぶん無意識化でフォームの真ん中が人は真ん中と認識しているので気持ち悪い。
ということでフォームの真ん中にしました。
- 87 :
- >>86
タスクバーの位置なんて自由に変えられるんだけど
- 88 :
- >モニタの下に非表示領域20ピクセルほど隠れてるわ
そんなものはないと思うけど...
今時CRT使っててオーバースキャン表示でもやってるなら別かもしれんけどw
- 89 :
- フォームバーってタイトルバーのことかな
非クライアント領域もあるぞ
- 90 :
- どうにかイベントを発生させることができました。ここから5バイトの受信データを分解して処理を分岐したいんですが、どのような手法、便利な関数がありますでしょうか。
オペコード1バイト+データ4バイトという形式です。データは4バイトで表現する数値だったり、1ビットごとのフラグだったりします。
昔ながらのswich~caseで分岐って使うんでしょうか
オペコードが増えたり、データの予約ビットが変わると変更が大変そうです
- 91 :
- switchでいいよ
たかがイベント一個作るのに何日もかかるようなレベルで今どんな凝った設計しようが、結局後で全部やり直しになる
今は余計な手間をかけないこと、シンプルに保つこと、それだけ考えてりゃいい
- 92 :
- デバイスドライバーみたいに処理をチェーンさせるってのもあり
- 93 :
- スクリプト言語のインタプリタなんかでも巨大switchが普通だぞ
断言するが、先を見通せない状況でヘタにコマンドパターンとか入れても、後で横断的な変更が多発して
すべてのコマンドクラスに手を入れて回るアホみたいな作業に追われることになるだけ
- 94 :
- コード増加はともかく予約を変更すんな・・・
- 95 :
- >>90
どっちにしろ「便利な関数なんかないでしょうw
ちっとも汎用的じゃない処理をエレガントに書く方法なんか用意されてるはずがないw
泥臭い物は泥臭く書くしかないかと
オペコードがそれ以上分解できない前提で
(1) オペコードをenumにキャストしてswith、でも
(2) ジャンプテーブル(デリゲートの配列)を使う、でもお好みで
もし仮に受信するデータが常にこちらから要求したデータである、
つまり、どういうデータが送信されてくることをこちら側が期待しているか事前に分かっている場合は
別の方法論もあると思う
その場合はこちらがリクエストを出す段階で、期待する種類のデータだけを読解できるオブジェクトを
生成してタイムアウト付きで待機させればいい
- 96 :
- >>93
横断的な変更を最小限の労力でやるために最初にほんのすこしだけ投資する
これがシステム開発のコツな
- 97 :
- それより、データの先頭を識別できるフォーマットにしたか?
- 98 :
- 固定長なら先頭コード種類分のデリゲートを割り付けるってのもあるが、こればっかしは好みだな。
- 99 :
- ありがとうございます。
ベタベタに書いてみます。
1バイトが1ビットごとのフラグになっている場合はビットマスクで一つずつ抽出するのが一般的でしょうか?
- 100 :
- SQLについて質問ですが
INSERT INTO T_USER (
ID, PASSWORD
) VALUES (
@ID, @PASSWORD
);
のINSERT分を
INSERT INTO T_USER (
ID = @ID,
PASSWORD = @PASSWORD
);
のように書く場合はどのようにしたらよいでしょうか。
- 101 :
- スレチ
- 102 :
- そういうメソッド作ったらいいじゃん
setInsert(new dictionary略);
みたいなの
- 103 :
- クラスの構造体(ただint型のデータが複数個しかない)をXMLに変換したいのだが
XMLSerializer以外に何かないかな?
XMLSerializerは以前にバグを起こしたことがあって使いたくないんだ
- 104 :
- >>100
UPDATEじゃないんだから・・・
- 105 :
- クラスの構造体…?
- 106 :
- >>103
全手動
- 107 :
- 最終的に配列を書きだしたいのですが
それまでに色んなクラスのインスタンスからその配列の読み書きがされるのですが
どういうふうにクラスを作ればいいですか?
その配列はグローバルでstaticで宣言するか、インスタンス作るごとに参照を引き渡すのですか?
- 108 :
- >>107
日本語でおk
- 109 :
- >>107
グローバルなpublic staticでいい
良い悪いを問題にするのであれば、あちこちから共通の配列をいじくるという前提の時点で設計に問題があるので、正解なし、が答えになる
- 110 :
- アクセス関数を作ってインスタンス取得用に一つスタティック関数を用意するだけ。
アクセス関数介さないと、排他処理とかいちいち入れるの面倒だぞ。
- 111 :
- 初歩的な質問なんだけど
プロパティ?(get;set;)ついてるやつと、ついていないやつの差がわからないから教えてほしい
プロパティつけててもprivateはアクセスできないみたいだから
結局、両方ともpublicになって何が違うん?ってなってる
- 112 :
- >>111
プロパティにするとメソッドを組み込めたりgetとsetでアクセスレベル変えられたり
あと取りあえずこの辺とか
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/properties
特定のソースで何が変わるの?って言う話なら書いた人に聞かないと分からない
- 113 :
- クラスのメンバーでプロパティじゃない変数はフィールドと言う
フィールド (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/fields
プロパティ (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/properties
フィールドは代入も参照も同じ制限になる
プロパティは別々に設定できる
しかもgetだけ setだけというのも可能
フィールド (メンバ変数) とプロパティはここが違う
https://code.msdn.microsoft.com/windowsdesktop/5-5f828cde
- 114 :
- クラスのプロパティに「型」を変数みたいにおけますか?
外部から「型」をセットして、クラスの中でその型を使って new して実体を作って利用したいのです。
- 115 :
- 気持ちをコードで表すと
public class Test
{
public <T> PersonClass;
public void Unko()
{
var p = new PersonClass();
p.unko();
}
}
ってな感じです。
※PersonClass にメソッド unko() がある前提
- 116 :
- >>115
これ使えば?
https://msdn.microsoft.com/ja-jp/library/0hcyx2kd(v=vs.110).aspx
- 117 :
- >>115
unkoを定義するインターフェイス作って、
Tをwhereでそのインターフェイスとnew()で絞った上で、default(T)でインスタンス作って、呼べばよいのでは?
- 118 :
- >>114
賭けてもいい
初心者がこの手の処理が必要だと思う時、それは100%勘違いw
- 119 :
- >>99
enumにFlagsAttributeを付ける
[Flags]
enum Hoge : byte
{
Bit0 = 1 << 0,
Bit1 = 1 << 1,
Bit2 = 1 << 2,
Bit3 = 1 << 3,
Bit4 = 1 << 4,
Bit5 = 1 << 5,
Bit6 = 1 << 6,
Bit7 = 1 << 7,
}
var hoge = Hoge.Bit1 | Hoge.Bit4;
if ( hoge.HasFlag( Hoge.Bit3 ) )
{
- 120 :
- >>119
そんな見てて痒くなる書き方しなくても今のC#は2進数リテラル使えるぞ
- 121 :
- 1
2
4
8
16
32
64
128
でいいよ。
- 122 :
- >>119みたいなのならHexで書くのが一番だろうねw
少なくとも俺ならそうする
- 123 :
- 10進よりマシだが一番ではない
2進があるならどう考えても2進が一番
- 124 :
- 書いてみりゃ分かるよw
単に一つのビットだけ立っている値を列挙するなら2進リテラルは冗長過ぎる。
そもそも何のためにHexなんかあると思ってるの
2進リテラルっていうのは、例えば組み込みで7セグのパターンのテーブルを定義する時とか、
bit5-bit7みたいにニブル単位じゃないビット範囲のビットマスクを定義する時とかに使う
- 125 :
- 君にとってはCが頭に染み付いてるからそうかもしれないけど、
現に>>119にとっては分かりにくいからわざわざこんな書き方をしてるんだろう
今時のプログラマはC経験ない人も多いんだから実情に合わせることも必要
そういう連中を見下すのもいいけど老害呼ばわりされないように気をつけてね
- 126 :
- >>125
しょうもな
偉そうにするな!と偉そうに言うバカw
どこが偉そうにしてるのか。
そもそも俺は>>119を必ずしも否定してない。
少なくとも10進表記や2進数リテラルよりマシだ
- 127 :
- どーでもいいけど、こういう自分を客観視できない単細胞な奴がネトウヨとかなるんだろうね
- 128 :
- ネトウヨってつまりどういう定義なんですか
R吸わせてくださいs
- 129 :
- 5分かけて最後に煽っていくというだけで
自分が嫌ってるゴミと大差なくなっているというね
- 130 :
- 今どきビット演算なんてしてるやつはゴミ
- 131 :
- これまで歩んだ人生がゴミ
- 132 :
- >>119
ありがとうございます
bitarrayってのがあるらしいんですけど、これって共用体とかに一括で代入できないんですかね
3バイトデータの内の下位1バイトは1bitごとのフラグなのでbitarrayで分解できそうなんですが
- 133 :
- そういえばちょっと疑問なんだけど、enum定義する時に>>119みたいにbyteとか指定するのは何か意味があるの?
指定したところでbyte型の変数に代入しようとしたらキャストしなきゃいけないし、やる意味がわからないんだけど
- 134 :
- >>133
え?キャスト?
- 135 :
- >>134
え?
- 136 :
- ああ、enumで作った型なんだからenum型になってるだろ。
受ける変数も同じ型じゃないとダメなのは当たり前。
- 137 :
- >>133
シリアライズとかネイティブとの相互運用目的
- 138 :
- 動的にenumで作った型のsizeof求めりゃいいんだが、静的に解決しなきゃならない時は指定するしか無いって話だよな?
- 139 :
- >>116-117
コンパイル時点で型が定まらない(実行時に型が決まる)ものを new する手段という風ですよね?
使えそうです。ありがとうございました。
あとは、外部から「型」を受け取って new するまでの間、保管しておきたいのですが
型を変数(プロパティ)に格納するにはどうしたらいいんでしょ
- 140 :
- >>139
117はジェネリクスなのでコンパイル時には一応定まってるハズ。
型を変数に入れたいならインスタンス.GetType()か、typeof(型)で、Type型の値が取れるけど…
本当にやりたい事と、実装の方法(型を受け取ってインスタンスを作ってそのメソッドを呼ぶ)がズレてないか心配。
- 141 :
- >>137-138
なるほど、さんくす
- 142 :
- >>140
ありがとうございます。
「型」を格納する変数の型は System.Type なんですね!!
やりたいことが出来ました!!
System.Type t = typeof(××フォーム); ← ここのところを公開して外部からセット
var f = (System.Windows.Forms.Form)System.Activator.CreateInstance(t);
f.ShowDialog();
- 143 :
- >>142
それさあ、キャストしてる時点で何の意味があるんだと思わなきゃw
- 144 :
- >>143
Showなどのフォーム共通の操作をしたいんだろう
基底クラスにキャストする分には意味はある
設計として正しいかどうかは別問題であり今の情報だけでは何とも言えないが、
君は自分の個人的な好みを一般常識であるかのように主張して相手の事情を理解しようとせず人を一方的に批判する傾向があるようだね
- 145 :
- 本当は自作インターフェースを持った「なにか」から派生するクラスなのですが
そこまで書くと行数が凄いことになるので、Form を例にさせてもらいました。
- 146 :
- >>145
本当は何がしたいの?
- 147 :
- >>144
そういうのはFafcoty Method的な方法でやればいい。
最初から質問者が何か勘違いしてるだけだと言ってるが、
>>114-115みたいな方法論を取る必要は何もない。
お前ごときに俺の何が分かるんだアホか
その批判、お前自身にちゃんと向けているか?
自己分析一つできない奴に限って安易に他人を批判したがるから笑える
- 148 :
- >>146
基底クラスから派生したクラスを動的に生成します。
142 みたいな方法が出来ることを知らなかったので
switch 〜 case でクラスの種類だけ new() やってたところをキレイにします。
- 149 :
- >>145
それは自作インターフェイスに「『自作インターフェイスをもった何かのインスタンス』を返す関数」を定義しておいて、
何かの方で「その関数」を実装して、
呼び出す側では普通に「その関数」を使えば良いのではなかろうか。
抽象クラスと静的関数の方がキレイかな。
「その関数」のリストが作りたいなら、そこでやっとリフレクションで取ったらいいし。
いきなりCreateInstanceは宜しくないというか危ないし、後々、各小クラスでコンストラクタがどうしようもない状況に陥ると思うよ。
- 150 :
- Dynamicは黒歴史ですか
- 151 :
- いいえ
- 152 :
- うんにゃ
- 153 :
- むしろ.NETのメインストリームがWebに移ってからはdynamic使われまくってる
JSONデータをたくさん扱ってるといちいち型付けてられない場面が多い
- 154 :
- 自作のインタプリタ作った時に
Dynamic使った記憶がある
意図は・・忘れたww
- 155 :
- >>153
jsonからクラスへの変換なんてVisualStudio使えば一瞬じゃない?
- 156 :
- 大規模プロジェクトなら連想配列禁止は納得できる
- 157 :
- 教えてください。
戻り値が async Task のメソッドで await を使わないと↓のような警告が出ます。
> CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
> 'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を
> 使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。
独立したメソッドなら、await が必要ないなら async Task をやめて void にすればいいのですが、
仮想呼び出しなどの関係で戻り値を変更したくない場合の解決策に悩んでいます。
とりあえず、
[1] 警告を抑制する
[2] async だけ外して Task.CompletedTask を返す
という二つの解決策を思いついたのですが、どちらも到底正しい方法とは思えません。
いいアイディアがあれば教えてもらえると嬉しいです。
- 158 :
- >>157
2が正しい
- 159 :
- 同期的に結果が分かるものを非同期にして結果が欲しいとか、コールバックでも仕込んで別処理で結果得ないと正しい結果なんて分からないだろうに。
- 160 :
- >>158
レスありがとうございます。やはり他に正しい方法はないのですね。
非同期が必要になるまでは同期実行できるのが async の効果だと思っていたので
非同期が全く必要ないときに async が使えないのは逆のような気がして
違和感が拭えないのですが、とりあえず [2] の方法でやっていこうと思います。
>>159
申し訳ないのですが、同期ついて理解不足で仰っていることが理解できないので
もう少し詳しく説明していただけないでしょうか。
- 161 :
- await Task.Run(()=>やりたいこと)
で済ますのはどうなんだろ。
- 162 :
- >>161
無駄にスレッド消費するしマルチスレッドによる不要なトラブルを持ち込む可能性もある最低最悪の方法
awaitを外したくないなら await Task.CompletedTask の方がクリーン
- 163 :
- >>161
レスありがとうございます。せっかくなのですが、私もその方法はあまり良くないと思います。
ご存知でしたら失礼を許していただきたいのですが、以下の2つの効果は同じではないのです。
async Task X() => Thread.Sleep(1000);
async Task Y() => await Task.Run(() => Thread.Sleep(1000));
>>162
確かに await Task.CompletedTask をどこかに挟むだけなら
変な副作用もなさそうですね。
ただ、警告を抑制するためだけに意味のないコードを加えるのは正しくないように思います。
私がそんなコードを見たら、await Task.Yield() のような効果を期待しているのかなと
誤解してしまいそうです。
(もちろん、 await Task.CompletedTask を勧めてくださっているわけではなく、
「await を外したくないなら」という無理のある前提に合わせて話してくださっていることは
理解しています)
- 164 :
- これあえて警告出しっぱなしじゃ駄目なのかね
IDEがasyncメソッドをawait無しで実行しているから警告しているだけであって、意図的に同期実行するのならコメントとかで明示しておけば良いような気もするけど
- 165 :
- >>164
レスありがとうございます。
たかが警告を消すために実際のコードを書き換える必要があるのかという考えは
実にごもっともだと思います。
ただその場合、警告を抑制するだけでも意図は十分に伝わると思うのですが、
やはり警告はそのままにしてコメントなどで説明を行うべきなのでしょうか。
- 166 :
- #pragma warningディレクティブ使って警告を抑止するのが一番素直のような気がする。
知らんけど
っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...
- 167 :
- >>166
レスありがとうございます。やはり警告の抑制も選択肢になりますよね。
警告を抑制することに対する考え方は人それぞれということもあると思いますので、
その都度状況に応じた対処法を考えるのが一番でしょうか。
> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...
申し訳ありません。これについてよく意味が理解できませんでした。
詳しくご説明していただけないでしょうか。
- 168 :
- >>167
ごめん後者アホなこと言いましたw
よく考えてみたら、asyncが付くかどうかはただのメソッドの中の実装によって決まる話であって、
ベースクラスやインターフェイスによってそれが強制されることはないよねw
普段深く考えずに使ってることがばれちゃったw
- 169 :
- なぜ同期させているのかが根本的に分かって無いから、警告を解く事だけに注意が向いてるんだな。
同期が必要ならコードどころか構造を変えるくらいしないてならないだろうに。
- 170 :
- 状況把握しきれていないが
async()=>{}という形でラムダにasyncつけることで解決できるケースもあるんじゃね?
- 171 :
- >>167
ご説明ありがとうございます。 >>166 で仰っていた意味が理解できました。
async/await は糖衣構文なので確かにベースクラスなどで使用が強制されることはありませんが、
深く考えずに使えるところが糖衣構文のいいところですし、
async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。
これを踏まえて、改めて >>166 にお返事したいと思います。
> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...
文法上は async なしでも問題ありませんが、コードの一貫性を考えると async を意図した
メソッドのオーバーライドで async なしは問題だと思います。
それにもかかわらず、たまたま実装上 await を全く使わなかっただけで
async の使用をとがめるような警告が表示されてしまうので悩んでいるのです。
>>169
レスありがとうございます。他の方のご意見も聞かせていただいて、
やはりこの警告は不適切で、警告を解くことだけに注意を向ければいいように感じてきています。
それに対して異論を唱えてくださっているようなのですが、勉強不足で仰っていることが
よく理解できていないので、申し訳ないのですが詳しく説明していただけないでしょうか。
- 172 :
- >>170
レスどうもありがとうございます。
このような返しばかりで情けないのですが、理解力が足りず仰っていることがよくわかりませんでした。
申し訳ありませんが詳しいご説明をお願いできないでしょうか。
- 173 :
- 先ず、同期と非同期で何が違うのか、
同期は目的の処理を完了して戻って来る事が大前提で作られている。
非同期は目的の処理を行う指示だけをして戻って来る。
だから戻り値も自ずと意味が違って来るのが普通。
同期の戻り値は実行結果、非同期の戻り値は指示出来たかどうかで結果はまだ分からない。
そこを根本的に間違えているから、問題なんだよ。
- 174 :
- >>173
基底クラスやインターフェイスに合わせるためであったり、
後でDB使った実装に変更する予定で今はハードコードしておくみたいなときには普通にあるケースだよ
後で非同期に変えるのは影響が大きいからね
- 175 :
- >>173
レスどうもありがとうございます。
同期処理と非同期処理の違いは、一般論としてはおっしゃるとおりだと思うのですが、
それが >>174 でご指摘いただいているような目的を達成する上で障害になっていて、
そのような問題を解消するために async/await 構文が作られたのではないでしょうか。
だとすると、同期処理と非同期処理の違いを理由に await なしの async を
否定することは本末転倒のように感じてしまうのですがいかがでしょうか。
>>174
ご説明どうもありがとうございます。
具体例を含めてとてもわかりやすく感じたのでこのレスの前半で引用させていただきました。
私にはこれだけ要領よく説明することはできそうにないので助かりました。
- 176 :
- まあ、メイン処理止めていいなら待てばいいじゃない。
止めたく無いならポーリングやコールバックで終わったの知ればいいじゃない。
コーディングでワーニング出るから構造を弄るって手法そのものが間違いって言ってるの。
- 177 :
- >>176
メイン処理を止めたくないならポーリングやコールバックを明示的に記述する以外に
選択肢がないというように読めてしまったのですが、この部分に間違いはないでしょうか。
もしそうなら async/await 構文についてあまりお詳しくないようにお見受けしますので、
よろしければ一度お触りになってみてください。
非同期処理の大変さをご存知であればこそ、便利さを実感できるのではないかと思います。
(ちなみに、今の問題は非同期処理を行うことも可能なメソッドをオーバーライドする際に
非同期処理を全く使わないと警告が出てしまうということですので、
何かに妥協してメイン処理を止めるというわけではありません)
- 178 :
- そもそもasync修飾子そのものには、たんにawaitする目印としての意味しかないわけで
awaitしないメソッドをasyncにするのが根本的におかしいとしか思えんのだが
- 179 :
- wpfのフォームってhtmlとcssが合わさったようなもん?
- 180 :
- >>178
async Task Hoge() { }
↑は警告は出るもののコンパイルできますが
Task Fuga() { }
↑はコンパイルすらできないので、async がたんに awaitするための目印というのは語弊があるのではないでしょうか。
- 181 :
- > async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
> 事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。
TAPはTaskを返す関数の実装にasync/awaitを強要せんし使う側も関知せんじゃろ
AsyncサフィックスなんてそれこそEAPの頃からの慣例でしかない
awaitを使わず何故か付いてるasyncよりTask.CompletedTaskを返すコードの方がよほど明確だと思うがね
- 182 :
- >>180
ただの目印と理解していいよ
asyncって目印を見つけたらメソッド内だけ文法をちょっと変えますねっていう取り決めなの
目印もなしに勝手に文法を変えられたら仕事にならん
だから目印が必要なの
目印を付けただけでエラーになると言うけど
目印を付けたら文法が変わるのだから同じコードでエラーが出たってなにもおかしくないだろう?
- 183 :
- >>181
レスどうもありがとうございます。
async Task SayHello3() { await SayHello(); await SayHello(); await SayHello(); }
async Task SayHello2() { await SayHello(); await SayHello(); }
async Task SayHello1() { await SayHello(); }
は問題ないのに
async Task SayHello0() { }
ではなく
Task SayHello0() { return Task.CompletedTask; }
と書かなければならないことに不自然さを感じていたのですが、
2つ目の SayHello0() を単独で見れば、おっしゃる通り何をしているかは明確ですし、
async に固執するのもあまり良くなさそうですね。
async はそのままにして警告を抑制する方法を提案してくださる方もいらっしゃいますし
私としてもそちらの選択肢を完全に切り捨てるまでの確信は持てていないのですが、
Task.CompletedTask を返す方法も決して悪いものではないと分かりとても勉強になりました。
>>182
確かにそのとおりですね。失礼いたしました。
ただ問題なのは、「目印を付けただけでエラーになる」のではなく、
「目印を付けないとエラーになるのに目印を付けても警告が残る」という点でして、
せっかくの目印の機能を気持ちよく使うことができず、どうしたものかと考えております。
- 184 :
- 結局質問者の疑問はこういうこと?
(1) サブクラスで非同期メソッドとして実装される可能性があるメソッドの名前は
Asyncでサフィックスすべきか?
(2) (1)がYesの場合、そのメソッドが非同期で実装されなくても(awaitを含まなくても)
asyncで修飾すべきか?
正解はYes-No?
理由は、非同期メソッドは使う側がそれを非同期メソッドだと理解している必要があるのに対し、
非同期メソッドじゃないものを非同期メソッドと誤認しても弊害はないから
もちろん不要な混乱を避けるために、「このメソッドは多態の都合上Asyncでサフィックスされてるけど
非同期メソッドじゃないよ」みたいなコメントは必要か?
- 185 :
- >>184
整理していただきどうもありがとうございます。
(1) については実は疑問であるという認識をもっていたわけではなく、
ご指摘をいただくまで当然そうするべき事柄であると考えておりました。
(2) がまさに疑問点でして、(1) が Yes/No のどちらであっても
答えが得られると嬉しいと思っています。
> 非同期メソッドは使う側がそれを非同期メソッドだと理解している必要があるのに対し、
> 非同期メソッドじゃないものを非同期メソッドと誤認しても弊害はない
おっしゃる通りだと思います。(もちろん細かなオーバーヘッドが問題にならない場合の話ですが)
> 「このメソッドは多態の都合上Asyncでサフィックスされてるけど
> 非同期メソッドじゃないよ」みたいなコメントは必要か?
インターフェース等を介さずにメソッドを呼び出す可能性がある場合は
そのようなコメントがあると親切だと思いますが、
私としては、必ずしも必要ではないように思います。
- 186 :
- >>183
気持ち良い悪いみたいな感覚の話にすると結論が出なくなる
・コードに統一感があったほうが気持ちがいい(俺はこの感覚がよくわからんが)
・使ってないものを使いますと宣言するのは気持ちが悪い
どっちも言い分としては間違いではないしどちらがより正しいかとも言えない
それは見た人によるとしか言えない
君が美しいと思って書いた統一感のあるコードは、俺からすれば必要のない無駄な記述の多い汚いコードに見えるかもしれない
それはさておき
asyncメソッドはTaskインスタンスの生成とスレッドの生成に繋がる可能性がある
インスタンスの生成はともかくスレッドを無駄に消費するってことはOS全体に負荷をかけることにも繋がりかねないので意味がないなら避けるべきだ
しかし文法上の間違いではないのでエラーと断言することもできない
間をとって警告を出すってのが妥当な落とし所じゃないかな
- 187 :
- ・スレッド生成
勉強してから言えよって思う
- 188 :
- あーこれゴミクズにありがちな燃えるコメントの仕方だわ
言い争いが始まるので、賢明な諸兄は3日ほどスレを閉じておくのがよろしい
- 189 :
- 静的メソッドの中で動的メソッドって呼び出せないってあるけど、自分のクラスのインスタンスのメソッドは呼び出せるの?教えて雑魚
- 190 :
- > async Task SayHello3() { await SayHello(); await SayHello(); await SayHello(); }
> async Task SayHello2() { await SayHello(); await SayHello(); }
> async Task SayHello1() { await SayHello(); }
と書くより引数nで実行回数を渡してforループで制御したらいい
n=0でasync awaitのペアがあるにかかわらず一度も実行されないawaitのついたメソッドができる
勿論警告もでないし誰かの言う一貫性のある美しいコードじゃないか
- 191 :
- わかってると思うけどawaitがついたメソッドに突入した時点で
内部が自動的に別のスレッドで実行されるわけじゃない
中に入っても最終的にタスクにたどり着かないと別スレッドはスタートしない
System.Threading.Thread.CurrentThread.ManagedThreadIdでスレッドIDがでるから確認したらいい
- 192 :
- >>191
await後に書いた処理って元のスレッドに同期されると思ってたけど、awaitで実行されたスレッドのまま進むよね?
Formアプリであれ?invokeしなくていいの?って思った記憶ある。思い違いだったらすまぬ
- 193 :
- 非同期自体が複雑だし、(当時は)新しい構文ってことで、混乱を少しでも減らすために警告にしてるだけっぽいね
抑止しちゃっていいと思うよ
- 194 :
- >>193
Formが作成された所謂UIスレッドでは同期されるが、コンソールアプリ等では同期されない
もうちょい突っ込むと、await文が実行されるスレッドにSynchronizationContextへの仕込みがあるかどうかで違ってくる
await後に実行されるスレッドはSynchronizationContext.Postの実装により決定される
Winformsは最初のフォーム作成時にWindowsFormsSynchronizationContextを現在のスレッドに設定し
WindowsFormsSynchronizationContext.Postはメッセージループを仲介してUIスレッドでawaitの続きを実行する
具体的な実装はReference SourceやmonoのWindowsFormsSynchronizationContextを読むのが良い
- 195 :
- 安価まちげーた>>192
なんかテキトーに書いたら分かりにくいな・・・
要はWinforms(WPFも同様)のスレッドでawaitするとその後の文は裏で勝手にControl.Invokeされてると思えばええねん
- 196 :
- >>180
>Task Fuga() { } はコンパイルすらできない
それは戻り値のチェックで、int Fuga...でもコンパイルできないだろ
Taskもasync/awaitも関係ない話
むしろ、async Task Hoge() { } がタスク戻さないのにコンパイル通ることのほうが問題じゃね
つかほんとにこれ警告だけで通って正常に動くの?
そのときHoge()で何が帰ってきてるんだ?
- 197 :
- まあその例で統一したやり方でやりたいなら
async Task SayHello0() { await Task.CompletedTask; }
で良いんじゃないのか
- 198 :
- >>196
最適化してCompletedTaskでも返すのかなとも思ったけど
IL見ると他と同じようにコード生成して実行してんね
このオーバーヘッドが必要な処理なら警告を無視してasync使えばいいと思う
- 199 :
- どう考えても質問者の方がよく分かってるのに
何も分かってない奴に限って上から目線で偉そうに何か言ってるのは滑稽過ぎるねw
気付いてないのは本人だけ(とすら気づいてない)のも何とも笑いを誘う
- 200 :
- 質問者のドメイン知識の話だろ。
質問者以外に、このスレどんなエスパーいるのか?
- 201 :
- 実際にawaitされることで呼び出し側が想定されることが実現されるなら
たとえ何もしない無駄なスレッドを使用したとしてもそれが一番いい
最適化されて何もしないとなればUIスレッドなどの副作用を期待していた呼び出し側が困る
実際はそういうことはおこらないので問題ない
上に書いてあったawait Task.CompletedTask;が一番いい答えだと思う
- 202 :
- プログラミングってさあ、基本を使い倒すほうがいいの?
- 203 :
- 皆さんレスどうもありがとうございます。
>>186
スレッド生成はともかく、無駄をなくすという観点は重要ですね。
>>198 に書いていただいてあることも踏まえると、
> しかし文法上の間違いではないのでエラーと断言することもできない
> 間をとって警告を出すってのが妥当な落とし所じゃないかな
というご意見は実に的を射たものであるように感じました。
>>190
> forループで制御したらいい
同じメソッドを繰り返し呼ぶ例は不適切でしたね。失礼いたしました。
ただ、for ループ版に n = 0 を渡しても何の問題もないのに
async Task SayHello0() { } では警告が出るというのも
やはり腑に落ちない感じがします。
>> 191
> 中に入っても最終的にタスクにたどり着かないと別スレッドはスタートしない
やはりそこが重要なポイントですよね。
だからこそ、最終的にタスクにたどり着かない選択肢がある方が
自然だと思うのですがいかがでしょうか。
>>193
> 非同期自体が複雑だし、(当時は)新しい構文ってことで、混乱を少しでも減らすために警告にしてるだけっぽいね
> 抑止しちゃっていいと思うよ
言われてみると、構文に不慣れな方向けの警告であるという考えは
とても納得ができました。
あとは、「自分は構文を十分に理解しているから警告を抑制しても構わないのだ」
という主張をいかにして人様に受け入れて貰うかが課題でしょうか(汗
- 204 :
- >>196
> むしろ、async Task Hoge() { } がタスク戻さないのにコンパイル通ることのほうが問題じゃね
> つかほんとにこれ警告だけで通って正常に動くの?
> そのときHoge()で何が帰ってきてるんだ?
確かに一見すると不思議ですよね。
このあたりの詳しい話は TaskAwaiter で検索するとお知りいただけると思います。
>>197 >>201
> await Task.CompletedTask
>>162 に書いていただいていることを仰っているのだと思いますが、
>>162 は >>161 の方法の不味さを説明するために await Task.CompletedTask を
引き合いに出されただけで、実際にこの方法を推奨されているわけではないと思います。
私自身も、async Task Hoge() { } と Task Hoge() => Task.CompletedTask; は
それぞれメリットがあるのに対して sync Task Hoge() => await Task.CompletedTask; は
すべての面で上 2 つに劣っていると考えておりますが、いかがでしょうか。
>>198
> 最適化してCompletedTaskでも返すのかなとも思ったけど
> IL見ると他と同じようにコード生成して実行してんね
大変ためになる情報をどうもありがとうございます。
私も確認してみましたが、async Task Hoge() { } と
Task Hoge() => Task.CompletedTask; との間にこれだけ IL のコードに差があると
前者を使うのは躊躇してしまいますね。そもそも私は
> このオーバーヘッドが必要な処理
になる状況が分からず、CompletedTask を返すように最適化が行われるべきだと思うのですが、
「await なしの async」と「CompletedTask 返し」との間の違いに気づいていらっしゃるようであれば
ぜひお教えいただけないでしょうか。
- 205 :
- >>202
何が聞きたい
旅行ってさあ
車で行ったほうがいいの?
→目的地や条件による
- 206 :
- >>202が一を聞いて十を知る頭の良い人間なら先に一通り言語をマスターした方が効率的
そうでないなら最初から高度な機能を覚えてもそれが何の役に立つのか理解できないから、まずは基本だけで身をもって苦労したほうがいい
- 207 :
- >>204
そもそもawait なしの asyncが必要な理由も場面も思い浮かばんが
自分一人でやってるなら好きにすればいいんじゃね
最適化うんぬんを言うなら、Taskを返すどころかそんな呼び出しそのものが不要じゃね
- 208 :
- そもそものそもそもasyncやawaitで気軽にスレッドを立ててるような処理はだいたいバグってる
スレッドを立てるってそれ自体の処理より
立てても大丈夫なぐらいの前準備のが遥かに手間がかかる
気軽に立ててあるとこはまず間違いなくバグってるので安心していい
- 209 :
- asyncとスレッドって直接関係ないだろ
スレッドは非同期処理を実装する手段の一つに過ぎない
最近のazureなんか「上司にメール送って添付URLのページにある承認ボタンが押されるまで待つ」みたいな非同期処理ですらawaitできるんだぞw
- 210 :
- 誰に向かって説教してるつもりなのかねw
馬鹿過ぎる
- 211 :
- google検索で
@it async await
これ読んでわかった気になった。
シンプルな実装では使えたけど、応用でつまずく。最近プログラム組んでないので頭固い……
- 212 :
- 固ければジューサーに入れてみる?
- 213 :
- 普通のジューサーでは>>211の固い頭は砕けません
そこでショップジャ〇ンのマジックブレッドデラックスを使えば楽チンに下ごしらえができます
- 214 :
- C♯を勉強するのにおすすめのサイトありますか?
何かを作りなが勉強したいなと思ってるんですが。
- 215 :
- >>214
https://dobon.net/vb/dotnet/index.html
http://www.atmarkit.co.jp/fdotnet/csharp_abc/index/
http://ufcpp.net/
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/
ここで勉強するというかやりたいことを「C#」に続けてググるとだいたいこのあたりがヒットする
- 216 :
- >>213
そこで、トゥルースリーパーとパチもんハズキルーペ買った。
パチもんの方はメガネにLEDライトが付いてたからつい。薄暗いとこであれはめちゃ便利(稀にしか使わないけど…orz)。(100金の老眼鏡でいいと思う。しょせん凸レンズの一種だから。)
トゥルースリーパーは半年くらいたってまだ箱の中orz
- 217 :
- c#のコーティング方法で検索すること多いけど、なぜかLINQで解説しているサイトがほとんどない
日本語サイトも海外サイトも
なんで?
- 218 :
- >>217
実践的なアプリ開発で使われる機能だから、コピペTips系サイトのサンプルコードで必要になることはほとんど無い
- 219 :
- 素人に使われると価値が下がるからね
素人は年収300万で死ぬまでくだらないコードを書いていればいいんだよ
- 220 :
- >>217
ほとんどないわけねーよwww
- 221 :
- >>217
LINQは手段であって目的じゃないからじゃないかなああああ
- 222 :
- FileSystemWatcherのChangedイベントの発生条件は、監視しているディレクトリ内のファイルまたはディレクトリのサイズ、システム属性、最後の書き込み時刻、最後のアクセス時刻、またはセキュリティ アクセス許可の変更のようですが、
このうちのどれが変更されたか種痘するにはどうすればよいでしょうか?
- 223 :
- >>218
そういうもんなの?
>>220
スタックオーバーでたまに外人さんがLINQで答えてるのあるくらい
割合的に3%くらいな印象
みんな使わないんだね
>>221
手段でも目的でもどっちでもいいの
- 224 :
- >>222
使ったことないけど、イベントハンドラで受け取れる引数(FileSystemEventArgs)
で普通に分かるんじゃなくって?
https://msdn.microsoft.com/ja-jp/library/system.io.filesystemeventargs.aspx
- 225 :
- >>222
あらかじめ情報をどこかに持っておいて比較するしかないかな
>>224
変ったという情報しかくれない
- 226 :
- >>225
いやいや、ちゃんと提示したリンクよく先見ました?
- 227 :
- >>225
あー失礼。
よく見ると結局詳細な情報は得られないみたいね
- 228 :
- ちょっとググって見た感じ、結構面倒だけど、
知りたい変更の数だけ適切にNotifyFilterプロパティを設定したFileSystemWatcherを作れば
一応可能な感じはするね
- 229 :
- >>223
みんな使ってるよ
- 230 :
- ググり方を知らない典型
- 231 :
- エクセルbook1を開かずにsheet2の2列目に入ってる項目をコンボボックスに入れたいのですが、どうやるんですか?
- 232 :
- 中身を見ずに言い当てる手品のやり方なんか知らねーよ。
- 233 :
- 地獄に落ちろ
- 234 :
- Excel.exe使わずにって意味ならいくらでもあるだろ
- 235 :
- 御託はいいから答えろゴミクズ
- 236 :
- xlsxならclosedxmlつかえば
- 237 :
- ファイル開かずにならもちろん無理。
見えないだけなら可視しなければいいだけやん。
- 238 :
- 日本人のエクセルスキーは異常
海外にも神エクセルってあるんだろうか
- 239 :
- >>231
コンボボックスとは?
- 240 :
- どんなものを作ればいいのかわからない
何をつくればいいんだ
教えてお前↓
- 241 :
- JavaMachine
- 242 :
- 会社が未だにxpが数台あって、数多くあるエクセルを開いて処理して閉じる開いて処理して閉じるってやると重いけどなんか早くなる方法ってある?
database?SQL?
VB6でそうやってエクセルファイルを扱って処理してるんだけど
- 243 :
- 5万円のPCを買ってくる
- 244 :
- >>238
外人はそもそも罫線をあまり使わない
方眼紙に文字を詰め込むのは日本猿特有の習性
- 245 :
- 私は猿なのでVSの枠がはっきりしないフラットデザインが馴染めません。
- 246 :
- 日本猿も江戸時代はプレーンテキストだったのに、どこで間違えたんだろうな
- 247 :
- >>231
開かないとわかりません
- 248 :
- >>245
同意
各項目の意味付けが曖昧になってすごく見づらい。退化と言いたいくらい。
そのうち立体的にするとわかりやすいやろって波が来ると思う。
- 249 :
- そもそも細々としたアイコンやメニューを大量に配置するのに適したUIではないわ
Azureコンソールとか見てても思うけど、マイクロソフトにUXデザイナーがいないってのは恐らく本当
- 250 :
- VSCodeのUIは使いやすいけどな
本家VSもボタン全部無くしてコマンドにするべきだわ
- 251 :
- web service(asmx)について教えてください。
利用する複数のアプリで使い回したいものをstatic変数に保持したいのですが、寿命が尽きるタイミングは分からないでしょうか?
具体的にはデータベースのconnectionでして、セッションをケチるために1つだけを使い回そうと考えています。寿命が尽きる時にdisposeしたいのですが、できない場合問題でしょうか?
- 252 :
- C#の設計思想とか、どういう設計でコード書いたらいいかみたいなのがわかりやすい書籍ってある?
- 253 :
- >>244
値を縦に並べて合計との間に一本横線引いてあるだけとか、海外の資料じゃ良くあるよね
>>245
馴染めないという程じゃないけど、もうちょっと境界をはっきりして欲しいな
Windowsのデザインからしても最近のMSのトレンドなんだろうけど
- 254 :
- >>252
c#実践開発手法がいいと思う
設計する上で重要な思想が学べるはず
- 255 :
- フラットデザインは最近はやりのユニバーサルデザインとは真逆
- 256 :
- >>254
よさげ
とりあえずKindle版ぽちった。
ありがとう!
- 257 :
- 第2版が出てたんだな
ステマか
- 258 :
- ダイレクトやろ
- 259 :
- むしろサードパーティマーケティング
- 260 :
- 今年独り社内SEとして入社しC#を選んだ者ですが、コンストラクタをオーバーロードして引数が有るものと無いものを作りました
よくよく考えると引数が無いコンストラクタのインスタンスを作って引数有りを前提にしたメソッドをコールすると最悪例外を出してしまうのですが、これは設計不良として検討し直しでしょうか?よくある事として許容されるでしょうか?
- 261 :
- >>260
>引数が無いコンストラクタのインスタンスを作って(コンストラクタの)引数有りを前提にしたメソッド
人に聞くまでもなく作り直さないとだめだろう
- 262 :
- やっぱり設計の問題ですよね
フィールドに初期値入れれば例外は起きないと思いますが、引数必須のインスタンスを作られたら無意味なメソッドが完成するというのは設計者失格ですよね
- 263 :
- >無意味なメソッドが完成する
メソッド書き直すとかないんだ・・・
普通は条件が違えば呼ばれないようにするとかメソッド内部で分岐させるとかいろいろあると思うんだが
- 264 :
- >>251
>寿命が尽きるタイミングは分からないでしょうか
基本的には分からない
つかキャッシュ使え
そもそもDBコネクションならほとんどの場合でドライバ側でプーリングされてると思うが
- 265 :
- >>260
設計不良は大げさ過ぎw
普通に考えて
(1) 引数ありのメソッドは廃止。代わりにそのデータはプロパティでセットできるようにする。
(2) 引数なしのコンストラクタが呼ばれた時はプロパティの値は規定値が設定されるようにする
こんだけでしょう
- 266 :
- >>264
データベース管理者から、なるべく接続を増やすなと言われてます。複数のPCから複数のアプリでアクセスするので、窓口を一本化するイメージです。
なのでプーリングはアプリ分の接続が残るので逆効果。
キャッシュを使うとは具体的にはどうするのですか?ググるヒントをもう少しください。
- 267 :
- >>266
>複数のPCから複数のアプリでアクセスするので
それサーバ側の話?
アクセスって何に?DBにアクセスするのは誰?
つか、そもそもそれWEBサービスに同時アクセスあったときにどうする気?
- 268 :
- >>260
使う側からすると、引数に渡す値ね〜よのときは、引数なしのほうがいいな。
(なしのときは null渡すとかにしたくないな。私見)
- 269 :
- >>266
接続ユーザー分排他でもするのかよw
- 270 :
- 4msのインターバルタイマを実現するのにおすすめの方法を教えてください
- 271 :
- リアルタイムOSをインストールする
- 272 :
- USBシリアル付きマイコンから適当にパルスを送ってもらう
数百円ぐらい
- 273 :
- >>267
クライアントPCからデータベースに接続します。webサービスで排他処理します。
サーバーの負担を増やしたくないとの事で、とにかく同時期にセッションを増やさないという方針は決定してます。
なので排他処理はどこかでやる事になるのですが、どこかのPCで動くアプリよりやり取りも含めて楽かなと思ったのですが。
- 274 :
- >>271
CreateWaitableTimerなるものを見つけました
試してみます
>>272
URLはよ!はよ!
- 275 :
- >>273
データアクセスのためのAPI作れば
- 276 :
- >>272
Arduino Nano互換 でいいのね?
よーし、パパがんばっちゃうぞー
- 277 :
- >>273
>クライアントPCからデータベースに接続します。webサービスで排他処理します。
webサービスは何をもらって何を返す気なんだ
なんにしても俺には想像もつかない方式を検討してそうだ
- 278 :
- >>273
webサービスの中で普通にコネクションを開いて使い終わったらすぐにDisposeすればいいよ
ライブラリがいい感じにコネクション数を調整してくれる
どうしてもマニュアルでコネクションの数を制御したいならDB要求をループで処理し続けるスレッドを走らせて、他のスレッドとはキューで連携させる
- 279 :
- web側でmax connection pool sizeを設定するだけの話に見えるが
そういう設定が無いからどうしたらいいかって話なの?
- 280 :
- tes
- 281 :
- test
- 282 :
- fwくぇ
- 283 :
- fwq
- 284 :
- fwqef
- 285 :
- よそでやれ
- 286 :
- >>262
引数なしのコンストラクタをprivateに
- 287 :
- >>286
それだと(外部から)引数必須なインスタンスしか作れなくなる
それが設計通りならそれでいいけど
引数必須なインスタンスと引数なしのインスタンスが同一クラスである必要あるのか疑問だ
引数なしのクラスを継承して引数ありのクラス作れば良い気がするぞ
- 288 :
- 引数一個で騒々しいソースコードですね
- 289 :
- 動けば良いってなら好きにすればいいさ
設計論として考えるとどうしても大仰になるのはしかたない
- 290 :
- クレデンシャルを持ってる場合だけ一部の関数が使えるとか
別に珍しい設計じゃないと思うけどね
- 291 :
- >>289
動けばいいことの他に何を気にしてるの?
実行速度?
- 292 :
- ああ、なんか質問を読み違えてたけど、
要は現実の使われ方として、特定のプロパティがまったく必要とされないケースがあるってことね。
単純に考えると>>287がシンプルで分かりやすいように思うけど
ケースバイケースではあるが、一つのプロパティを追加しただけのサブクラスってのも
存在意義がはっきりしないというか、名前付けに困るようなクラスになりがちのようにも思う
コンストラクタで明示的に指定されない場合はプロパティの値が規定値としておくのが
無難なケースの方が多いと思うけどね
- 293 :
- >>291
設計論だっていってるんだから、設計の美しさだよ
美しさの基準は人によって違うからほとんど宗教論なんだがなw
>>291
>コンストラクタで明示的に指定されない場合はプロパティの値が規定値
コンストラクタで指定するものが、プロパティで指定できるようなものなら確かにそれが一番無難
ただそれなら引数つきコンストラクタの存在意義がなぁ
たんにコードが短くなるぐらいだが、オブジェクト初期化子でプロパティ設定するのと大差ない気がするし
- 294 :
- webBrowser1.documentText=hoge;
で生成したHTML中にページ内リンクがあります。
(<span id="xxx"></span>)
クリック操作をせずにこのアンカーにジャンプすることはできるのでしょうか?
- 295 :
- webBrowser1.Document.GetElementById("xxx").InvokeMember("Click");
- 296 :
- エラーは出ないのですが、ジャンプはしてくれませんでした。
単なるアンカーなので、直接それをクリックしても意味はなくて、
<a href="#xxx">XXX</a>をクリックするようにしないとジャンプしないのではないでしょうか?
(なお、ページ内に↑を用意していないので、これをクリックすることはできません)
- 297 :
- GetElementById(...).ScrollIntoView(...)
- 298 :
- >>297
いけました!
ありがとうございます!
- 299 :
- ListVIewでクリックされたアイテムのインデックスを取得するにはどうしたらいいでしょうか?
例えば、以下の画像だと、"ListSubItem 3"がクリックされた時に、1,2 (1は列,2は行)といった値を取得したいです。
http://www.planetsourcecode.com/Upload_PSC/ScreenShots/PIC20042291953273057.jpg
- 300 :
- 引数有り無しのコンストラクタで相談した者ですが色々とご意見ありがとうございます
先輩無しの独り開発なので参考になります
何が正しいかはプロジェクトの性質に左右されそうなので突き詰めませんが、驚き最小の法則的に見ると、無意味なメソッドをコール出来るとかどんな気持ちでしょうか?
私は後々混乱しそうなので避けたいのですが、さほど驚かれないならこのまま実装しようかとも
- 301 :
- >>299 HitTest
- 302 :
- 暇つぶしにunityでプチゲームを作ろうとしているのですが
以下のような処理をしています。
https://dotnetfiddle.net/p6v66Z
スキルが増えるごとにSkillFactoryとTypeToParameterに分岐が増えていってしまって
なんだかなあという感じなのですが、もうちょっとマシな方法はないでしょうか。
SkillParamが諸悪の根源のような気もしていますがほかにうまい方法がおもいつかず。。
- 303 :
- githubでC#で書かれたソースコードを見るとVisual Studioで作成したファイルが見当たらないんですが、
Visual Studioを使わないほうがいいんでしょうか?
- 304 :
- ワークシート1のb2から空になる最終行までフォーム1のコンボボックスに入れにはどうしたらいいですか?
- 305 :
- >>303
VisualStudioで作成したファイルって具体的には何のこと?
- 306 :
- ListでKey値が一致する要素を探して
内容を更新するにはどうすればいいの
ループで検索するしかない?
- 307 :
- >>306
DictionaryならともかくListでKey値って何よ
- 308 :
- >>307
2次元にしてキー項目を自分で作ったのよIndex用に
- 309 :
- KeyedCollectionクラス
- 310 :
- なぜDictionaryにしなかったのか
- 311 :
- 君は何故全力を尽くしても駄目なのか
- 312 :
- object型のメンバ?の値を文字列型に代入したいのですが
どのように書けば良いでしょうか?
static void Main(string[] args)
{
var obj = new { a = "a", b = "b" };
Hoge(obj);
}
static void Hoge(object obj)
{
string fuga = obj.b.ToString(); //この書き方で怒られてしまいました
}
object型は基本のようなので、根本的な所を理解していないのかも知れませんが
よろしくお願いします。
- 313 :
- >>312
Hogeのobjはbを知らないから……かな?
- 314 :
- >>312
objectをdynamicに変えるといいよ
- 315 :
- >>312
つdynamic
- 316 :
- 便乗質問していいですか?
> var obj = new { a = "a", b = "b" };
これってクラスとして扱われるんですか?
- 317 :
- 扱われるよ
- 318 :
- インスタンスメソッドとstaticメソッドの使い分けがいまいちわからないので教えてください
public class Hoge {
private string Name { get; } = "piyo";
public Hoge(string name) {
Name = name;
}
}
上記のようなクラスがあり、これをvar hoge = new Hoge("foo"); とインスタンス化したとして、
public bool IsPiyo(){
return Name == "piyo";
}
上記のようなインスタンスメソッドを書いて、hoge.IsPiyo()とするのと、
public static bool IsPiyo(Hoge hoge){
return hoge.Name == "piyo";
}
上記のようなstaticメソッドを書いて、Hoge.IsPiyo(hoge)とするのでは、どう違い、どちらにするべきでしょうか?
なんとなく、staticの方が入力と出力がはっきりしてるのでわかりやすいのかなと思うのですが、オブジェクト指向ではないですよね
- 319 :
- インスタンスが必要かどうか。
stringクラスのCompareメソッドとCompareToメソッドが良い例。
前者はパラメータがnullでも通るが、後者はインスタンスが無いとダメ。
- 320 :
- インスタンスメンバーを参照してないならstaticにしてる
でも必ずすべきとは思わない
仮に日本語にして考えてみる
人間クラスに "はピヨです()"メソッドをそれぞれ実装すると
if(人間.はピヨです(彼)) {〜}
と
if(彼.はピヨです()) {〜};
これを見るとstatic はおかしいと思うがstaticにすることが多い
- 321 :
- 誤解を招くような書き方だけど上のHogeなら間違いなくインスタンスメソッドにする
- 322 :
- あー、ちょっとわかってきたかもです
主語というか、意味的に、表現したい意図に近い方を選ぶ感じですかね
とりあえず今回の例で言うと、インスタンスメソッドにすることにします
- 323 :
- RuntimeHelpers.PrepareMethod(RuntimeMethodHandle)の挙動が理解できない・・・
このコードでm2にPrepareMethodを使うことは不可能ですか?
==
using System.Runtime.CompilerServices;
class B<T> { public void M() { } }
class C1 : B<int> { }
class C2 : B<string> { }
class Program
{
static void Main(string[] args)
{
var m1 = typeof(C1).GetMethod("M").MethodHandle;
var m2 = typeof(C2).GetMethod("M").MethodHandle;
RuntimeHelpers.PrepareMethod(m1); // 問題なし
RuntimeHelpers.PrepareMethod(m2); // System.ArgumentException: '指定されたジェネリックのインスタンス化は無効です。'
}
}
==
- 324 :
- >>322
別にそんなとこ気を使っても一円の利益にもならんというアドバイスも
心の片隅においておいてくれ
- 325 :
- Cでエクセルを扱っていろいろするときはやっぱcsvにしておいた方がいいのかね?
- 326 :
- >>316
匿名型、で調べてみるといい
- 327 :
- >>325
何をやりたいか次第だけども、
csvで完結出来るのならcsvがいい
- 328 :
- 下手にxls使うと勝手に型変換してくれるからめちゃくちゃになるんだよな。
- 329 :
- 複数のアプリで1つのserial portを使いたくて、dllで受けて受信データによって別々のイベントを発生させ、複数のアプリに受信させようと考えました。
dll内のSerialPortをstaticで持てば共有できるかと思ったのですが、staticで宣言しても呼び出し元が別プロセスだと共有されないようですね。
何かいい手はないでしょうか。
- 330 :
- シリアルポートと通信するサーバを作って
必要な数だけクライアントを待ち受けるのが楽なんじゃないの
プロセス間通信はソケットやパイプとか適当なものを使う
- 331 :
- >>323
コレじゃダメかい?
https://stackoverflow.com/questions/31754418/runtimehelpers-preparemethod-not-working-when-called-with-funcstring-created-i
- 332 :
- 複数のアプリにどうやって通信データを振り分けるかの方が興味あるわ。
- 333 :
- つ MSMQ
- 334 :
- そもそもWindowsのシリアルポートって複数のアプリで共有(同時オープン)できるのか?
- 335 :
- シリアルポートはなんかが掴んでたらだめだよね
- 336 :
- だから質問してるんでしょw
質問者は他のアプリが占有中でも無理矢理割り込む方法を聞いてるわけじゃなく、
自作アプリの複数のプロセスで共有する方法を聞いてる
- 337 :
- ない
- 338 :
- だからそもそもシリアルポートは複数のプロセスで共有できないでしょって言ってるんだが
どうすべきかは>>330さんがとっくに示してるわ
- 339 :
- 馬鹿にも程があるな...
- 340 :
- 言ってるんだが
いつも思うけど、こういう口調って馬鹿の間で流行ってるのかねw
- 341 :
- シリアルポートに限らずdllのstatic変数が共有できないのですが、共有したい需要ってないのでしょうか?共有したい場合はどうするのがよいのでしょうか?
- 342 :
- >>332
俺もこれが疑問だ
仮にサーバーが受けたとして
どうやって俺宛か判断するんだ?
- 343 :
- dllのstatic云々はおいといてメモリマップトファイルならC#でも使えたかな
C++ならデータセグメントを共有メモリにできる
どちらにしろプロセス間の排他制御が必要
- 344 :
- >>342
宛先なんかなく、単に全部のアプリに同じデータがブロドキャストされれば
十分って場合もあるでしょ
例えばシリアル経由で計測器か何かのデータが送られてくるとして、
(1) 画面表示だけするアプリ
(2) エクセルにログを保存するアプリ
(3) 計測データを使って何か他の機器を制御するアプリ
何かの都合でこんな風に複数のアプリに分けて作る必要があるのかもしれない
- 345 :
- C#でのSelenium操作についても質問していいですか?
- 346 :
- >>331
レスどうもです!下のようにして上手くいきました
こうなってくるとm1に対する方法はたまたま問題が起きないだけで
m2やm3の方法のほうが望ましいように思えてきましたがそういう認識であってますか?
==
using System.Runtime.CompilerServices;
class B<T> { public void M() { } }
class C1 : B<int> { }
class C2 : B<string> { }
class C3 : B<int> { }
class Program
{
static void Main(string[] args)
{
var m1 = typeof(C1).GetMethod("M").MethodHandle;
var m2 = typeof(C2).GetMethod("M").MethodHandle;
var m3 = typeof(C3).GetMethod("M").MethodHandle;
RuntimeHelpers.PrepareMethod(m1); // 問題なし
RuntimeHelpers.PrepareMethod(m2, new[] { typeof(string).TypeHandle }); // 問題なし
RuntimeHelpers.PrepareMethod(m3, new[] { typeof(int).TypeHandle }); // 問題なし
}
}
==
- 347 :
- >>346
(確固たるソースに基づく訳じゃないので推測だけど)値型か、参照型かじゃない?
参照型の場合は TypeHandleを指定する必要がある、ってこと。
- 348 :
- >>341
よく解らんけどdllってアプリごとにメモリに個別に展開されて初期化されるからソースコード上で同じ変数名にアクセスしても実態は違うので共有できないのは当たり前なきがする
- 349 :
- Cとかって共有されなかったっけ?よく覚えてないけど。
- 350 :
- されるわけないだろ
何のためにプロセスがあると思ってるんだ
- 351 :
- ないって言ってんのにな
死ぬまで悪あがきしてればいいよ
- 352 :
- 何がしたいのか知らんけど、Win2k時代にシリアル通信のロガー作ったことある。あんときは、DLLをフックしてCreateFile,ReadFile,WriteFileのデータをトレースしたが、ハッキリ言ってやめたほうが良い。
- 353 :
- ロガーだけならどこぞの口でforkすりゃいいだけだろ。
通信内容を振り分ける仕組みだと思ってたから無理って話してんだよな。
- 354 :
- 親がシリアル掴んで、名前付きパイプで子に振り分けるかなぁ。
- 355 :
- >>332, >>342, >>353
受信データによって
って書いてるから何らかのプロトコル決めてて、アドレスとかポート番号とかの振分け用の情報あるんだろ
LANケーブルは1本でも複数のプロセスで共有してるのと同じ
ここまで書けばよほど頭の悪い奴でなければわかると思うが>>329が言うようなことは実現可能
http://nobikko-nobinobi.hatenablog.com/entry/2017/09/13/234555
ただC#だけでできるかどうかは知らん
- 356 :
- >>349-351
無知自慢乙
- 357 :
- 同じDLLのstatic変数がそれを使ってることなるプロセス間で同じメモリの場所を参照するかってことじゃないの?
- 358 :
- >>356
残念だけどそれはプロセス間の共有メモリの話であってシリアルポート共有じゃないよ
シリアルポートは排他でしか開けないので他の人が書いてるようにシリアルポートをサービスで開いておくしかない
それがどのような形をとるかはいろいろある
- 359 :
- 通信量など条件にもよるけど、
シリアル受信プログラムは、データの種類によって接頭語+日時名のファイルを作る。
各アプリはファイル監視して自分用のを実行する。
とかユルイ連携にするのも手かと。同時開発しやすいしテストやトラブル対処も楽。
- 360 :
- ASP.NET CoreにはJavaの@Transactionalのような仕組みはないのですか?
DispatchProxyを使ってトランザクション管理を自前実装してますがより一般的な手段があるなら乗り換えたいです
- 361 :
- 今時232C使ってるようなデバイスでそんな振り分けが必要なデータなんか送ってくる可能性は低いと思いうけどねw
I2Cとか485をエミューレートしてるとかなら知らんけど
そんなデバイス聞いたことないけどさ
アプリ作るのも、ブロードキャストして要らないデータはアプリ側で捨てる方が簡単で
保守性も高いでしょう
- 362 :
- どーせ、RS485/LAN変換器とか絡んでるんじゃね
- 363 :
- 普通のシリアル通信にコンフリクト回避のネゴエーショ等の機能は存在しないんだが、どうするつもりなんだろうな。
RS422規格の通信にするにしても、ドライバーが対応してないと難しいよな。ハードフロー制御なドライバーにして後はハードに頑張ってもらうのかな?
- 364 :
- あ、先に書かれてたか。
- 365 :
- LANはシリアル通信ではないのだが・・・
- 366 :
- >>358
>>329は受信によってイベントを発生させるとか書いてるからサービスでないといろいろ面倒だが、単にポートの読み書きを共有するだけならサービスなんていらんよ
- 367 :
- >>361
まーた、俺の環境ではそんなデータはあり得ない(キリッ
ってか
いちいちマウント取りに来なくていいよ
- 368 :
- また必死なのが沸いてるなァ
- 369 :
- >>347
ありがとうございます
いろいろ試してみたところ、書いてもらった通りメソッドを宣言したオブジェクトのジェネリック型引数が
全部値型ならPrepareMethodの第2引数は要らないみたいです
でも値型と参照型が混在する場合は参照型のハンドルだけ渡せばいいというわけではなくて
値型のものも含めて渡す必要があるみたいなので、
やっぱり基本的にメソッドを宣言したオブジェクトがジェネリック型引数を持つなら
第2引数は必要と考えたほうが安全な気がします
- 370 :
- 君たちマニアックすぎよ!
初心者用だぞ!
- 371 :
- >>367
こういう馬鹿みるちいつも思うけど、それやってるのはお前なんだけど...
馬鹿にも程があるなほんと
- 372 :
- >>371
>>368
- 373 :
- >>372
これやるのも2chの馬鹿の特徴だよね
これ見るといつも思うが、こういう馬鹿には自分自身を見る自意識がないのかね。
お前自身がやってることは何なんだw
それ以前に必死だったら何なのかね。意味が分からん
まるで「お前ウンコした!!!」って騒いでる中学生だけど、ガチでそのあたりで精神年齢止まってる可哀想なお方なんだろうけどね
- 374 :
- >>373
>>1読め
- 375 :
- 232C使うようなデバイスでアドレスだのポート番号だの、振り分けが必要なケースなんかレアだろう、
(質問者もそんなこと言ってない)ってのはごく普通の感想だと思うけど、異論があるならできれば
具体例上げて反論すればいい。
マウントがどうとか中学生じみたことしか言えない馬鹿は黙ってろって
いい歳こいて恥知らずかよ
- 376 :
- >>374
いう相手を間違えてるよ馬鹿
こういう馬鹿も2ch名物だな
- 377 :
- >C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
読めないのは誰なのか
- 378 :
- slip も知らない奴にほざかれてもな
あと産業用ならRS-485はまだまだ現役
https://www.fujiele.co.jp/semiconductor/step/engineering/20171219-1/
- 379 :
- 結局、物理的な線は一本なんだろ?
なんで他アプリ全員に配るんだ?
- 380 :
- >>377
お前自身も読めてない。いってるそばから「俺だけ特別」クンか
そもそもなぜ喧嘩を売った側でなく売られた側を非難するのか
馬鹿だろお前。
- 381 :
- >>379
それは愚問。
ただ、昨日から言ってるように、現実的に考えれば質問者がやりたいことは
>>344みたいな感じである可能性が一番高いと思う。
もちろん、仮想的な複数の通信チャンネルを実現したい可能性も否定はできない
- 382 :
- 「自分自身」と「馬鹿」って来たら例外を握り潰す君だから
そいつこのスレに12年いるぜ
- 383 :
- 年いくつだろ
Hagexを刺した統失くらいはあるのかなw
- 384 :
- あとは「口調」「中学生」「精神年齢」は定番ワード
- 385 :
- >>382
こいつもいつも思うけど、これで自分をおかしいと思わないんだから幸せでいいよねw
前から誰のこと言ってるのか知らんけど、この意味不明な粘着質、普通にストーカーと同じメンタルだ
- 386 :
- そもそも匿名掲示板で誰かを「特定」して付きまとってやろう、って動機が理解不能だけど、
普通の人間だったらそんな動機を持つ俺って異常なんじゃないかと悩むと思うんだけど...
いや悩まなくても、多少知恵がある人間なら、それって(2chにはよくいる)負けを認めるだけの
精神的強さを持たない弱者の「精神勝利法」なんじゃないか、とか思うと思うんだけど
- 387 :
- 必死だな。
- 388 :
- 遅レスですがobjectをdynamicに変えて値を取る事が出来ました
こんな便利な型があるんですね
ありがとうございました
- 389 :
- 動機ねえ、スレが荒れそうだからかな
俺に反応して貰って、俺が反応を無視すれば、とりあえず収まるんだよ
そう、いつものことだ
- 390 :
- >>375
232cは物理層の規格や。今だってモデムやTNC繋げる人もいるさ。
- 391 :
- >>329
答え出てると思うけど
プロセスは3つにする
1つのプロセスはシリアル通信のサービスを提供
他の2つはクライアントとしてシリアル通信の要求をだす
要求はQueueで排他する等で安全策取る
プロセス間通信は適当に(ipc使えば簡単かな)
- 392 :
- >>391
あ、、、要求じゃなくてサーバーが自走して受信のイベントをクライアントに出すのか
でもそれも可能だからね
- 393 :
- おお、コンプリティッドタスク!!!
使ってみよう
ありがとうございました
- 394 :
- ipcは死んだ技術なのかと思ってたけどつかってる人いるんだね
デバッグ環境ではうまくいくけど実環境でこけることが多いから最近は使ってなかった
- 395 :
- electronでもつかうことね
- 396 :
- 配列内の文字列がtargetStrに含まれてるかどうかを調べるコードなのですが
いまどき風な書き方ってありますか?
var words = new string[] { "ああ", "いい" };
foreach (var word in words)
{
if (targetStr.IndexOf(word) != -1)
{
// hit
}
}
- 397 :
- >>396
Contains
- 398 :
- >>396
targetStrの中に"ああ"や"いい"が含まれている判定はIndexOfでいいんじゃね?
ループつかわないでLINQのAnyメソッドにしておくとか
- 399 :
- あ、すまん。おらの見ないでよかと。>>397見てなかったorz
- 400 :
- まぁ、words.Any(word => targetStr.Contains(word)) ですっきり書こう、が今時?なんかなぁ?
- 401 :
- >>400
それ、words.Any(targetStr.Contains) でいけるよ
仮引数いらん
- 402 :
- >>400-401
https://qiita.com/Temarin/items/4ac0de4f395dcecf5eec
このページでは
.Where( string.IsNullOrWhiteSpace );
よりも
.Where( x => string.IsNullOrWhiteSpace( x ) );
を推奨してるけどいまいちよく分からないから詳しい議論を聞いてみたい
- 403 :
- >>402
お前は何回Where呼ぶつもりやねんと
Whereの引数に渡すデリゲートのnewがネックになるほどタイトなループでWhere呼ぶなら、明らかにその設計自体が問題
どうでもいい机上の空論だから全く気にする必要はない
通常は、そんなことよりもラムダが間に一枚入ることによるメソッド呼び出しのオーバーヘッド増加のほうが問題になる
- 404 :
- 仮引数を省略してるというより渡してるものが違うだろ。
たとえフレームワークの関数でも、関数自体は俺も渡したくはないな。
xとか付けるやつは意識してないだろうが、引数名も有意義だし。
そもそもこれぐらいならインライン展開されるだろうし。
- 405 :
- 関数を第一級オブジェクトとして取り回したくないならLinqなんぞ使わず素直にループした方がいいよ
- 406 :
- 最近はクエリスタイルも悪くないかなって思えてきた
単純に記号が減って読みやすいし
ループで書いたらネストするようなクエリを書きやすい
Effective C#でもサンプルコードにクエリ形式を使ってるね
- 407 :
- >>404
関数型の世界では関数をそのまま渡すほうが好まれるよ
その方がより宣言的だからな
ラムダはダサい
- 408 :
- 一級オブジェクトとして関数渡してんじゃん?ラムダでも。Funcがdelegateなのが気に食わんのかな。
ダサいってのは主観的な気がする。
- 409 :
- あれ、主張がわからんくなってきた
関数を引数にするのはいいけど、その場合必ずラムダで無名関数作ってから渡したいって話なのか
- 410 :
- >>408
Haskellとかやってみたらわかるぞ
関数型ワールドでは徹底的にプレースホルダを省くのがクールと見做される
理由は知らん
- 411 :
- 皆様ありがとうございます!
高度過ぎて理解できてませんがContainsとLINQ any調べてやってみますm(_ _)m
- 412 :
- >>410
そこら辺は言語毎の宗教だろ
他言語を持ち出して比較するのはフェアじゃない
- 413 :
- 宗教というか、純粋関数型言語とマルチパラダイム言語で記法を比べられてもな
- 414 :
- >>410
ポイントフリースタイルにこだわりすぎるのはHaskell界隈でも嫌われてるから
あんま変な誤解を植え付けんでくれ
仮引数があった方がわかりやすいならつければいい
ただ今回のContainsに関してはそれでわかりやすくなる要素が見当たらないので何とも
まぁどっちでも普通に読めるから、どっちでもいいよもう
- 415 :
- デリゲートとラムダ式は別物
メソッドにラムダ式を渡してると思って実際は変換されたデリゲートを渡してる場合もある
メソッドのシグネチャーを見てラムダ式をわたしてるのかデリゲートを渡してるのか意識すべき
- 416 :
- やっぱりラムダ式とかデリゲートとか難しい…
>>415
メソッドに渡すのは常にデリゲートだと思ってました
ラムダ式を渡す場合とデリゲートを渡す場合、それぞれの例を教えてもらえませんか?
- 417 :
- >>416
ちょっと書いてたことはあいまいで間違っていたが詳しく知りたいなら
c# ラムダ式 式木でググる
- 418 :
- >>415
お前は何を言ってるんだ
ラムダ式は文法要素上はメソッドの一種
メソッドだからデリゲートに暗黙的にキャストされる
- 419 :
- ラムダ式を渡してるって、その日本語自体がおかしい事に気づくべき。
- 420 :
- >>417
勉強になります
>>415 の真意は↓の中で4行目だけはコンパイルできないから気をつけましょうということですか?
Func<string, bool> a = s => string.IsNullOrEmpty(s);
Func<string, bool> b = string.IsNullOrEmpty;
Expression<Func<string, bool>> c = s => string.IsNullOrEmpty(s);
Expression<Func<string, bool>> d = string.IsNullOrEmpty;
このあたりのことがとてもあやふやなので解釈が間違っていたらぜひ教えてほしいです
- 421 :
- そんなのいいから早く完成させろよ
- 422 :
- ところで
words.Any(targetStr.Contains) とか
Func<string, bool> b = string.IsNullOrEmpty; とか
これいつからできるようになってたの?
ラムダ式導入時からできてた?
- 423 :
- >>422
C#2.0からだからラムダより前
今では誰も使ってない匿名メソッドと一緒に入った
匿名メソッドもラムダもメソッドなので、メソッドからデリゲートへの暗黙変換がないと
匿名メソッドもラムダもデリゲートをいちいち明示的にnewしないといけなくなる
- 424 :
- >>422
ラムダ式は関係ないよw
C#2.0からデリゲートのインスタンスを明示的にnewしなくてもよくなった
http://ufcpp.net/study/csharp/sp_delegate.html#definition
words.Any(targetStr.Contains) ;
は
words.Any(new Func<string, bool(targetStr.Contains));
の省略記法
- 425 :
- オマエラ、
今夜ぐらいは仕事の事を忘れて肉でも食いにいけよ
- 426 :
- あぁそうか、そういえばそのままなデリゲートだったね
すっかり忘れてたww
- 427 :
- 直撮りで申し訳ないんですが
youとenemy のHP表示→それぞれ1〜9の値を引くの処理をどちらかのhpが0になるまで続けるように組んだつもりなんですが、whileより上の部分と下の部分しか反映されませんでした
どうしたら上手く処理出来るでしょうか
https://i.imgur.com/HbKFSfr.jpg
- 428 :
- >>427
>= 0
- 429 :
- >>428
なるほど、確かにこれじゃあ条件が「hpが0以下の時」になっちゃってますね 助かりましたありがとうございます!
- 430 :
- わろた
- 431 :
- 微笑ましさで、ね。
- 432 :
- >>428
=いらないんじゃないか
>>427
while (you > 0&& enemy > 0){
もしくは
while (true) {
(処理)
if (you<=0||enemy<=0) break;
}
- 433 :
- >>432
両方hpが無くならないと終わらなかったので後者を使わせて貰いました
参考になります!
- 434 :
- スクレイピングで、xpathや属性から要素を特定取得できると思いますが、逆に属性を取得することって、できるのでしょうか?
@class=取りたい属性←この値です
- 435 :
- パーサーなに使ってるか知らんけど
xpath指定で値とれるなら属性指定すればとれるでしょう
- 436 :
- ロケーションステップの末端に
/@取りたい属性
をつければ取れるだろう
あまりこのスレとは関係ないけど
- 437 :
- >>435
>>436
その属性を取りたいんですよ。
- 438 :
- だからぁ
/@class
だっつうの
- 439 :
- 見直すと436の説明が悪かった
- 440 :
- 属性 "名"がほしいのか
属性 "値"が欲しいのかがわからないよな
- 441 :
- 要素の属性を全部取得する
https://hokaccha.hatenablog.com/entry/20130819/1376895914
要素の属性を全部取得したいんだけど、 jQuery ではできないっぽい。
DOMの element.attributes を使えばいける
- 442 :
- >>440
属性の値がほしいんですね、名前はtagNameでとれるので
- 443 :
- id="→sample←"
webページ上の値じゃなくて、→←で囲ったsampleという結果がほしいんです。
- 444 :
- >>345 と >>434は同じ人か?
seleniumの話なら
webDriver.Url = @"https://www.seleniumhq.org/";
IWebElement element = webDriver.FindElement(By.Id("promo"));
element.FindElement(By.XPath("a")).GetAttribute("id");
- 445 :
- >>444
ありがとうございます。試してみます。
- 446 :
- C♯勉強したんだけどネットに参考になるサイトないですか?
VBAはこれで勉強してネットで使いながらそこそこは出来るようにはなりました。何かを作りながら取り敢えず基礎的仕組みを理解出来ればと思ってます。
https://for-guests.com/excel-vba-6006/
- 447 :
- >>446
↓とりあえずはここかな
https://dobon.net/
- 448 :
- いやいや未確認飛行だろう
- 449 :
- >>444
無事に目的を果たせました!
感謝です。
- 450 :
- PC上からC#で制御できる汎用IO製品って安いのないんかな?
Raspberry PiについてるGPIOみたいなのが欲しいんだけど
- 451 :
- デバドラの認証コストだけでも結構なお金がかかるからなぁ
- 452 :
- Arduinoがいいよ
- 453 :
- 超面白い
https://goo.gl/k4ehdm
- 454 :
- >>450
あんまり安くもないがこんなのとか
http://akizukidenshi.com/catalog/g/gK-01977/
このICの本来の用途はGPIOじゃないが、GPIOとしても使えたはず。
でも8本 + αしかないし使い方に癖があった気がする。
- 455 :
- むしろラズパイやらArduinoとシリアル通信させてそちらのgpioに何か繋ぐ方が、安心安全いざショートしちゃったとかのアクシデントの時にも安く済むよ。
- 456 :
- >>454
それシリアル
USBパラレル変換モジュールの方では?
- 457 :
- Attiny85のV-USBで遊んでるarduino互換
完成品にDigisparkってのがあるけど尼とかで数百円
https://www.amazon.co.jp/dp/B0154PL3QA/
- 458 :
- >>456
だから
>このICの本来の用途はGPIOじゃないが、GPIOとしても使えたはず。
って前置きしてるでしょ。
確認してみたけど、ちょっと変則的だけど一応使えるよやっぱり
パラレルの方(FT245)のICもGPIOとして使えるが(こっちも本来はそういう用途じゃない。ちなみにこっちは使用経験あり)
こっちの方がちょっとだけ高価でGPIOとして使えるピン数も少ない
http://akizukidenshi.com/catalog/g/gK-01799/
- 459 :
- >>454
取説見るとデジタルI/Oは5本みたいだが。
- 460 :
- AWK
- 461 :
- >>459
スレ違いだけど、このドキュメントのP3に書いてある特殊機能があるんよ
http://www.ftdichip.com/Support/Documents/AppNotes/AN_232R-01_Bit_Bang_Mode_Available_For_FT232R_and_Ft245R.pdf
最低8本は使える
残りのプラスアルファーがどういう風に使えるかは、たぶんドライバーのAPI
アプリケーションノートに書いてあると思うが、さすがに面倒だから読んでない
- 462 :
- FTDIのはドライバ必須だし
HIDとかで繋がるやつ揃えた方が楽だよ
- 463 :
- HIDというか標準クラスね
例えばArduino Leonardo相当であれば何にでも化けられる
- 464 :
- HIDって、出力ディバイスにも使えたっけ?
- 465 :
- digisparkというのを使ってたけどHIDデバイスに見えて入出力OK
昔は300円以下で送料無料で中国から買えたんだけど値上がりしちゃった
- 466 :
- C♯でMySQLを操作したいのですが楽に扱えるライブラリはありますか?
EntityFrameworkを使いたいのですがイマイチ接続できないので
一応昔にSQL書いて操作するパターンも作ったことありますが出来ればせっかくなのでやり取り楽な風にできればと思ってます
- 467 :
- LinqConnect
- 468 :
- Dapper
- 469 :
- ありがとうございます
Dapperの存在忘れてましたこちら使い方少し調べてみます
LinqConnectも調べましたが環境整えるところからなので余裕ができたらこちらも調べてみます
- 470 :
- >>464
昔からあるUSB-IOもHIDだよ
- 471 :
- 教えてください
Power1とPower2はxのn乗を求める関数だそうなのですが
なぜPower2がxのn乗になるのかさっぱり分かりません
しかもPower2の方がPower1よりも効率がいいらしいです
よろしくお願いします
double Power1(double x, uint n)
{
double power = 1;
while (n > 0)
{
power = power * x;
n = n - 1;
}
return power;
}
double Power2(double x, uint n)
{
double power = 1;
while (n > 0)
{
if (n % 2 == 1) power = power * x;
x = x * x;
n = n / 2;
}
return power;
}
- 472 :
- double power = 1.0;
の方が効率がいいぞ
- 473 :
- >>471
高校数学やん
x^(a +b) = x^a + x^b
x^(a * b) = (x^a)^b
- 474 :
- >>471
これでわかるか?
x^n = {
nが2で割り切れるとき x^(n/2) * x^(n/2)
割り切れないとき x^((n-1)/2) * x^((n-1)/2)
}
- 475 :
- すまん訂正
割り切れないとき、はこれにxを掛けてくれ
- 476 :
- >>473
ん゛?
× x^(a +b) = x^a + x^b
〇 x^(a +b) = x^a * x^b
- 477 :
- >>472
ありがとうございます
定数だけの四則演算やキャストはコンパイルの時点で行われるから
効率に影響は無いと習ったのですがこの場合は違うのですね
キャストがコンパイル時と実行時のどちらで行われるかを判断する
簡単な方法があれば教えてほしいです
>>473 >>476
ありがとうございます
指数法則が関係あるのですね
これをヒントにもう一度考えてみます
>>474-475
ありがとうございます
教えてもらったことをヒントに再帰を使ってxのn乗を作ってみたのですが
この関数はあってますか?
でも、やっぱりなぜPower2がxのn乗になるのかよく分かりませんでした
double Power3(double x, uint n)
{
if (n == 0) return 1;
else if (n % 2 == 0) return Power3(x, n / 2) * Power3(x, n / 2);
else return Power3(x, (n - 1) / 2) * Power3(x, (n - 1) / 2) * x;
}
- 478 :
- >>477
こうじゃない?
いい加減に書いたから間違ってたらごめん
double Power(double x, uint n)
{
if (x == 0) return 0;
if (n == 0) return 1;
if (n == 1) return x;
return n % 2 == 0 ? Power(x * x, n / 2) : Power(x * x, n / 2) * x;
}
要するに、
x^(a + 1) = x^a * x
x^(2 * a) = (x * x)^a
- 479 :
- >>478
ありがとうございます
そのPowerを再帰を使わずに書くと>>471のPower2になるということですか?
なんだか分かりそうな気がしてきたのでその方向でもう一度考えてみます!
- 480 :
- あー直接関係ないけど、0の0乗って1でいいんだな
- 481 :
- お陰様で>>471について理解できたと思います
どうもありがとうございました!
>>480
言われてみると、>>471のPower1やPower2では0の0乗が1になりますが
>>478のPowerだと0の0乗が0になりますね
調べてみたらWikipediaに「0の0乗」というページがあって
確かに0の0乗を1と考えることが多いと書いてありましたが
それ以外の考え方もあるみたいです
- 482 :
- 0乗が1以外になる考え方なんてあるんだ
単位元の1に何も掛けないんだから常に1だと思ってた
- 483 :
- 高速冪乗法でググれって感じだ
- 484 :
- >>471の件ではどうもありがとうございました
もう一つ質問させてください
以下のPopulation1とPopulation2は同じ結果になるそうです
Population1は>>471のPower2によく似てるので
これは指数計算の変形だと思うのですが、
Population2でも同じ結果になるのが理解できません
何度もすみませんがよろしくお願いします
uint Population1(uint n)
{
uint population = 0;
while (n > 0)
{
if (n % 2 == 1) population = population + 1;
n = n / 2;
}
return population;
}
uint Population2(uint n)
{
uint population = 0;
while (n > 0)
{
population = population + 1;
n = n & n - 1;
}
return population;
}
- 485 :
- >>482
確かにWikipediaによれば
半群Sが単位元1をもつならSの元aの0乗は1になるので
Sが零元0ももつなら0の0乗は1になるそうです・・・なんのこっちゃw
>>483
ありがとうございます
Power2はちゃんとした名前のついたアルゴリズムだったんですね
この分だとPopulation2にも名前がついてそうですが
それらしい情報を見つけることができなかったので
もしご存知だったら教えてもらえると嬉しいです
- 486 :
- >>484
面白いねw
要は1が立ってるビットの数を数えてるわけだと思うけど、
Population2の方は
>n = n & n - 1;
これやると1が立ってる最下位ビットが消えるんだなw
名前は知らないごめんね
- 487 :
- >>486
ありがとうございます
ビット演算については分かってるつもりだったのに全然でした・・・
ヒントを貰って下のようなプログラムを試してみたら
確かに最下位ビットが順に消えていって感動です
uint n = 4649;
while (n > 0)
{
Console.WriteLine(Convert.ToString(n, 2));
n = n & n - 1;
}
【実行結果】
1001000101001
1001000101000
1001000100000
1001000000000
1000000000000
でも結局n = n & n - 1;で最下位ビットが消える理由が
理解できていないのでもう少し考えてきます
- 488 :
- >>487
デクリメントした時、
(1) ボローが発生しなくなる桁(つまり、最下位の1の桁)はデクリメントの前は1、後は0
(2) その下位の桁はデクリメントの前は0、後は1
(3) 上位の桁の値は変わらない
なんだから、前後の値の論理積は必ず最下位の1まで0になる
- 489 :
- >>488
とてもわかり易い説明ありがとうございます!お陰様で理解できました
実はこの説明を読むまでn & n - 1は(n & n) - 1という意味だと思ってて、
それならn - 1と同じじゃないのかと思いながらも
トンチンカンなことを言ってしまうのが怖くて黙ってたのですが、
こんなことなら変なプライドは捨ててさっさと疑問をぶつければよかったです
この問題を考えていて、少しビット演算に慣れてきた気がします
使い道があるかどうかは分かりませんが、
n = n & ~(n - 1);だと逆に最下位ビット以外を消すことができるんですね
とにかく、どうもありがとうございました
- 490 :
- 今更ですがPopulationってビットの人口ってことだったんですね・・・
Wikipediaにもページがバッチリありました
https://en.wikipedia.org/wiki/Population_count
- 491 :
- すいません
Pawar はx^nですか
- 492 :
- C#で予め用意されているクラス(Mathなど)のソースコードを見ることは可能ですか?
勉強がてら、どんな風に書かれているのか見てみたいのですが・・・
- 493 :
- >>492
ここにある
ちなみにMathは大部分が直接CLRに組み込まれていてC++で実装されているからあまり参考にはならんぞ
https://github.com/dotnet/corefx
- 494 :
- そっち?
- 495 :
- さすがに今更 Reference Sources は時代遅れだろ
Coreの方がコンパクトに纏まっててわかりやすいし、コピペしても捕まらないし
- 496 :
- 他人の書いたライブラリとか使おうと思っても仕様書もどう読めばいいかあまりわからなくて
いつも他人様の書いたコード見てやっとなんとなく使い方理解できてるんですが
サラサラかける人はどういう見かたしてるんですか?サンプル見てメソッド見ればもうわかるのですか?
- 497 :
- >>496
ソースのメソッド見て中身理解するのは仕様書読むよりも難しくないか
メジャーなライブラリなら例を書いているサンプルがネット上にいっぱいあるし
そうでなくてもある程度自分で試しながら理解したらいいと思うが
- 498 :
- >>496
サンプル見ればだいたい分かるよ
お前も新しいフリーソフトとかWebサービスとか使うときマニュアル見なくてもだいたい分かるだろ?
それでお前の母ちゃんや友人に何で分かるのか聞かれて何て答える?
それと同じことで、経験を積むとパターンやライブラリの作者の考えが読めるようになってくる
- 499 :
- 簡単だよ
こういう処理がしたいならメソッドにこういう文字列が含まれてるはずだよな
インテリセンスカチャカチャほらみろ有ったぞ
次は引数をドキュメントコメントで調べて入力
コンパイルエラー消えたよしこれでオッケー
ビルドして起動したら…はい動いたおわり
だいたいこんな感じ
今はライブラリも開発環境も優秀すぎて楽だよほんと
- 500 :
- 右クリックして定義見ればよくね?
- 501 :
- LINQ使った最近のデザパタ紹介しているサイトや書籍ってある?
どこもなんか古いコードで
- 502 :
- >>501
誰も使ってネーからって気づけw
- 503 :
- >>501
linqの古いコードって、例えばどんなん?ラムダ使ってない奴のことかな?
- 504 :
- >>503
日本語
- 505 :
- 性懲りもなくよう相手にするなあこのクサレ脳みそども
- 506 :
- 他のスレでデザパタと略す奴は例外なくクソって言う風潮があるから
その略称は使わないほうがいいw
- 507 :
- LinqというかDBアクセス系のパターンの事ならリポジトリパターンやイベントソーシング・CQRSあたりかな
MSの黒本 C#実践開発手法 はどうだろう
あとRxも押さえとけば
- 508 :
- 名前付きパイプでプロセス間通信するとき、できるだけ遅延を小さくするためにすべきこと、したほうがいいことがありますか?
- 509 :
- ポータブルなASP.NET実行環境はありますか?
勝手にソフトインストール出来ない環境で使いたい為、Tomcatのように、設定ファイルで設定してexe起動するだけのタイプを探しています。
- 510 :
- >>509
.NET CoreとASP.NET Core
SCDでデプロイして内蔵サーバーのKestelで動かす
CoreはMVC系なので509が知っているASP.NETとは別物かもしれないが
- 511 :
- formが3つがあってそれぞれ仮にa,b,cとして、a,b,cの中にコンボボックスがいくつかあってaのコンボボックスの一つにエクセルをdbで読み取って?コンボボックスに値を入れました。
以降もコンボボックスに入れてくんですけど、違いがブック名とシート名でコードをまとめたい時はどこにどのように書けばいいですか?
今はform aのloadに一つ書いてます。
- 512 :
- class Configurations { 各コンボボックスに入れるべき値をそれぞれプロパティとして定義 }
interface IConfigurationsSource { Configurations GetConfigurations(); }
class ExcelConfigurationsSource : IConfigurationsSource {
private readonly string book;
private readonly string sheet;
public ConfigurationsSource(string book, string sheet) { this.book = book; this.sheet = sheet; }
public Configurations GetConfigurations() { return Excelシートから読み取ってConfigurationsに詰めて返す(book, sheet); }
}
こういうのを作って使い回す
- 513 :
- クラスを継承して機能を共通化するのとインターフェースで共通化するのと何が違いますか?
- 514 :
- いろいろなレベルでの回答があるが
インターフェースはMIX可能
継承の濫用は保守困難になりがち
インターフェース意識した方が設計的にスマートな事が多い
c#8で事情は大きく変わるが
- 515 :
- クラス継承は切り離せないが、インターフェースなら切り離せる。
- 516 :
- >>493
即レス感謝です
勉強になります
ありがとうございました
- 517 :
- え、8ってどうなるん・・・
- 518 :
- そらもうアレよ
- 519 :
- おジャ魔女どれみc#
- 520 :
- >>512
レベルが高過ぎてさっぱりです。
これはクラス追加してクラスに書く感じですかね?
クラス=VBのモジュールって感じでいいんですかね?
- 521 :
- >>514
> c#8で事情は大きく変わるが
C#8ではnull非許容が標準になるという噂は聞いたことがあるのですが、
この話は検索してみてもなんのことを仰っているのか分かりませんでした
とても興味があるので、ぜひ詳しく教えていただけないでしょうか
- 522 :
- >>521
インターフェースのデフォルト実装が導入されることかな。
.NET ランタイムにも手が入るそうな。
- 523 :
- >>522
レスありがとうございます!
ただこれだけを聞くとC#8でインターフェースの価値が更に上がるように思うのですが、
>>514さんはインターフェースの価値を説かれた上で
「c#8で事情は大きく変わる」と仰っていているので、他の機能に拡充が図られるなどで
インターフェースの価値が相対的に下がると仰っしゃりたいように感じました
実際にはそういうわけではないのでしょうか?
いずれにしても、インターフェースのデフォルト実装は便利そうで楽しみです
あと、それほどいろいろと手を入れるなら、
IList<T>が共変なIReadOnlyList<out T>と反変なIWriteOnlyList<in T>を
継承するようにするとか、そういう変更もあると嬉しいな〜と素人ながら思ってみたりw
- 524 :
- めっちゃ詳しいw
- 525 :
- >>523
IWritableListとIReadableListみたいな名前ならともかく、
それじゃわざわざOnlyって強調した単語使ってる意味がなくなるから悪手だろ
- 526 :
- >>525
既にList<>はIReadOnlyList<>を実装してるんだから今更だろ。
IList<>がIReadOnlyList<>を継承できない理由は、インターフェイスメンバの明示的実装を壊すから
IList<>に宣言されてたメンバのうちIReadOnlyList<>と被るものを全部削除したとしたら、IList<>のメンバを明示的実装している既存のクラスが全滅する
- 527 :
- 誤解を与えてすまん
c#8でインターフェースのデフォルト実装がサポートされるので価値は高まるという認識でok
null不許容も含めて大きく変わるねえ
- 528 :
- null非許容を乱暴に説明すると
参照型の変数にnullが入らないのがデフォになる。よって多くのシナリオでnull落ちになるケースが激減する。基本的にプログラミングが楽になる。
変数にnull許可する場合には明示的に宣言が必要になる。
既存のソースに対しては破壊的変更になるからコンパイルオプションとかになるんじゃないかな。
- 529 :
- OOP的にも綺麗でテーブルが正規化されてればnull非許容は受け入れられるかもね
業務システムではあまり役に立たなそうだ
- 530 :
- >よって多くのシナリオでnull落ちになるケースが激減する。基本的にプログラミングが楽になる。
岩永氏の例の記事にもそう書いてあるが、何度考えてもこれは逆だと思うなw
いわゆる「例外を握りつぶす」筋悪コードと同じ弊害をもたらすだけだろう
- 531 :
- 凄まじい列数でほとんどがnullのテーブル
あれをなんとかしないとアプリケーションからnullを排除することは難しい
インフラの問題だからホスト言語のちょっとした改善でどうにかなるものじゃない
- 532 :
- 最近の言語がそういう流れだからだろうね
DB絡みに外部結合やORM、既存ライブラリやサービスがある以上、null考慮は回避できないだろうから使い分けになるだろうね
nullまみれのテーブルも いまだにみかけるし
新規コードでサクサク組んでいくには便利やと思う
- 533 :
- >>525
レスありがとうございます
確かに、ReadOnlyという言葉がIReadOnlyList<>を継承するものにかかっていると考えると
IList<>がIReadOnlyList<>を継承するのは妙な感じですね
ただ現実として、>>526でも指摘していただいているようにList<>はIReadOnlyList<>を
実装していますので、ReadOnlyという言葉はあくまでIReadOnlyList<>自身にかかっていると
とらえてしまってもいいのかなと考えています
その現状の言葉遣いが間違っているのだから直すべきだというご主張なら、
実現可能性は私には難しくて分かりませんが、とても興味深いご意見だと思います
>>526
レスありがとうございます
書いていただいた文章を読むと、インターフェースは継承元のインターフェースと
同じ名前のメソッドを持てない、もしくはインターフェースの明示的実装に悪影響があると
考えていらっしゃるように見受けられたのですが、この部分がよく理解できなかったので
申し訳ないのですが詳しくご説明していただけるとありがたいです
>>527-528
レスありがとうございます
私の方こそ、変な深読みをしてしまい失礼しました
私は初学者なので機能の増強は単純に楽しみなのですが、
既存のソースを多くお持ちの方にとっては大幅な変更はいいことばかりでもないのですね
>>528-531
興味深いお話をどうもありがとうございます
自分からnull非許容の話を出しておいて恥ずかしいのですが、
実はこれが具体的にどういうものなのかほとんど理解できていないのです
var a = new string[1]; は許されるのか?とか、許されるならそれは
var a = new string[1] { string.Empty }; と同じ意味なのか?とか、
もしそれが正しいなら、クラス毎に Empty 的なものを用意しないといけないのか?とか
疑問は膨らむばかりです
- 534 :
- シンプルなコードで良い疑問やなあ
実際導入されたら混乱しそう…
右辺のArrayがnullを許さないからコンパイラに怒られそう
初期値入れたらいけそう
もし仮にstringの規定値がemptyになる仕様になれば初期化無しでもコンパイルとおるかも
c#7系以前と同じ挙動にするなら
var a = new string[1]?;
という記述になるはず
List系使うから配列を生で使う機会は減ったけどね
- 535 :
- 恐ろしい子!
- 536 :
- C#の話じゃないかもしれませんが、
LAN上の他のPCと通信するにはTCPorUDPしかないですかね?
ポート開けようとすると管理者のパスワード要求されるので
そういうのに影響されない方法があれば教えてください
サーバー上にファイル作って共有しようかとも思ったのですが
ロックとか速度とかちょっと使いにくいので
- 537 :
- インターネットに出れるんならAWSでSQSかKinesisでも使えば
- 538 :
- >>536
RAWなら好きなもの送れるでしょ
- 539 :
- ネットワークプログラミングの定石学びたいっす
- 540 :
- レイヤー無視なら
Multi-object Multi-lingual Document Intermediary の仕様書でも
- 541 :
- >>536
TCPやUDPじゃないと関所を通れないからなぁ
- 542 :
- ポート開けたくないな、名前付きパイプのRemotingは?
sambaのポートが開いてりゃ疎通できた気がする。
- 543 :
- ないな→ないなら
- 544 :
- >>536
> ポート開けようとすると管理者のパスワード要求されるので
要するになんか管理者に知られずき通信したいんだろ
悪事に加担する気はない
- 545 :
- アホか
くだらないことを書き込む前に少しは推敲しろ
- 546 :
- >>544
aho
- 547 :
- ありがとうございます
まずは名前付きパイプを調べてみます
- 548 :
- バイブにたかしとかりょうとか名前付けて愛用してんのかなぁ…
- 549 :
- >>534
レスありがとうございます
>右辺のArrayがnullを許さないからコンパイラに怒られそう
>初期値入れたらいけそう
確かにそんな気がしますね
でもそうなると大きな配列とは相性が悪そう・・・
>もし仮にstringの規定値がemptyになる仕様になれば初期化無しでもコンパイルとおるかも
それが一番わかりやすそうですね
ただ、stringはともかくStringBuilderの規定値とかどうすればいいのかさっぱり見当がつきません
>c#7系以前と同じ挙動にするなら
>var a = new string[1]?;
>という記述になるはず
?の位置は[1]の前ですか?
まあ書き方はともかく、もしvar a = new StringBuilder[100];とすると
自動的に100個のStringBuilderのインスタンスが作られるなら、
そのような動作を望まなければ配列の要素の型はnull許容にしたほうが良さそうですね
そうすると、例えばジェネリック型を使うときにはstringのような型とStringBuilderのような型の
区別をつけたくなることもありそうですし、ジェネリック型制約に新しく
where T : immutable(intやstringは許すけどStringBuilderは許さない)が
追加されたり・・・とか妄想してみましたw
- 550 :
- プログラム素人で恐縮ですが、for文のスコープの中に変数を宣言するとメモリの無駄使いになるでしょうか?
for(;;) int hoge =1;
のような書き方です
for文に入る前に宣言した方が作法的に良いのであればそうしたいと思い
- 551 :
- コンパイラが最適化するのじゃないか?
初心者は、そんな事を考えずに、なるべく狭いスコープで宣言した方が良い。
処理に、10秒以上掛かるのなら、その時に考えても良いけど
「Effective 何々」などの本を読むと、書いてあるかも知れないけど
- 552 :
- >>550
C系の言語では基本的に一箇所で宣言された変数はメソッド全体で一つしか作られない
C#の場合はクロージャが絡んだりすると変わってくるけど、基本的にはそういう思想で設計されてる
気にせず必要最小限のスコープで宣言せよ
- 553 :
- >>545-546
そんなレスしかできないからお前は🙅なんだよ w
- 554 :
- >>550
IL見ればあなたの悩みは全て解決しますよ
- 555 :
- あーでも>>550みたいな書き方すると突っ返されるメーカーあるよな。
無駄な作業させてるって自覚無いんだろうかなぁ
- 556 :
- >>550みたいな書き方してるコードってたいてい他の部分もクッソ汚いから、とりあえず突き返すのはわりと賢明なやり方
- 557 :
- スコープ毎にスタック操作なんかしないし、汚くてもオプティマイズされたら面影も無いし、イジメでしか無い罠
- 558 :
- >>549
このレスからにじみ出る頭のよさ
- 559 :
- var すら毛嫌いされちゃうとこなのでコードレビューなんかやったらストレスで禿げるわ
- 560 :
- それぞれのコーディング規約に従えばいいんじゃないですか
- 561 :
- >>555
さすがに>>550のコードは例としてはあれだが
C#でforの中でしか使わん変数をforの外で定義しろと?
どんなメーカーだよ。つかメーカーってなんのメーカーだよ
- 562 :
- C#8のデフォルトインターフェースメソッドって、
インターフェースでほぼコーディングを終わらせてしまうことも可能、
って解釈で良いのかな。
- 563 :
- クエリとlinqとlinqToXmlの違いがなにかよくわからないです
これらはなんですか
クエリはfromやselectとか思ってたのですが
"from a 〜 select a"も "XXXXXX.Select(〜)" の両方ともクエリ?
linqの中にクエリがある感じですか?
用語の違いを知りたいです
- 564 :
- >>561
C組込上がりが閑職で社内システムを任されるとありそう
関数の先頭で宣言しろ宣言
- 565 :
- >>563
メソッド式とクエリ式でググれ
- 566 :
- NumericUpDownで、ホイール下回転で値をUpさせる方法ないですか?
- 567 :
- >>562
ライブラリ実装者が破壊的変更の影響を最小化
細かいパフォーマンスを最適化
するためのものなので乱用しないで
拡張やダイヤモンド継承による名前の重複など問題はまだ残ってる
- 568 :
- >>553
管理者のパスワードって、単なるスーパーユーザーのパスワードのことだろきっと
- 569 :
- だったらなんなんだよ
- 570 :
- 久しぶりにまたC#勉強してみようかと思ってるんだけど
最近の動向ってどうなの?雑誌でもあまり見かけなくなったけど
- 571 :
- さあ、プログラミングの雑誌読んでる奴は最近少ないでしょ
プログラミング情報は基本ネットだからな
- 572 :
- >>570
マイクロソフトはAndroidのアプリC#で作る環境起こしたり結構力入れてる
- 573 :
- >>572
へえ〜そうなんだ
金のにおいプンプンするね
- 574 :
- そういえばWindowsフォンとかいうのもあったね
- 575 :
- >>572
iOSもな
- 576 :
- 雑誌とか書籍とか、本屋の棚を見てると勢力図が判るね。
Python強い。
- 577 :
- MVC使ってるんですが、アルゴリズムをSQLに書くのは邪道でしょうか?
Modelを用意している時点でC♯でアルゴリズムを書くのが正攻法なのかなという気がして
でもクエリにある程度書いた方がパフォーマンスは良さそうで悩んでいます
- 578 :
- >>566
NumericUpDownの派生コントロールを作ってOnMouseWheelを書き換える
方法 : 既存の Windows フォーム コントロールから継承する
https://docs.microsoft.com/ja-jp/dotnet/framework/winforms/controls/how-to-inherit-from-existing-windows-forms-controls
コード例
public class NumericUpDownEX : NumericUpDown
{
protected override void OnMouseWheel(MouseEventArgs e)
{
if (null == e) return;
decimal m = this.Value;
int a = e.Delta > 0 ? -1 : 1;
m += a * this.Increment;
m = m > this.Maximum ? this.Maximum : m;
m = m < this.Minimum ? this.Minimum : m;
this.Value = m;
}
}
- 579 :
- どうでもいいことだけどEventArgsがnullで渡ってくるケースってあるの?
- 580 :
- >>577
邪道です
ビジネスロジックがSQLを侵食すると保守性が下がりスパゲティクエリが量産されます
結果的にパフォーマンスも劣悪なものとなるでしょう
- 581 :
- そのSQLはどこに書かれているのだね
- 582 :
- SQLはクエリ管理クラスでC♯で管理してます
ストアドで書かれてたらC♯がどうこういう話では無いですね
つかストアドは世間様の開発では一般的なのでしょうか
改修に弱そうなイメージがありシステム構成の検討任されたら自分なら選択しなさそうですけど
- 583 :
- ビジネスロジックをストアドに集めるってのは
見たことあるなぁ。
既存言語はFEP構築だけに使う。
どちらかに徹底してりゃ良いんじゃね。鼻ホジ
- 584 :
- >>583
システムのリプレイスとデータベースのリプレイスのどちらが多いかだよな
後者でストアド依存はRると思う
- 585 :
- DBのバージョンアップじゃなくてリプレイスで
システムをリプレイスしない案件なんてほぼ考えられん
- 586 :
- 可能な限り全部SQLでいいよ
多くの場合SQLの方が圧倒的に簡潔だしテストも容易だし
ストアドは管理が面倒だし見通しも悪いからソースに書きたいが
- 587 :
- SQLに書いてもいいけどシステムが死ぬまで面倒を見て、他のメンテナーに迷惑をかけないでくださいね
- 588 :
- データベースにSQLite使ってるんだけど、データ量が増えたらSELECTがクッソ重くて無反応になる
無料でもっとまともなDBってないかな?
- 589 :
- そもそもインデックスとか
ちゃんと使ってるのかね
- 590 :
- もちろん
- 591 :
- PostgreSQLだな
- 592 :
- C#から使うならSQLServerでしょ
- 593 :
- どちらも無料なの?
- 594 :
- >>579
nullで渡すと
- 595 :
- 標準ライブラリのことでは?
- 596 :
- プライベートの開発ではpostgresql一択
- 597 :
- >>588
データ量がどのくらい増えたとかテーブルのスキーマ構成とかSELECT文みてみないとなんとも言えんな
DBMS変えたら劇的に変わるもんでもないし
- 598 :
- >>596
売るアプリだから無料のがよい
>>597
すまんすまん
indexの順番変えたらかなり改善した
複合indexを先に設定して、その後単一index作ってた
これを入れ替えた感じ
- 599 :
- 無料ならSQLServerはかなり制限がある
PostgreSQLは完全に無料で、性能・機能とも圧倒的に上
SQL ServerはWin上でGUIでお手軽に運用できるしMS製品で完結するのでドカタには愛されてる
- 600 :
- 俺はデータをカテゴリに分けてそれぞれに専用のテーブルを用意して振り分けて高速化したことある
- 601 :
- PostgreとMySQL比べるとどんな感じ?
- 602 :
- >>599
かなりって例えば?
ストアドも使えるしDBサイズも10GBまで使えるし基本問題ないっしょ。サイズ超えそうになったらバックアップDBとしてアーカイブすりゃいいしね。C#ならSQLServerがいいよ
- 603 :
- 俺もSQLServer使ってたけど10GB制限がキツイし全てのレコードを読めないと不都合だから別のDB探してたけどMySQL使おうかと思ってたところだった
- 604 :
- MySQLは共通テーブル式が使えなくて捨てた
- 605 :
- >>601
最近はPostgreSQLも盛り上がってるね
PostgreSQLは機能が非常に豊富で極めて柔軟、非定形データだろうが地理空間情報だろうが何でも扱える
ライセンスもMySQL(GPL)より緩い
- 606 :
- >>599
まじか
postgreに変えようかな
>>602
10GBならかなり余裕あるね
ならSQLServerも良いかなあ
MySQLはWebアプリではよく使ってるけど
そもそもわかってないことがあるんだけど、SQLってSQLサーバーで動いてるわけじゃん?
SQLite以外はWinFormアプリで作ったアプリだけで動かないの?
SQLアプリみたいなのが生成されるの?
- 607 :
- マシンにDBサーバーをたてるんだろ
- 608 :
- >>604-605
なるほどありがとう
それならせっかくだしそっちにしてみようかな
SQLServerはEntityFramework簡単に使えたけどもPostgreSQLもライブラリとか使いやすいのかな?
MySQLは接続文字列がおかしいのかテーブル指定がおかしいのかイマイチ上手く動かせなかった
- 609 :
- ASP.NET Core MVCはオワコンになって今後はASP.NET Core Razorが主流になっていく感じですか?
- 610 :
- >>609
お前なんか勘違いしてんぞ
- 611 :
- 今は各言語ごとにフルスタックのフレームワークがあるけど無駄に見える
どれか一個がセンターにあって後は各言語対応のAPI提供というパターンにならないのか
- 612 :
- 少なくとも.NETはASP.NET Coreが統一フレームワーク
- 613 :
- まさに.NETのことだね
- 614 :
- 各言語ごとにフルスタックフレームあるけど
シェア3位のdjangoすら5%以下らしい
それ以下のASP.Net coreの存在意義がかなり薄いと思うけどないといけないものなのか
- 615 :
- 現実
https://hotframeworks.com
- 616 :
- Coreは存在すらしていないっぽいな
- 617 :
- 検索でClassic ASP.NET/MVC/Coreは区別がつかないから混ざってるんだろ
- 618 :
- Coreじゃなくても.NETなら多言語対応だし
- 619 :
- >>616
StackOverflowのデータ見てみろよ
- 620 :
- なんかSQLiteがおっせーって書いた者だけど、他のサーバー型SQLよりぶっ飛びで速いんだな
このまま使い続けるか
- 621 :
- >>620
速度求めるならメモリ使えば?
DBのinoutは別スレッドでコントロール
- 622 :
- 使ったことないからよく知らんけどローカルファイルへのアクセスだからレイテンシが小さいとか?
- 623 :
- javaに比べると圧倒的に仕事が少ないC#ですがjavaの有償化で仕事は増えるでしょうか
- 624 :
- レガシーJavaをすぐさまC#に移植するってのは現実的じゃない
レガシーの面倒を見るためにとりあえず金を払ってライセンスを買うしかない
ライセンス買ったならじゃあいいかとなってJavaを引き続き使っていくことになる
- 625 :
- Java厨ザマアw
- 626 :
- でもC#は無料なの?
いいえ、有償です
- 627 :
- 大人しくオラクルのケツ舐めて1CPUあたり25ドル払っとけって
- 628 :
- 2ドルだろ
- 629 :
- application/jsonを使ったRPCの実装方法でスタンダードなやり方ってありますか?
ぐぐってもREST APIの実装方法ばっかり出てくるんですが…
- 630 :
- >>629
.netならWCFかWEB API
REST APIは主流だが
規模的に保守が辛くなるなら
gRPC gatewayも良いと思う
- 631 :
- >>609
MVCのVの部分がRazorエンジンになっただけやで。
- 632 :
- >>621
アプリ起動時とかにSQLからメモリテーブルにコピーして、追加更新削除があれば別スレッドでinoutする感じ?
- 633 :
- プログラミング初心者なんですが、Randomオブジェクトの扱われ方がよく分かりません
なぜ別にクラスを作らなくてもインスタンスを生成出来るのでしょうか
- 634 :
- >>633
「なぜ class Random { ... } とクラスを定義しなくても new Random() と書けるのか?」
という質問なら、「Random クラスは最初から定義されてるから」が答えになると思います
質問の意図が違うなら、「XXXと書くのが正しいと思うが、実際にはYYYと書くのはなぜか?」
というように具体的なコードを交えてもう一度質問してもらえませんか?
- 635 :
- >>634
それで合ってます 返答どうもです
- 636 :
- usingで指定されて無いと幾ら最初から有っても使えないけどな。
- 637 :
- そう言う意味では、最初からusingでネームスペースが指定されているって言わないと正しくない。
- 638 :
- JSFみたいな使いやすいフレームワークねえかなぁ
C#は言語そのもののセンスは良いけどエコシステムがショボいよな
- 639 :
- >>636
namespace省略せずに書けば使えるぞ
- 640 :
- >>634みたいにも?
- 641 :
- >>640
書けないけど「使える」
>>636
> usingで指定されて無いと幾ら最初から有っても使えないけどな。
自分の書き込みぐらい覚えとけ
- 642 :
- 偶にこういうコード見かけるんだけど、コーディング規約に全部書けとかあるのかな?
using System.IO;
略
System.IO.File.ReadAllBytes(hoge);
- 643 :
- 自分が作っていないクラスを使用するのに必要なのはアセンブリ/COMの参照設定。
(基本的なアセンブリは最初から設定されてる)
usingするかはどうかは別の話。
参照していないのにusingだけ書いてももちろん使えない。
- 644 :
- >>642
そのスコープのFileクラスの定義が重複している場合
曖昧さを解消するために名前空間を全て書く必要がある
普通は標準ライブラリと名前が衝突する事態の方を避けるだろうけど
- 645 :
- >>642
そんな不合理な規約はないと信じたいねw
あえてフルネームで書くことを肯定できる(少なくとも否定的に思わない)ケースは
そのソースファイルでその名前空間の要素そ参照するのが1、2か所しかない場合ぐらいかなあ
意見は分かれるかもしれんが、バッティングを避ける目的ならエイリアスを使うのが普通でしょう
using IO = System.IO;
みたいに
- 646 :
- >>645
> そのソースファイルでその名前空間の要素そ参照するのが1、2か所しかない場合ぐらいかなあ
それならusingも書かないだろ、バカかよ
- 647 :
- 何言ってるのか意味わからないねw
- 648 :
- その名前空間を使うのがここだけだと思ってフルで書いたが
やっぱり他でも使ったのでusing追加した
元の箇所は直していない
まあ、そんな感じじゃないかと
- 649 :
- >>634 に不適切なコードを書いたために混乱を招いてしまいました
また、 >>643 で適切な補足をしていただいていますが、
初めからこのような補足が必要ないようにできているだけでも
混乱は避けられたかもしれません。大変失礼しました
- 650 :
- 同じ名前のクラスがあるんだよw
だからフルネームで書かないと怒られるんだw
- 651 :
- >>650
あるあるw
バッティングすると悪夢なのなw
曲線をPathって名前にしてファイルパスもPathって名前にして
usingを呼んじゃってからエラーが出たぜハイ直せってやられると最悪
せめて改名してからusing呼べやクソがって思うんだが
馬鹿な奴に限ってバッティングさせるし作業手順も考えない
しかもそれでコミットしてくる
- 652 :
- []で読み込むDLLの意味がよくわからない
どこで呼んでもいいみたいだけど、あれってどういう仕組みなの?
- 653 :
- ランタイムがLoadLibraryなりで動的にロードしてよろしくやってるだけやで
ネイティブ側を書いたことないとイメージしづらいのかもしらんが
- 654 :
- >>651
バッティングどうこうよりもファイル操作と図形操作を同じファイル内に実装してる時点で最悪だね
誰が悪いかというとそんな設計書を書いたバカが最悪だ
- 655 :
- アホかな?
- 656 :
- >>654
いや、別だよ
でもたまたま引っ張ってきたusingにPathが入っててバッティングしちゃったんだ
.netframeworkにはじめから入ってるPathも入ってかなり手強かったよ
- 657 :
- いやいや、それは例えが悪いだけで、マイクロソフト様ですら同じ名前のクラス名付けてて、たまにどっちだボケって聞いて来るからなぁ
- 658 :
- >>638
JSFときたかwww
具体的に何が足りないと?
- 659 :
- >>658
足りないってほどじゃないんだけどねー
直感的に挙動を理解しやすいJSFと比べてこっちはちょっと推測しにくい感じ
これを変えたいなら多分こうだろってのが閃きにくい
ドキュメントみれば解決するけど見ないでなんとなくで解決したいんだよね
- 660 :
- >>659
具体的に
- 661 :
- >>657
Managed DirectXは酷かった
嫌がらせレベル
- 662 :
- blockingcollectionを使ってキューを作ろうと思ってます
そのキューの中にデータを取り出すのではなく、データがあるかないかを確認したいのだけども
それってどうやって実現できるでしょうか?
- 663 :
- >>662
できない
BlockingCollection.GetEnumeratorで取得した列挙子は既にコレクションから削除された要素を返す可能性があるから、要素の存在確認には使用できない
それが必要なら普通のQueueをロックして使おう
BlockingCollectionはProducer-Consumerパターンを実装するための特殊なコレクションで、取得と消費は基本的に分離不可能な操作として扱う
- 664 :
- なぜキューを使わず違うものでキューみたいなものを作るのか?
- 665 :
- 【毒素ためる、制汗″】 Ban、Ag、 8×4が <乳癌> <鼻炎> <ワキガ> の原因になっている!?
http://rosie.2ch.sc/test/read.cgi/liveplus/1531621398/l50
くさいくさい
- 666 :
- >>662
Count
- 667 :
- >>662
Any()はだめ?
- 668 :
- >>633
ランダム、つまり白い悪魔と異名を取ったモビルスーツの事だ
常識なので覚えるように
- 669 :
- >>633
ランダム、つまり疑似乱数を生成するクラスだ
疑似乱数は自前で作るのも簡単だから適当にに作ってみるのも一興だな
- 670 :
- >>667
食べるが側が自分だけじゃないなら>>663の言うととおりだめなんでしょう
その場合もコレクションに出し入れがあったことを検出する簡単な方法があれば
スキャンしている間に出し入れが行われなくなるまでリトライすることで実現できそうだけど、
そういう簡単な方法はないっぽい。
もっとも、仮に実現できたところで排他制御できないなら検査の後の状態は保証できないわけで、
どんだけ意味があるのか疑問ではある
- 671 :
- >>663
>>666
>>667
レスくれた方ありがとう
やりたいこととしてはcountとpeekを駆使することでなんとか実現できそうだという結論になりました
キューに対してpeekすると、じゃあ今度はいつ削除するの?とかなりそうだけどもpeekでなんとかします
- 672 :
- この本読み込めば中級者って本ないん?
独習C#新版と
実戦で役立つc#プログラミング
あたりですか?
- 673 :
- BlockingCollectionはコレクションの要素が取れるまでブロックし続けるから、peekとか削除とか考えずに済むから楽なのにな
まあ>>670の通り他と連動してコレクションにとどめておく必要があるんだろうけどさ
- 674 :
- >>672
プログラムは本を読んだから中級者みたいな世界じゃないと思う
年間に1000行程度のアプリを10本ぐらい作って3年ぐらいしたら中級かなって思う
- 675 :
- コピペを繰り返していたら3年やろうが10年やろうが初心者のままだぞ気をつけろ
- 676 :
- いや、今ならVRエロゲ一本作れば中級者
- 677 :
- むやみに書くより良書を読んだほうがいい
読んだ内容を実践して身につける
- 678 :
- 俺は〜の作り方的な
作り進めていく形式のがオススメ
- 679 :
- 〜の作り方的な本は、言語が分かってない段階だと本当に手順を追うだけになってしまって何一つ頭に残らないからお勧めできない
まあ頭使わずに何かやってる気にはなれるから勉強が苦手でどうしてもモチベーションが続かない人にはいいのかもね
- 680 :
- おらにも良書おしえい
- 681 :
- >>674
結構ハードルが高いですね…
- 682 :
- 一番いいのは作りたいアプリがあってそれを作る。アプリ作りを通して色々考えることがでてきだろう。最初は一人よがりなプログラムになるかもしれんがそれが第一歩だな。
- 683 :
- >>672
MSの公式ドキュメント
- 684 :
- ここまで0冊
- 685 :
- >>672
まずは独習でいいと思う
これで基本機能が理解できたら
Linqや非同期、マルチコア専門の教本もあるから気になったら読めばいい
これらは重要だし独習が終わればよく理解できると思う
実践で役立つ〜はちょっとわからない
- 686 :
- 書籍なんて最近手出してないけどeffectiveって無いの?
C+やstlでは結構お世話になったけど
- 687 :
- >>674
10万行の間違いだろ。
- 688 :
- >>686
昔からあるぞ。
最近のだと、More Effective C# 6.0/7.0が既に出てて、Effective C# 6.0/7.0ももうすぐ出る予定。
- 689 :
- >>672
独習C#新版が終わったらレポートよろしくね
- 690 :
- dotnet aspnet-codegeneratorってwindowsでしかうごかんの?
- 691 :
- >>688
やっぱあるよね
感覚的にはeffectiveに書いてある内容がとりあえず理解できて実践しだしたら中級者なイメージ
上級者っていうとmvpクラスと同等の知識レベルとかになるのかなぁ
mvpもいろいろあって基準としては曖昧かもしれんが
- 692 :
- 1000行なんて時には1日で書く程度のアプリ10本作ったところで…
だからって10万行のアプリなんて、それほんとに10万行必要だったの?プラグイン1個居れたら数万行不要になるんじゃない?って気もする
そもそも行数で語る時点でおかしい訳だけど
プログラム未経験は別として経験者なら一言語の中級者になるのに3年もかけてたら上級者になる頃にはその言語消えてんじゃね?って思う
- 693 :
- 一時的にスリープのように任意のスレッドの処理を停止させて
別スレッドがある処理をしたら停止スレッドが動き始めるような形を作りたいです
waitforsingleobject以外に実現方法ありますか
- 694 :
- >>693
なぜそんなことしたいの?
- 695 :
- >>694
Aスレッド、Bスレッドがあって
Aスレッドはたまっているリクエストを非同期で投げ続けています
リクエストは一つずつ送らないといけない制約があるため
その応答が来るまでAスレッドを停止させたいです
応答というのがBスレッドの処理です
- 696 :
- >>695
普通にasync/awaitじゃだめなの?
- 697 :
- 待機するAスレッドがUIスレッドとかいう状態でもなければ
それこそ関数直接コールでも良さそうなもんだけど
- 698 :
- じゃあセマホ使えよ。
- 699 :
- A案:リクエストのキューを投げる側ではなく受ける側に持たせる
B案:リクエストを投げるメソッドのデリゲートのキューをリクエストを受ける側に持たせる
- 700 :
- 会社クラスを作りインナークラスで部署クラスを作ったのですが、インナークラスの使い方として間違っていないでしょうか
なんかMS意図と違う使い方をしてる気がしておりまして
- 701 :
- 間違いです
- 702 :
- IT業界は部署ごと社外に出向させられるとか日常茶飯事ですからね。
- 703 :
- listviewを使って画像をドラッグした位置に挿入できるようなものを作りましたが、サムネイル表示(ViewプロパティをView.LargeIconに設定)だと移動後に一番後ろに来てしまいます
、どうすれば自由に画像を入れ替えれるのでしょうか?
- 704 :
- >>692
>1000行なんて時には1日で書く程度のアプリ10本作ったところで…
これも内容によるけどな
10本作る間に誰に見られても恥ずかしくないコードが書けるようになれば…
- 705 :
- >>704
内容にもよるんだろうけれど、きちんと動くプログラムを10本完成させたっていうのであれば、それなりに評価してよいと思う。
- 706 :
- 仕事の山越えたからと社内文章読んでたら我が社のコーディング規約にvarとLINQ禁止とデカデカと書いてあってて笑ったwww
- 707 :
- 就職ガチャ失敗おめでとうございます
- 708 :
- >>706
LINQ禁止ってラムダ式使ったらだめってこと?
- 709 :
- varだめってリテラシーならラムダもダメだろうね
- 710 :
- 短いコードのアプリでもちゃんと一般人の使用に耐えうるようになってるならいいだろう
機能的には十分でも無秩序にボタンが並んでるアプリは見ててつらい
- 711 :
- コントロールそこそこおいたまともなアプリなら1000行じゃおさまらんやろ
- 712 :
- >>706
C#の公式コーディング規約に真っ向から対立www
- 713 :
- ラムダ式禁止とかC#使う価値半減だな
- 714 :
- λ縛りはBダッシュ縛りマリオぐらいキツイ
- 715 :
- h
- 716 :
- varってスコープが決まってたりよく使うもんだと思ってるんだけど
違うん?
あとコンパイル時に推論されるから実行速度には影響ないって考えていいの?
- 717 :
- >>716
明示的に型を示しても実行速度は変わりません
- 718 :
- >>717
ありがとうございます
- 719 :
- var myTable = new Dictionary<string, string>();
myTable.Add("Hokkaido", "Sapporo");
myTable.Add("Iwate", "Morioka");
myTable.Add("Miyagi", "Sendai");
//*1
var b = myTable.ContainsKey("Iwate");
if (b == true)
{
//*2
var s = myTable["Iwate"];
MessageBox.Show(s);
}
Dictionaryから特定の要素を探して、あれば表示するんですが
この*1 *2 をLINQを使って1行にしたいんですが、どうすればいいですか?
- 720 :
- 継承について
スーパークラスAに始まり
class B : A
class C : B
class D : C
となった場合、
Dクラス内でAやBのクラスのフィールドやメソッドをを使いたくなった場合には
それぞれをインスタンス化をすれば使えると思いますが、
継承されていない場合はどうすれば良いのですか?
例えば、
スーパークラスX
class Y : X
class Z : Y
とい場合、class Aのメソッドやフィールドを使いたくなったときは、
どうやってクラスAを持ってくるのでしょうか?
継承をしなくても、そのクラスのメソッドやフィールドを持ってくる方法はありますか?
- 721 :
- コンポジション
ZのフィールドやプロパティにAをもたせるだけ
- 722 :
- >>719
LINQ は集合に対して使うものなので、その例だと必要ない
if (myTable.TryGetValue("Iwate", out var s))
{
MessageBox.Show(s);
}
対象が複数あるならこう
var list = new[] { "Hokkaido", "Iwate", "Tokyo" };
var q = list
.Where(x=> myTable.ContainsKey(x))
.Select(x=> myTable[x]);
foreach (var s2 in q)
{
MessageBox.Show(s2);
}
- 723 :
- >>719
LINQ全く関係ないけど比較的新しいC#ならこう書ける
if (myTable.TryGetValue("Iwate", out var s)) MessageBox.Show(s);
どうしても単一ステートメントにしたいなら
myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
(myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す
- 724 :
- >>696
awaitでは上手く実現できなさそうな構造でした
https://msdn.microsoft.com/ja-jp/library/system.threading.monitor(v=vs.110).aspx
monitorクラスを使って実現できそうだなとなりました
ただこれのシグナルを投げるpulseとpulseallの違いがよくわかりません
pulseは変数で渡したオブジェクトのスレッドを、pulseallは渡すオブジェクトとか関係なくwaitで止まってるすべてのスレッドを動かす?
- 725 :
- >>724
>awaitでは上手く実現できなさそうな構造
なぜ?
- 726 :
- >>724
つまりProducer-Consumerだろ?
まさにBlockingCollectionのユースケース
- 727 :
- Aそのものは非同期(バックグラウンド)で動く必要があるとして
そもそもBが非同期で動く必要性がわからん
かならず応答きてから次をよぶんだろ?
- 728 :
- むしろ一番の疑問は、
>リクエストは一つずつ送らないといけない制約がある
のであれば、キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
なぜリクエストを送る側に受ける側の都合に合わせる負担をさせるのか、
ってことだと思うけど、まあ話が曖昧過ぎてよくわからんね。
- 729 :
- >>722
自分のコードだと野暮ったくて古い感じがしたんですが
out var なるものを使ってすっきりさせるんですね
>>723
最近、ラムダ式やLINQを始めたんで↓みたいにメソッドチェーンで繋げたかったんですが
これだとやりすぎなんですねw
>> myTable.TryGetValue("Iwate", out var s) ? MessageBox.Show(s) : DialogResult.None; とか
>> (myTable.TryGetValue("Iwate", out var s) ? (Action<string>)(x => MessageBox.Show(x)) : (Action<string>)(_ => {}))();
>> とか書けなくはないけど俺ならこんなの書いてきやがったらコードレビューで突き返す
ありがとうございました
- 730 :
- 見やすくしたり行数減らす為の機能なのに一文に無理やり詰めたら見づらいだろうしな
LINQ使わなくても
;で終わらせた文を一列にずっと書き続けてたらなんだこいつってなるだろうし
- 731 :
- MQ使えよ
- 732 :
- varのメリットってなに?
- 733 :
- >>732
定期的にこのスレを荒らすメリットがある。
- 734 :
- 10年で1スレも消費できないムラダ厨がまた初心者スレで暴れてるのか。
- 735 :
- >>728
送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。
- 736 :
- >>735
意味わかんないよ
キューが満杯ならエンキューできないだけ。
そして、キューが満杯になるような事態が起こるかどうかは、キューを送る側受ける側
どちらが持つかという設計の問題とは何も関係がない。
送り側が持てばそんな事態は起こらない、などとはまったく言えない
- 737 :
- 共有メモリにFIFO作りたいのでサンプルコードください
- 738 :
- >>737
基本的にスレチだな
- 739 :
- >>737
マルチ乙
- 740 :
- バックグラウンドジョブをメモリに置いて管理するとクラッシュした時につらいのでやめてください
- 741 :
- >>736
少なくとも送る側が待てばたまらないし、待たすからには大元まで遡って待たせることが出来る。
受け側で貯めちゃうと、そんなコントロールすらできない。
- 742 :
- >>737
MemoryMappedFileクラスで共有メモリを作って、そこにリングバッファを作れば良い。
サンプルコード? と言う名の丸投げは知らんw
- 743 :
- >>742
ありがとうございます
- 744 :
- >>741
何を言ってんの。
ちゃんと自分の頭で考えて言ってる?
キューの容量が100だとする。
リクエストが100まで溜まってしまうかどうかは、キューをどちらが持つかと関係ないでしょ。
スループットはリクエストの処理能力で決まるんであって、キューをどっちが持つかで決まるんじゃない。
当たり前でしょ。
送る側が待てばたまらない?
それは受ける側がリクエスト拒否したらたまらないと言ってるのと同じ
君の世界じゃ、バケツリレーの余分なバケツの置き場所を送り元におくか送り先に置くかで
バケツの輸送能力(単位時間あたりの送れる水の量)が変わるの?
変わるわけがないでしょ
頼むよマジで
- 745 :
- >>721
ありがとうございます
すみません、コンポジションというのはどういう手法なのでしょうか?
調べてはみたのですが解説しているサイトが見つからなくて・・・
- 746 :
- >>745
クラスのインスタンスをメンバ変数などに設定して持つ
- 747 :
- 配置計画
GOFはそちらを優先して説明しているが
- 748 :
- 持つと待つ
混ざりすぎじゃねぇの?
待つって言いたいんだよね?
- 749 :
- きたです
https://i.imgur.com/F20EZn1.jpg
- 750 :
- >>748
>>744の文中の持つは持つで間違ってないと思う
- 751 :
- >>744
だから、貯め無い様にするには、送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話。
わかる?
通信のフローコントロールの話と同じなんだよ?
- 752 :
- >>751
まだ言ってるのか。
君の世界では
>送る側、更にそこに送る側、更に大元の送る行為を辞めされはいいって話
これが可能かどうかはリクエストのキューをどちらが持つかに依存するのか。
キューをリクエストの受け側が持ったらそれは出来ないのか。
意味が分からないよ
何が
>通信のフローコントロールの話と同じなんだよ?
だw
馬鹿過ぎて笑える
- 753 :
- よそでやってくんねーかなクソカス
- 754 :
- おまえ、目悪過ぎて呆れるわ。
持つなんて一言も言って無いだろw
待つだw マツ。
キューをどっちが持ってるかなんて話はしてない。
- 755 :
- アスペルガーの人はひとつのことしか同時にわからないから
二つ話題があることに気がつかない
その話題は持つであってるよ
- 756 :
- >>755
まあ普通は受け取る側に郵便受けが無いと受け取る人はいちいち局留めの郵便を受け取りに行かなきゃならないんだけど、まあ、それはどちらでも機能するからあんまり争点にはならないけどね。
- 757 :
- バケツリレーの喩えでもスループットは変わっちゃうんだよな。
受け側に送信側が送信する総量より大きいバッファを持てば、スループットは水の入ったバケツを運ぶ時間に依存するだけで済む。
キューがそれより遅ければバケツを引き渡すために時間が余計にかかるわけだから、スループットは落ちる。
送信側にキューを持ったところで、送信側は送信処理に対して同期的に処理しないだけで済むだけで、そのキューからの送出がどんどん遅れるだろう。受け取ってくれないなら。
- 758 :
- >>693,695「スレッドを協調して動かしたいです、制約あるんで」
凡人の回答「○○使えよ」
天才の回答「制約が悪い」
- 759 :
- c=(a*a+b*b)
c=System.Math.Sprt(c)
これでcの平方根を出そうとしたのですがSystem.MathにSprtの定義がありませんと出ます
sharedevelopを使っています
- 760 :
- SQRT
- 761 :
- エディタの不具合だろ
SharpDevelopなどという化石は今すぐアンインストールしてVSかVSCodeを使え
- 762 :
- 平方根の綴りが違う
- 763 :
- square rootだからねぇ
- 764 :
- ありがとうございます 解決しました
- 765 :
- スパート!
- 766 :
- >>754
もともと
>キューを持つべきなのはリクエストを送る側ではなく受ける側なんじゃないか、
にたいして
>送る側で待たないと仕事を溜め込んだ受け側が最悪死ぬか無視する様になるぞ。
ってレスしてるのが発端なんだが
どうでもいい良いしよそでやって欲しいけど
- 767 :
- 話題が一変してんのにわざわざ掘り返すなよw
言ってる事とやってる事が矛盾してんぞw
- 768 :
- レスバトルって奴だろ
最後に言及した方が勝ちなんだって
これ見るといつも思うが、こういう馬鹿には自分自身を見る自意識がないのかね
- 769 :
- たすけて!
Parallel.ForEachの中でデータグリッドの内容を更新してるんだけど
途中で爆発します
データグリッド全体に✕って出て非表示になる
データグリッドの更新処理はlockで囲ってても競合は起きちゃうものですか?
- 770 :
- まず原因を切り分けろ
Parallel.ForEachを外しても爆発するか確認するんだ
- 771 :
- >>770
パラレルの外出すと機能するけど
そうすると全処理終わってから一回しか更新されない…😌
- 772 :
- >>771
UIはUIスレッドからしか操作出来ない
Parallel.ForEachの処理は別スレッドで実行される
- 773 :
- >>771
Action<TLocal> localFinally の引数をとるオーバーロードを使ってみたらどうでしょう?
- 774 :
- >>768
君のレスを見るといつも思うが、こういう特徴のある口調のレスを繰り返す人には自分自身を見る自意識がないのかね
- 775 :
- invokeするか、ContextにPostするしか無いんじゃないかな
- 776 :
- >>774
>>774
- 777 :
- 爆発w
- 778 :
- >>772
>>773
>>775
Invokeでググりました
まさにこの疑問を解決するための機能でした
有難う御座います
- 779 :
- 私は >>773 ですが Invoke について自分があまり良く分かってない気がしてきたので
詳しい方がいらっしゃったら教えてください
UIスレッドで Parallel.ForEach を呼ぶとUIスレッドをつかんだまま並列処理が実行されて、
その並列処理のスレッドで Invoke を使うとデッドロックしてしまう気がするのですが
実際はそういうことはないのでしょうか?
- 780 :
- マルチスレッドにしてInvokeしまくると結局パフォーマンスがガタ落ちしたりするがな
- 781 :
- >>779 です
WPF で下のようなコードを実行してみたらやっぱりデッドロックしてしまいました
Invoke はそれなりに慎重に使わないといけないみたいです
void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Dispatcher.Invoke(() => { }));
MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
ちなみに Enumerable.Repeat(0, 2) の部分を変えると以下のような挙動でした
Enumerable.Repeat(0, 0) に変える → デッドロックしない
Enumerable.Repeat(0, 1) に変える → デッドロックする
new int[] { } に変える → デッドロックしない
new int[] { 0 } に変える → デッドロックしない
new int[] { 0, 0 } に変える → デッドロックする
- 782 :
- >>778
いいってことよ(´・ω・`)b
- 783 :
- >>779
並列処理はUIスレッドではないスレッドで行われるよ。
いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
UIスレッドを掴んだままの意味がわからんが、挙動が謎なら、ブレークポイントつけて実行して、どのスレッドが何をしてるかを把握してはいかがだろうか。
今どのスレッドを使ってるかは表示されてるから。
- 784 :
- WPFかあ
- 785 :
- Windows版VSCodeで、monoを構文解析用のコンパイラとして指定することってできないのかな?
Unityの.Net4.0用プロジェクトで、数ヶ月前までは、.Net3.5用のSystem.Data.DLLを読み込んでくれたのにさあ
VisualStudioを更新したら構文解析用のコンパイラが変わったのか、古い.net3.5用のDLLを読み込んでくれなくて赤波線だらけになっちゃったぜ
4.0用のDLLもあるわけだけど、それを入れるとUnityのmonoの方でなぜかエラーを起こすし・・・どうしたら良いものか・・・・
- 786 :
- >>783-784
レスありがとうございます
> いや、UIスレッドで行われるとは限らない、と言う言い方の方が正しいかな。
>>781 で new int[] { 0 } だとデッドロックしないあたり、まさにそんな感じですね
> WPFかあ
>>769 でデータグリッドと書かれていたので、
今の Windows フォームなら DataGrid ではなく DataGridView かなと思って
WPF の方で試してしまいました(汗
Windows フォームだと挙動が変わるならそれも知っておきたいので
今からそっちでも試してみます
- 787 :
- Windows フォームで試してみたのでご報告を。
以下のコードを実行してみた結果、やっぱりデッドロックしてしまいました
Enumerable.Repeat(0, 2) を変えたときの挙動も >>781 と同じでした
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Invoke(new Action(() => { })));
MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
- 788 :
- えーわからん…
ちなみにフォームですビューです
つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
それともThread生成してその中でParallelすれば良かったり…?これはすごい破綻してる気がしますが
uiスレッドから切り離した他スレッドから安全にuiを制御するなんて考えが可笑しいんでしょうか
- 789 :
- >>788
あくまで私一人の考えですが・・・
[1] Invoke を使うと >>779 に書いたような理由でデッドロックするので
Parallel.ForEach でUIスレッドを使いたいなら >>773 のようにすべき
[2] しかし、同じく >>779 に書いたように Parallel.ForEach はUIスレッドを
つかんだまま並列処理を行うのでデータグリッドの更新処理だけ
Parallel.ForEach から切り出してもほとんど同じなのでは?
(一応 localFinally 中も他のスレッドは動けるので
そこで更新処理を行う方がいい場合もあるかもしれない)
[3] 並列処理が必要なほど大きな処理を行うなら、
一度UIスレッドを手放す選択肢も考えてみては?
ただ、Invoke がダメだと考えている人間自体が私だけのような気もするので
他の方の意見も聞いてみたほうがいいと思います
あと、[3] に関しては場合によりけりだと思うので、
具体的な処理内容を教えていただければ私の考えをお伝えしたいと思います
- 790 :
- >>787
そのコードだと、button1_Click()がずっとUIスレッドを握ったまま。
だから、Parallelの別スレッドでInvoke()しようとしてもUIスレッドに遷移出来なくて固まる。
- 791 :
- 既に>>779に書いてあったね。その通り。
- 792 :
- >>790-791
レスありがとうございます
>>779 の考えで正しいのか不安だったのですがお陰様で自身が持てました
他に何かおかしなことを言ってしまっていたら教えていただけると嬉しいです
>>788
>>789 はレスとしてとっ散らかっている気がしてきたので一問一答で答えてみます
> つまりフォームアプリでParallel処理内でinvokeってそもそも悪手なんでしょうか
Parallel を UI スレッドで実行する場合は悪手というか、致命的だと思います
> それともThread生成してその中でParallelすれば良かったり…?これはすごい破綻してる気がしますが
それなら期待通りの動作にはなると思います。ただ、確かにあまりいい方法ではないと思います
> uiスレッドから切り離した他スレッドから安全にuiを制御するなんて考えが可笑しいんでしょうか
正しく Invoke を使えば問題ないと思います
しかし今回の件からもわかるように、Invoke を正しく使うのはなかなか難しいようです
- 793 :
- .Invokeではなく.BeginInvokeを使うのはどう?
- 794 :
- >>793
それって
> それともThread生成してその中でParallelすれば良かったり…?
よりも更にワチャワチャする気がするのですがどうなんでしょう?
ワチャワチャって具体的にどういうことなのか
説明を求められれば頑張ってみようと思いますが、
自分の考えがあっているかも、それをうまく説明できるかどうかも
自信がないので、詳しい方の意見を聞けると嬉しいです
- 795 :
- >>794
そんな難しい話じゃないっすよw
BeginInvokeは非同期に実行される、つまりキューにデリゲートを入れたらすぐに処理を返すので
Invokeのように自分で自分の終了を待機する状態に陥らない
- 796 :
- >>792
有難う御座います
これで行けたので実装試してみます
void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("このメッセージは必ず表示される");
Task.Factory.StartNew(() =>
{
Parallel.ForEach(Enumerable.Repeat(0, 2), i => Invoke(new Action(() => { })));
}
MessageBox.Show("デッドロックするとこのメッセージは表示されない");
}
- 797 :
- >>795
レスありがとうございます
おっしゃる通りBeginInvokeはキューにデリゲートを入れたらすぐに処理を返すので
次から次へとキューが入って大変なことになりそう・・・と思ったのですが、
そんなに心配することではないのでしょうか
>>796
それで一応動くと思いますが、Parallel.ForEach が終わる前に
二つ目の MessageBox.Show の行に移るので注意してください
・・・というか、localFinally を使ったり更新処理だけを切り出したりはダメっぽいですか?
ダメだと考えられた理由を教えていただければ何かアイディアを提供できるかもしれません
- 798 :
- >>797
データグリッドビューは進捗状況を見るために更新していて
1行1スレッドで処理されて処理後にどう処理されたかをリアルタイム表示してます
ダメではなく単純に自分が分かってないだけです
この処理ならlocalFinallyが最適かもです
深く調べてみます
- 799 :
- >>798
> データグリッドビューは進捗状況を見るために更新していて
> 1行1スレッドで処理されて処理後にどう処理されたかをリアルタイム表示してます
進捗状況の確認が必要なほど1行あたりの処理に時間がかかる理由は何でしょうか?
もしその理由が IO など、CPU 以外のところにあるのだとすれば、
Parallel.ForEach を使うこと自体を見直したほうがいいかもしれません
> この処理ならlocalFinallyが最適かもです
正直なところ、更新処理だけ切り出す方法よりも localFinally の方が
適切なケースはまれだと思います
ただ、localFinally の使い方がわかれば更新処理を Parallel.ForEach の外に
切り出す方法もわかると思うので、とりあえず調べてみて損はないと思います
- 800 :
- >>799
圧縮ファイルを解凍して中のファイルを加工して再び圧縮し直す
これで1タスクです
1ファイル200MBほどで100ファイル以上処理することが多いです
圧縮解凍、加工は外部ツールを使用しててProcessStartInfoで処理されます
- 801 :
- >>800
なるほど〜
CPU 処理も IO もあって微妙なところですね
ちなみにその外部ツールはマルチスレッドを使うオプションはないでしょうか?
(例えば 7-zip.exe だと -mmt がそれにあたります)
もし外部ツールがマルチスレッドに対応してるなら、
並列処理はそっちに任せてしまうというのはどうでしょう?
または、外部ツールではなく SharpCompress のようなライブラリを使うことができれば、
C# によるより細かい制御も可能になると思います
- 802 :
- 汎用的なものとは思えないし、動けばどうでもいいだろ
俺ならそういうのはいちいちGUI付けずにコンソールでやっちゃうな
- 803 :
- >>800
それともう一つ、外部ツールを呼び出すのにデフォルトの ParallelOptions で
Parallel.ForEach を呼び出すのはさすがにまずいと思います
ParallelOptions 自体に MaxDegreeOfParallelism というプロパティがありますし、
ParallelOptions の TaskScheduler プロパティに以下のような自前のスケジューラーを
設定すればより柔軟な並列処理を実現できると思います
同時実行の程度を制限するタスク スケジューラを作成する
https://msdn.microsoft.com/ja-jp/library/ee789351(v=vs.100).aspx
>>802
それは確かにw
完成したソフトによって得られる利益よりソフトを作るコストのほうが大きくなってしまったら
意味がないですからね
(ただしソフトによって得られる利益には開発者のスキルアップも含まれる・・・と言ってみたりw)
- 804 :
- >>801
7zip使ってます
スレチになるけど
mmtは一つの処理をマルチに実行するものではないでしょうか
圧縮形式は決まってなく複数あるので7zipを使用してます
zip rar lzh以外にも色々
- 805 :
- >>803
タスクスケジューラー調べてみます良さそうですね
i7使用しててMaxDegreeOfParallelismは常に8で実行してます
8スレッドで画面カッチカチで処理してます
暴力です
- 806 :
- >>804
> mmtは一つの処理をマルチに実行するものではないでしょうか
その通りです
したいことが「進捗状況を表示できるようにすること」と「並列化により処理時間を短縮すること」
だとすれば、それで問題ない(というかむしろその方が望ましい)の思うのですがいかがでしょうか?
- 807 :
- >>805
MaxDegreeOfParallelism を使ってらっしゃるなら
とりあえず致命的にまずいことはないと思います
ただ、CPU だけじゃなく、同時に8つのファイルの読み書きを
求められる HDD さんの気持ちも考えてあげて・・・w
- 808 :
- >>806
後続の加工処理もありエラー監視も含むので進捗知りたいです
- 809 :
- >>798
localFinallyよりasync/awaitの方が分かりやすいと思う。
private async void button1_Click( object sender, EventArgs e )
{
MessageBox.Show( "このメッセージは必ず表示される" );
await Task.Run( () =>
{
Parallel.ForEach( Enumerable.Repeat( 0, 2 ), i => Invoke( new Action( () => { } ) ) );
} );
MessageBox.Show( "デッドロックするとこのメッセージは表示されない" );
}
- 810 :
- makefile使えば?
数行のMakefile書いて make -j8 するだけだよ
- 811 :
- >>807
解答先は8GBのRamディスクです
メモリに物理ファイルおいてでここで加工して再圧縮してその後HDDに移動させてます
- 812 :
- >>808
Parallel.ForEach を使わなくてもそれはできると思うのですがいかがでしょうか?
>>809
確かにおっしゃる通りですね
後は好みの問題ですが、やはり私は1行ごとに Invoke するよりも
パフォーマンス的に有利な localFinally や更新処理の切り出しを推したいですw
>>811
なるほど!そうすれば外部ツールを使っても HDD へのアクセスだけ別に処理できますね
ただ、HDD へのアクセスを別にしようという意識をお持ちで、それだけのスキルもあるのなら、
外部ツールにこだわる必要はないのでは・・・という気もします
あと、メモリは HDD よりはずっと速いですが、CPU キャッシュとかの関係でやっぱり
8 個のファイルを同時に読み出すよりは1つずつの方が良いような気がします
- 813 :
- >>809 >>812
いや、でも進捗状況を表示するとなると結局どこかで await は使うことになりそうですね
ただ私としては >>800 のような処理なら Parallel.ForEach は必要ないと考えていて、
foreach (ファイルのループ)
{
foreach (進捗状況のループ)
{
await (進捗状況の更新待ち);
(進捗状況を画面に反映);
}
(1ファイルの完了を画面に反映);
}
のような感じで十分だと思うのですが、どんなもんでしょうか?
- 814 :
- そんな処理速度気にするなら複数PC用意できたりしないのかな?
たぶん内製ツールだと思うけど、そういうのって長期保守とかしないならシンプルでさくっとやれる方向を模索したほうがいい気が…
研究開発兼ねてとかだったらいいんだけど
- 815 :
- >>812
そうです、最も投げやすく勝手にマルチしてくれる便利なParallelさんって聞いて使ってるます
別の手段があればコレに拘ることはないと思ってます
>>813
cpuキャッシュとか考慮せずマルチ=高速って誤認識で走ってきて
その中で最適化してきたので
localfinally使用したときと
1ファイルの処理の差も検証してみたいと思います
>>814
ただの趣味なんですPC一台で
複雑でも効果があれば試したいと考えています
- 816 :
- ほな寝ます。詳しくありがとうございました!
もしかしたら明日もっとやべーかもです
- 817 :
- var block = new ActionBlock<ZipOpParam>(
async (param) => {
await ExecuteZipOpAsync(param);
InvokeUpdateUi(param);
},
new ExecutionDataflowBlockOptions {
MaxDegreeOfParallelism = 8
});
foreach(var p in zipOpParams)
block.Post(p);
block.Complete();
await block.Completion;
- 818 :
- >>815
> そうです、最も投げやすく勝手にマルチしてくれる便利なParallelさんって聞いて使ってるます
これは私も同じように認識しています
> cpuキャッシュとか考慮せずマルチ=高速って誤認識で走ってきて
これは場合によりけりだと思います
特に今回のように外部ツール側でマルチスレッドにできる場合はツールの呼び出し側では
余計なことをせず外部ツールに任せたほうが高速になる場合が多いと思います
>>817
C# で並列処理を行うならこれは一つの解決策になりそうですね
別の解決策として、新たに参照を追加する必要のない↓の方法とかどうでしょう?
var tasks = new List<Task>();
foreach (var param in zipOpParams)
{
if (tasks.Count == 8) tasks.Remove(await Task.WhenAny(tasks));
tasks.Add(ExecuteZipOpAsync(param).ContinueWith(
_ => InvokeUpdateUi(param),
TaskScheduler.FromCurrentSynchronizationContext()));
}
await Task.WhenAll(tasks);
- 819 :
- 違うexeキックすれば終わりなんやで?
- 820 :
- オブジェクト指向について勉強しようと思い、クラスを複数作って実行しようとしたら実行ボタンがプロセスにアタッチというよく分からない物に代わりビルドなども出来なくなってしまいました
どうしたら元に戻せるでしょうか
- 821 :
- 参考にした資料がそう(実行ボタンをプロセスにアタッチ)しろと書いているなら
その手法でトラブった時の解決法も資料に書いてあるのでは
提示されたくらいの情報でここで帰ってくる答えは
「ゴミは捨てて作り直せ」
「一旦オブジェクト指向についての記憶を消せ」
だと思う
- 822 :
- このように実行ボタンがアタッチ…となりビルドも行えなくなってしまっています…
プログラムは「確かな力が身に付くc#超入門」から取っていて特にプロセスにアタッチに関する記述も無いので恐らく設定どこか変に弄ってしまったのかと思うのですが…
https://i.imgur.com/QK8r2yI.jpg
- 823 :
- >>822
ソリューションエクスプローラーで当該プロジェクトを右クリック→スタートアッププロジェクトに設定(みたいなやつ)を選択
- 824 :
- >>822
言語じゃなくVisual Studioのスレで聞かないと
それはプロジェクトが読み込まれておらずソースだけ読み込まれている状態
- 825 :
- >>823
やってみたのですがそれらしき項目がありませんでした…
- 826 :
- >>824
なるほどありがとうございます vsのスレで聞いてきます
- 827 :
- revertしろや。意味もわからんだろうがな。
- 828 :
- >>827
じゃあなぜそれを言ったのでしょうか…
- 829 :
- ナチュラルマウンティング
- 830 :
- >>828
ググって勉強しろということだ
- 831 :
- もしかしてASP.NETってJavaみたいなリッチで無料の拡張フレームワーク無いの?
- 832 :
- >>831
?
ASP.NET自体が無料のフレームワークだろ
- 833 :
- きもは「リッチ」で「拡張」ってことだろ
つまりどんなものを指してるのか全く分からんがな
- 834 :
- Classic ASP.NETは拡張性とかガン無視でMSがデフォルトで提供するお仕着せのものだけ覚りゃ一通りできるっていうドカタ向けフレームワークだぞ
Springみたいなのがお好みならASP.NET Core使え
- 835 :
- >>834
Classic ASP.NETがどのバージョンを指してるか知らんが拡張性無視とか笑わせる
HTTPハンドラとかモジュールとか自作したらほぼすべてカスタムできたわけだが
- 836 :
- すれ違いで書き込んだ者ですが、こういう連続線をC♯を使って、方眼風の画面にクリックして一番近い座標点から始まり次のクリック座標点って感じで連続線を描きたいんですが、なんか参考になる本だとかサイトってありませんか?
https://i.imgur.com/Emj85bk.jpg
- 837 :
- >>836
Graphicsクラスを使って自分で線描画するのが手っ取り早いからこのあたりかな
https://dobon.net/vb/dotnet/graphics/drawrectangle.html
- 838 :
- >>837
そのページは閉じた図形だな。
>>836
同じdobonで
折れ線を描く(DrawLinesメソッド)
https://dobon.net/vb/dotnet/graphics/drawline.html#fold
- 839 :
- >>834
ASP.NET CoreってPrimeFacesのような無料で便利なライブラリあるの?
商用ならWijmoやTelerik色など々あるようだけど有料はちょっとね
拡張すりゃ出来るとかハンドラ書けばできるとかそんなのは当たり前の事だけど
そんな車輪の再発明に工数が出るわけがないし
- 840 :
- 無料ライブラリなんかnugetでなんぼでもインストールできるだろ
- 841 :
- >>840
具体的にはどのパッケージですか?
- 842 :
- >>839
ASP.NET CoreはMVCだからGUIは単なるHTML
ASP.NET Core関係なく普通にHTML/JS/CSSのライブラリを拾ってきて使えばよい
- 843 :
- ライブラリ不要レベルやん
マウス位置とライン引くだけだし
- 844 :
- PictureBoxがあればなんだってできるみたいな
- 845 :
- 文字の折返しさえできたら実はなんでもいい
- 846 :
- >>843
誰もライブラリ使えなんて言ってないだろ
- 847 :
- >>842
そういう使い方はNGですね
サーバーサイドレンダリングが基本のフレームワークとクライアントサイドのフレームワークは常識的に考えてインピーダンスミスマッチでしょう
(primefacesのように最初からセットで設計されてるならともかく)
それならまだaspnet coreはapiに徹してangularやreact使ったほうがマシです
- 848 :
- >>847
なんでクライアントフレームワークの話になるんだ?
AngularやReactのようなものに依存せず単独でページに組み込めるHTML/JS/CSSのコンポーネントなんか腐るほどあるだろ
- 849 :
- C#で、VPN経由でCiscoのL2スイッチにログインしてフォワーディングデータベースと各ポートのステータスを取得したいんですが、
簡単に解説しているサイトはないでしょうか?
クライアントを動かすPC - HUB - NATルーター - VPNルーター - ネット - VPNルーター - HUB - Ciscoルーター - 目当てのCisco L2スイッチ
ていう状態です。
- 850 :
- LinQの中身ってfor文ってホント?
- 851 :
- アイドルグループの中身は知りません
- 852 :
- LinQクラスの各メソッドの中身の味方教えてください
- 853 :
- >>852
github
- 854 :
- >>852
https://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs
- 855 :
- >>847
NGかどうかはお前の都合だがな
ASP.NETでもWebFormあたりは、サーバ側とクライアント側の統合を目指してたんだよ
クライアントスクリプト一切書かなくてもAJAXできるコントロールとかまであった
だが今の流れはサーバサイドはサーバサイド、クライアントはクライアントな流れ
クライアントはすきなライブラリ使え
>それならまだaspnet coreはapiに徹して
apiに徹するのと、html出力に徹するのとどれほどの違いがあると?
- 856 :
- >>848
ASP.NET Coreと相性いいのは無いね
- 857 :
- ASP.NETの問題というよりC#自体がwebのフレームワークと相性が悪いような…
おとなしくtypescript使ったほうが楽かなとは思う
- 858 :
- >>855
WebFormsの時からずっとだけど鯖で出力したhtmlやバックエンドの挙動を把握してJS書かないといけないからめんどくせえじゃん
なんのためにナマのhtmlを隠蔽したのかって話になる
htmlを隠蔽すると決めたなら徹底しなきゃならん
apiに徹すればクライアントはクライアントで綺麗に切れるからそんな煩わしさから開放される
- 859 :
- LinQ は、Rails のQuery object と同じだろ
where 何々
order by 何々
別々に書いた文字列を、1つのSQL 文にまとめて、DB に問い合わせする
- 860 :
- >>857
ちょっと何言ってるかわからない
- 861 :
- >>849
C#が扱うのはTCPあたりだけじゃないのか
そっから下はOSやら何やらの仕事だし上はCISCOのマニュアルなり読めとしか言えそうにない
- 862 :
- ソリューションエクスプローラーで.csファイルのなめえ変えてもデバッグできる?データ壊れない?
- 863 :
- >>862
gitというものがある
そいつを使えば自由自在に試し放題だ
- 864 :
- いやあああああああ
これ理解してないと動かなくなるやつうううう
https://i.imgur.com/3Mz1OsU.png
- 865 :
- こういうハッキングの匂いがするやつは回答しないほうがいい
- 866 :
- >>862
ソリューションエクスプローラー上での名前の変更は問題なく出来る
- 867 :
- git使わなくてもソリューションのフォルダごとコピーかzip圧縮でも十分だけど
- 868 :
- >>866
>>867
ごめん無事でした
なんかVSがクラス名と一致させようとするからダメかと思いました
ありがとうございます
- 869 :
- >>854
これ見てみます
ありがとうございます
- 870 :
- >>868
javaとは違うんだよ
- 871 :
- >>867
gitでもフォルダコピーでも、自由に試し放題なのは同じだが
gitだとフォルダコピーに該当する操作が一瞬なんだよね
フォルダコピーだとある程度大きいプロジェクトになるとプログレスバーを待たなきゃならん
- 872 :
- DataAnnotationsの属性の組み合わせを新しい属性として定義することはできますか?
例えばFooIdは20文字以下で"^[A-Z]{5}-\d+$"にマッチしなければなりません
StringLengthAttributeとRegularExpressionAttributeを組み合わせて
FooIdAttribute := StringLengthAttribute(20) and RegularExpressionAttribute(@"^[A-Z]{5}-\d+$")
といったニュアンスでFooIdAttributeを定義したいのですが方法を探してもまったく見つかりません
もちろんValidationAttributeを継承してFooIdAttributeを作るだけなら出来ました
しかしこの方法ではASP.NETのクライアント検証やEFのコードファーストがStringLengthAttributeとRegularExpressionAttributeを認識してくれません
すべてを諦めて
「モデルプロパティとしてFooIdを使う時はstring型でプロパティを定義してStringLength(20)とRegularExpressionAttribute(@"^[A-Z]{5}-\d+$")をコピペすること」
といった実装ルールを定めてDRY違反には目をつぶるしかないのでしょうか
- 873 :
- バリデーションに限った話ではなく属性のMixinができないのは言語仕様の欠陥
多重継承が可能なら悩むことなかったんだけど...
まあC# 9ではMixinがサポートされるらしいのでそれ以後は簡単になるだろう
それまでは諦めてコピペする以外ない
- 874 :
- パラメータだけconst stringにしとけ
- 875 :
- >>872
CustomValidationでいけそうな要件にみえるんだけど?
質問内容の理解が間違ってたらごめん
- 876 :
- >>875
ValidationAttributeはサーバーサイド検証はできるけどクライアントサイド検証やEFには効果がない(追加コードを書かなければ)
属性Mixin的なことができれば追加コードを何も書かずにそれらの収穫を得ることができたはずなんだ
- 877 :
- >>872
\d+にするからなんじゃないの?
\d{14}か、{,14}で解決するのでは?
- 878 :
- >>877
正規表現を変えても同じ
サーバーサイド検証だけが検証属性の役割じゃない
- 879 :
- 例がおかしいせいか正規表現で何とかしろって最初に見たとき思った
- 880 :
- TypeDescriptorで動的属性にしたけどダメだった
このFWカスタムしにくい
- 881 :
- VB6のプログラムをC♯で書き直しをやってるんですが、複数あるフォームで毎度使うグローバル変数や定数ってどうしたら良いですか?
- 882 :
- それらを管理する構造体かクラスを作るのが良いでしょう
ただ、作り始める前に現代風のプログラミングの仕組みを勉強したほうが良いんじゃないかな
変数のスコープの問題として解決しようとする時点で基礎が出来ていない気がしてしまう
- 883 :
- >>872
属性二つ付けとくのでダメなのか?
>>881.882
ベタに移植するならなるべく同じようにしとくってのも手だぞ
まあベタ移植ならVB.NETでもいいわけだが
- 884 :
- >>881
もう親フォームのpublicに置いちゃえば?
- 885 :
- Appに持たせる
- 886 :
- 親フォームにpublicに置くのがベターなのかね?楽でいいし。
- 887 :
- 普通は目的や用途に分けてベースクラスと機能クラスに分けて配置するだろ。
- 888 :
- 定数はクラスに持たせるべき
グローバル変数というものは存在しない
- 889 :
- public static read onlyをまとめたクラス1個作ればよくね?
- 890 :
- やっぱクラスか。
- 891 :
- 別に構造体でも良いのよ
- 892 :
- 標準モジュール→Public Shared Class
- 893 :
- >>881
そんなものは無くすように書き直すのがベストでしょう
どうしてもというのならProgramにでも置く。
お勧めはしないけど、using static使えばVB6っぽく書けると思うw
https://ufcpp.net/study/csharp/ap_ver6.html#using-static
- 894 :
- 例えば何度も登場するファイル名とかパス名とかって使う時はどのようにします?
- 895 :
- >>894
決まった値ならconst stringにしておけば間違う心配がない
- 896 :
- >>894
staticのメンバ変数
- 897 :
- >>894
そもそも何度も登場させない
クラスに集約する
- 898 :
- >>897
俺は何度も登場させた方がいい派
登場させないってことは定数であるにも関わらず変数に突っ込んで色んなとこ回して最後にそこに行き着く的なソースになんだろ?
定数なら検索したときに使用箇所がひと目でわかったほうがいいよ
- 899 :
- >>898
そうじゃない
同じファイルをあちこちで突っつき回す設計そのものに再考の余地があるということ
- 900 :
- クラス内で何度も参照する事はあるだろうが、複数のクラスに跨って同じ定数を参照するってのは、
それ、たまたま同じなだけだから、まとめるのは誤りだろ?
- 901 :
- 899に同意だな。おれがレビューしたら書き直させるわ。
- 902 :
- エクセルをデータベース接続して開いて閉じる。までは出来たのですがそこからシート2を選択して最終行まで読み込むにはどうしたら良いですか?
- 903 :
- まずVBAで書いて、意図どおりに動いたらそれを同じようにC#で書くだけ
VBAで動かないならスレ違い
- 904 :
- >>902
接続したならシート名をテーブル名としてSELECT使えば最終行まで取れるはず
- 905 :
- セレクトでググってみます!
- 906 :
- さっぱりわかりません。これをC♯でどうすればいいですか?
https://i.imgur.com/XlcEsOK.jpg
- 907 :
- 窓から投げ捨てろ
- 908 :
- コンボボックスのitem追加してるだけやん
- 909 :
- これ、出来上がるまでずっと聞きまくるわけかい?
- 910 :
- とりあえずガチでまったくわからないなら、Do Until とかIf Thenみたいな処理の流れに関するとこから、C#に翻訳してみれ。
- 911 :
- >>906
SharpDevelopで変換できたりせんか?
- 912 :
- >>911
VB.netならやったことある
VB6はできるんかな?
- 913 :
- >>908
コメントにも書いてあるなw
- 914 :
- >>912
VB6から直接はだめだろうな。VB.netを経由させて。
- 915 :
- 無事なんとか出来ました。
お騒がせしてすみません。
- 916 :
- VBを勉強しようかC#を勉強しようか迷ってるんですがVB(およびVBA)でできることはC#でもできると考えていいのでしょうか?
- 917 :
- >>916
そんなのお前が出来るか、出来ないかによる
- 918 :
- >>916
いやc#やればいいよ
- 919 :
- VBAで出来てC#で出来ないことはある
- 920 :
- unityでサポートされてるのがc#だった気がする
- 921 :
- >>916
VBextensionを取り込む事が出来る
コーディング量が少ない
単価が高い
VBを選ぶ理由はほぼ無しかと
- 922 :
- ありがとうございます
迷わずC#を勉強しようと思います
- 923 :
- RazorもC#
- 924 :
- 迷わずRよRば分かるさ
- 925 :
- VS2013 で Process で別コンソールアプリを実行するプログラムを作っています。
OutputDataReceivedイベントで随時標準出力を取得したいのですがうまくいきません。
同じくVS2013C#で作ったコンソールアプリでのConsole.WriteLineならうまくいくのですが
VC++6.0 で printf 出力だと、ある程度溜まったタイミングでそれまでの出力が一気に来ます。
printfでもリアルタイムで取得できるようにできないでしょうか。
- 926 :
- そりゃあ、ある程度溜まってから表示されるからじゃね?
- 927 :
- flushしろ
対象に手を入れられないなら無理
- 928 :
- つ setvbuf
- 929 :
- >>928
setvbuf でうまくできました!
ありがとうございました。
- 930 :
- resharper使ってる人感想教えて
勉強になるって書いてるブログもあったから
半額セール中に試してみようかなと
- 931 :
- ブログに書いてるんならそれを参考にすればいいじゃん
- 932 :
- resharper重いから嫌い
よく他の拡張と干渉して不具合起こすし、機能の頭数だけ多くて結局vsにデフォルトで搭載されてる機能と似たようなもの以外は滅多に使わなかった
vscodeが快適すぎて最近はC#もほとんどvscodeで書いてるわ
- 933 :
- 使用感産休ー
結局使わなくなっちゃうくらいもっさりは躊躇するな
俺のマシンそんな高性能じゃないし
- 934 :
- 先日のお騒がせものですが、シートの中身入れることはできたんですが、今度はシート名をコンボボックスに入れるのにこれだとシート名が名前順に入るんですがシート順に入れるにはどうしたらできますか?
https://i.imgur.com/LxYIiyg.jpg
- 935 :
- >>932
具体的にどこがcodeの方が良いんだ?
軽さ以外にある?
- 936 :
- >>934
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.combobox.sorted(v=vs.110).aspx
- 937 :2018/08/02
- >>935
フォントのレンダリングが美しくて見やすい
プラグインが豊富
一緒に他の言語のソースを編集する必要がある場合に完全にシームレスに行き来できる
プロジェクトファイルを直接テキストとして開ける(.NET Coreなら必須)
メガデモを語る fr-08
C++相談室 part136
ExcelVBAで勤務表を作ろう
ドルオタワイ、1からプログラミングを学びたい
Excel VBA 質問スレ Part64
BrainFuck Part.3 <[+-.,]>
C++でXML(主にxerces)やろう!
暇だから最強のメモ帳つくらね?【java】
【実験台】 Python 3.0 のお勉強 Part 1 【非互換】
Perlについての質問箱 64箱目
--------------------
【オトナの土ドラ】それぞれの断崖 part2【遠藤憲一・田中美里】
【ゾゾ】序序の帰命な望見35【同人】
☆【画像】7714
石井隆3/GONIN
暴力女の系譜 海未→果南→愛
【たまらぬ】ターザン山本!233【タカリ貴族】
谷川「これからトップとの差は何なのか感じろ」
〜ピアノ〜どれぐらいのレベルですか?
日経平均株価、コロナ問題何一つ解決してないのに、1204円高で終える【マジキチ】 [256556981]
【車田】聖闘士星矢 NEXT DIMENSION 冥王神話126
北陸新幹線敦賀以西ルートスレ★259
【62年月組】うさぎのメルヘン学園【月裏64】
阪神競馬 1回 4日目 2
クスクスと書くと金運・異性運が向上するスレ256
滋賀のたこ焼きを語ろう
カーリング娘。は正直やめてほしいと思う人→
☆☆柏レイソルスレッドPart1802☆☆
ガーベラ
天才・たけしの元気が出るテレビの思い出 [616817505]
モバ板●)過去スレ再生についての議論スレ [広域避難所]
TOP カテ一覧 スレ一覧 100〜終まで 2ch元 削除依頼