17/11/28 21:31:16.08 7U+HR4FY.net
(*゚∀゚)v2get!
3:デフォルトの名無しさん
17/11/28 21:33:19.34 1gCYrVqG.net
いちおつ
4:デフォルトの名無しさん
17/11/29 12:38:24.28 +8Yov6n2.net
調子にのって式形式の略記しまくったら=>まみれになったでござる
5:デフォルトの名無しさん
17/11/29 12:56:15.86 Z0yAcQLL.net
using dispose は便利な機能だが実装の闇が深くて台無し。魔剣ダイナシ。
6:デフォルトの名無しさん
17/11/29 12:57:31.62 D2tE8Z4y.net
とVB6おじさんが申しております
7:デフォルトの名無しさん
17/11/29 12:58:28.27 VYTpT9vM.net
>>5
で
8:デフォルトの名無しさん
17/11/29 13:06:25.32 VdtxEj+u.net
SQL鯖へのConnectionもUsingの中に入れちゃっていいのかな?
昔は最初にConnection開いて、ずっと開きっぱなしの中で処理して、最後にCloseすることが多かったけど
不安定な接続(スリープで回線断)やミラーリングサーバーを考慮すると、いちいちOpen/Closeしたほうがいい。
だけど、usingの中に入れることで、いちいちDisposeされたら
接続キャッシュが機能せずに体感速度が落ちる、って風になる?
9:デフォルトの名無しさん
17/11/29 13:44:13.05 oopkzTyn.net
接続管理はコネクションプーリングに任せてプログラム上は最短でOpen-Close
10:デフォルトの名無しさん
17/11/29 13:46:22.65 VYTpT9vM.net
>>8
SQL鯖でusing多用はいかん
try/finally使ってopen/closeしとけ
速度はopenしっぱなしとほぼ変わらん
11:デフォルトの名無しさん
17/11/29 13:57:37.88 rMr3voC1.net
>>8
それ別の人がアクセスしても大丈夫なの?
12:デフォルトの名無しさん
17/11/29 14:00:58.53 VYTpT9vM.net
>>11
キミ以外なら
13:デフォルトの名無しさん
17/11/29 15:09:14.71 TUoM6+wa.net
>>10
それdisposeと一緒やん。
ってか、disposeじゃん。
なにいってんの?
14:デフォルトの名無しさん
17/11/29 15:12:27.07 TUoM6+wa.net
>>13
disposeじゃねぇ。usingだわ。まちげーた
15:デフォルトの名無しさん
17/11/29 15:37:12.11 VYTpT9vM.net
>>13
disposeしてないよ
何言ってんの?
16:デフォルトの名無しさん
17/11/29 15:59:59.48 TUoM6+wa.net
>>15
やってることが、using使ったdisposeと等価なんだけど。
usingはtry/finalyの糖衣構文
(sql鯖のコネクションについては)closeとdisposeは等価
何か違いがあんの?
17:デフォルトの名無しさん
17/11/29 16:18:48.57 VdtxEj+u.net
var SqlConn = new System.Data.SqlClient.SqlConnection(xxxx);
という感じの宣言は try/finaly の外でやっておいて
open/close は try/finaly の中でやる
って意味で書いたと思ってたけど、そうだよね?
18:デフォルトの名無しさん
17/11/29 16:32:53.30 VYTpT9vM.net
>>16
msdnのSqlConnectionメソッドの
closeとdisposeの説明をちゃんと嫁
19:デフォルトの名無しさん
17/11/29 16:35:00.95 6MTOjDOv.net
インターフェースおじさんの話は聞かなくていい
20:デフォルトの名無しさん
17/11/29 16:42:07.66 VYTpT9vM.net
>>19
おじさん?
アフォな専門学校の生徒かと思ったわw
放置プレイしま~す
21:デフォルトの名無しさん
17/11/29 16:58:19.20 oopkzTyn.net
SqlConnectionメソッドってのはちょっと分からなかったけど
SqlConnection.Closeにはこう書かれてるな
> SqlConnection は、適用範囲外では閉
22:じられません。 > そのため、Close または Dispose を呼び出して、明示的に接続を閉じる必要があります。 > Close と Dispose は、機能的に同じです。 DisposeはComponent.Disposeに飛ばされたから そもそもSqlConnection.Disposeのページが存在しない
23:デフォルトの名無しさん
17/11/29 17:08:15.43 TUoM6+wa.net
>>18
msdnに機能的に等価って書いてあるんだけど、なに読めば良いの?
>>17
try/finalyの外で宣言した変数を使い回すってこと?
usingを抜けなければ、disposeは走らないから、一度開いた同一の接続を使い回すのであればusingの中で、接続(open)を複数回するのであれば、個別の変数を切り直した方が良いと思うよ?
前提が違ってたらごめんね。
24:デフォルトの名無しさん
17/11/29 17:14:21.18 rMr3voC1.net
アプリは生きててDBだけリセットかけたらもう一回接続しないと駄目?
なんかアクセス毎に開いて閉じて入れておかないと面倒な感じじゃね?
25:デフォルトの名無しさん
17/11/29 17:26:22.28 +8Yov6n2.net
最近はMicrosoftDocsに飛ばされるね、MSDNもあるけど英語がメイン
URLリンク(docs.microsoft.com)
ついこないだIDisposable実装したけど、これまたクイックアクションで親切すぎるコメントつきテンプレが流し込まれる
26:デフォルトの名無しさん
17/11/29 17:58:34.09 Ypog5BGe.net
iPhoneのキーボードのこれURLリンク(i.imgur.com)はプログラム書くときのダブルクォーテーションとは違うんだな。ideoneでなぜかエラーが出たので気づいた。
URLリンク(i.imgur.com)これだと使える。
英字キーボードのやつ “””””””””””
ABCのほう """""""""""
27:デフォルトの名無しさん
17/11/29 18:05:53.37 Ypog5BGe.net
長押ししたらこんなん出てきたわ
URLリンク(i.imgur.com)
28:デフォルトの名無しさん
17/11/29 18:05:59.40 gShtlFNM.net
>>20
間違いは認めてから逃げようね
29:デフォルトの名無しさん
17/11/29 18:10:42.78 AGN3a9rD.net
>>25
C#と関係無いけど、この業界にはよくある事
U+301CとU+FF5Eの違いとかな
30:デフォルトの名無しさん
17/11/29 18:27:36.17 NSRWkE4O.net
ソフトウェアキーボードでコード書くとか苦行過ぎるw
31:デフォルトの名無しさん
17/11/29 18:28:48.92 Ypog5BGe.net
ideoneでちょっとした動作を試したりするときだけだな
32:デフォルトの名無しさん
17/11/29 19:16:09.42 Xxg0LpBt.net
明日屁湧いてるなw
33:デフォルトの名無しさん
17/11/29 20:50:56.63 MDGjrLn/.net
C#ってmalloc・calloc・realloc的なかんすえはありますか?
全部自動?
34:デフォルトの名無しさん
17/11/29 20:53:11.64 bodUKsOx.net
>>32
基本的には出来ないし自動だけどunsafeコンテクスト内なら可能
URLリンク(ufcpp.net)
35:デフォルトの名無しさん
17/11/29 21:01:58.77 MDGjrLn/.net
>>33
バッファの確保できるんだ
ありがとう
36:デフォルトの名無しさん
17/11/29 21:17:10.66 W1Zobeto.net
いやmalloc的なのは普通の配列のnewかMarshal.AllocHGlobalだろ
37:デフォルトの名無しさん
17/11/29 21:41:03.14 GyXUhAN/.net
ただいま勉強中なのですが、↓のようなコードの設計、ネーミングその他は適切でしょうか?
身近に現役プログラマーの方がいないためいろいろと聞けないのが現状です。
なんでも指摘してくださると助かります。
public static class DirectoryUtils{
public static string ErrorMessage { get; private set; } = null;
public static bool DeleteFiles(string directoryPath) {
if (!Directory.Exists(directoryPath)){
ErrorMessage = "ディレクトリが存在しません";
return false;
}
try {
foreach (var file in Directory.GetFiles(directoryPath)){
File.Delete(file);
}
}catch (Exception exc){
ErrorMessage = exc.Message;
return false;
}
return true;
}
}
使う側
var success = DirectoryUtils.DeleteFiles(directoryPath);
if (!success){
MessageBox.Show(DirectoryUtils.ErrorMessage);
return;
}
//総変換数を求める
var totalNumber = GetNumberOfTotalConverting()
//Converting,Conversion,All,Total,Number,Count等々、悩んでいます
38:デフォルトの名無しさん
17/11/29 21:57:07.61 4/Kw2onf.net
自分だったら
public class DeleteFilesResult
{
public string ErrorMessage { get; set; }
public bool Success { get; set; }
}
みたいなクラス作ってそれを結果として返すかな
39:デフォルトの名無しさん
17/11/29 21:59:38.11 bodUKsOx.net
マジでぇ??
40:デフォルトの名無しさん
17/11/29 22:03:52.52 3MYeHM6X.net
>>36
エラーならエラー文字列返して、正常なら空文字かnull返すのが素直じゃないかな?
41:デフォルトの名無しさん
17/11/29 22:10:55.88 KZMpS2G2.net
successならsucceededとかじゃないの
もしくは構造体なりで
if (result == RESULT.OK)
とか
42:デフォルトの名無しさん
17/11/29 22:14:46.71 fgyKG67K.net
さっそくでたな
try catchはDeleteFilesメソッドの中じゃなくて
外で使うべき
43:デフォルトの名無しさん
17/11/29 22:31:52.96 NSRWkE4O.net
>>36
静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
エラー情報は普通に例外を投げようよ。
単に失敗成功が分かってエラーメッセージが取得できればよいだけなら、
エラーメッセージはoutな引数で戻せばいい
あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
失敗しても継続する方が自然なような気もするけど...
DeleteFilesより明示的にDeleteAllFiilesの方がいいんじゃないか?
GetNumberOfTotalConvertingは長すぎ
それを含むクラスに適切な名前がついてればそんな冗長な名前にする必要ないでしょ
44:デフォルトの名無しさん
17/11/29 22:32:46.18 JM2ObBa0.net
>>41
以前暴れていた
CsvHelper例外で落ちるな糞野郎くんだろう
45:デフォルトの名無しさん
17/11/29 22:33:52.93 fgyKG67K.net
DeleteFiles内部でtry catch受けていいのは
そのファイルをスキップして残りを消す場合など
46:デフォルトの名無しさん
17/11/29 22:34:19.89 fgyKG67K.net
>>43
人違いだわw
47:デフォルトの名無しさん
17/11/29 22:38:45.34 fgyKG67K.net
例外が飛んでそれをもとに制御が変わるなら
適切なtry catchの場所を考えるべき
48:デフォルトの名無しさん
17/11/29 22:42:39.35 NSRWkE4O.net
あと、例外についてはとにかく何でもキャッチしたがる人と、
それに対するアンチテーゼで「例外は絶対キャッチするな」と主張する人がいるけど、
どっちも何か盛大に勘違いしてる極論だから眉唾で聞いた方がいいと思う
49:デフォルトの名無しさん
17/11/29 22:45:33.13 fgyKG67K.net
そうだね
例外利用するならFile.Deleteのページを見て
どんな例外をスローするか調べたほうがいい
権限無くて削除できないとかあるから
50:デフォルトの名無しさん
17/11/29 22:48:25.13 rMr3voC1.net
・ω・Exception
51:デフォルトの名無しさん
17/11/29 22:54:19.77 +8Yov6n2.net
頻繁な例外を想定するならロギングで出力した方がいいよ
エラーを毎回表示なんて非現実的だし無視してOK連打したら意味ないでしょ
それよりタイムスタンプつけてテキストファイルに保存した方が後から照会できる
問い合わせの多くは、何もしてないのに突然おかしくなった、というやつばかり
そういう時はログフォルダをzipで圧縮して添付してもらおうというわけ
52:デフォルトの名無しさん
17/11/29 22:57:51.57 fgyKG67K.net
状況が許すならDirectory.Delete (string path , bool recursive)を使いたい
53:デフォルトの名無しさん
17/11/29 23:02:36.65 JM2ObBa0.net
>>45
人違いなのに丁寧にレスありがとww
54:デフォルトの名無しさん
17/11/29 23:02:52.52 JGmUTbhc.net
>>36
同じく静的メンバにエラー状態持たせるのは論外だけど
どうしてもやりたいなら成功時にそれをクリアしないとダメ
bool返すよりoptionalみたいなのを返すのがモダン
55:デフォルトの名無しさん
17/11/29 23:03:14.96 fgyKG67K.net
そのフォルダが相手のミスでリードオンリーにされた場合は例外情報が全部死ぬけどな
56:デフォルトの名無しさん
17/11/29 23:12:59.73 GyXUhAN/.net
>>36です
こんなにレスがつくとは思いませんでした。みなさんありがとうございます。
①結果を格納するクラスを作成し、それを返し、参照する
②エラー文字列を返す
③例外を投げるかoutな引数で戻す
どれもそういった発想が無かったので勉強になります。
ちなみにoutを使う場合はtupleを使って2つ返すのもありですか?
>静的メンバーにエラー情報を持たせるのは時代錯誤で論外。
こういう風に指摘されるともっともっと勉強しようと励みになります。ありがとうございます。
>あと、一つのファイルの削除に失敗した時点で処理中断する仕様でいいの?
>失敗しても継続する方が自然なような気もするけど...
たしかに処理の中断をするまでもないですね
例外処理についてはメソッドを呼ぶたびにtry catchを書くのが冗長という理由だけで中にいれてました。
制御が変わるかなど考慮すべきでした
optionalや>もしくは構造体なりでif (result == RESULT.OK)
などまだまだ理解できない部分が多いので調べてきます
57:デフォルトの名無しさん
17/11/29 23:21:16.55 GyXUhAN/.net
>>50
予期せぬ例外は
URLリンク(qiita.com)
このような感じでログファイルに出力するようにしていたのですが、
たしかにエラー毎回表示も微妙なので、もっとログをとっていくようにしていきます
58:デフォルトの名無しさん
17/11/29 23:30:30.87 GyXUhAN/.net
>>47 >>48
例外が起きた際、個々の例外によって制御を変える場合は個別に書いて、
MessageやStackTraceをロギングして終了するだけの場合はExceptionですべて捕捉する感じですか?
当初はIOException,UnauthorizedAccessExceptionなど書いていたのですが、
結局Messageしか使っていなかったので全ての例外を捕捉するようにしていました。
59:デフォルトの名無しさん
17/11/29 23:36:03.91 pRhcAUD9.net
Directory.GetFilesはファイルを全部探してから配列でそれを返すので色々と無駄
列挙するだけならDirectory.EnumerateFiles
60:デフォルトの名無しさん
17/11/29 23:48:45.63 GyXUhAN/.net
>>58
直しました。ありがとうございます。
61:デフォルトの名無しさん
17/11/30 00:47:19.32 HGFQxRVI.net
教えてもらったことにお礼を言うのはいいとして変える必要があったのだろうか
62:デフォルトの名無しさん
17/11/30 00:53:26.33 3e4JD2ht.net
>>55
Tupleでいいけどちゃんと名前付けてね
もしvs使ってるならコード分析かけてみれば?
静的メンバーの公開とかは警告で教えてくれたはず
63:デフォルトの名無しさん
17/11/30 02:34:13.97 XJSgowiz.net
>>57
基本的に例外を避けたい理由がなければ例外を使えば良い
ロギングしてアプリを終了するならExceptionでcatch
復帰可能のは個別に対処(ディレクトリが見つからない場合は再入力を求めるなど)
64:デフォルトの名無しさん
17/11/30 08:10:34.13 fzw2ErB1.net
>>55
outはもはや要らない子
名前付Tuple使っとけ
65:デフォルトの名無しさん
17/11/30 09:21:54.56 BGl9IyNc.net
Tupleってエラーの場合何を返すの?
66:デフォルトの名無しさん
17/11/30 09:22:06.99 y7Hhz8p2.net
トプル
67:デフォルトの名無しさん
17/11/30 09:40:45.12 BGl9IyNc.net
bool ok,int unkor,int unkog,int unkob
var unkc = GetUnkoColor();
if(unkc.ok){
成功
}else{
失敗
}
みたいな?
68:デフォルトの名無しさん
17/11/30 09:41:02.83 kZZqjgS1.net
Exception
69:デフォルトの名無しさん
17/11/30 09:47:18.95 saSKapUF.net
また、Exceptionが不遇な扱いを受けている
哀れすぎて何も言えねえ
70:デフォルトの名無しさん
17/11/30 09:48:16.44 BGl9IyNc.net
また、大して考えず産廃を作った予感
言語開発者暇なのか?
Getしようとしたけど要素がないときもあるじゃん
全部例外で飛ばされるとかマジやめて
71:デフォルトの名無しさん
17/11/30 09:59:17.09 saSKapUF.net
釈尊はnullは「無」であると説かれた
ナムー
72:デフォルトの名無しさん
17/11/30 11:21:23.77 ptf/uzH7.net
例外が邪魔とかoutイラナイわめいてるのは大抵Dictonaryでしょ
連想配列は銀の弾丸ではない、期待しすぎ
73:デフォルトの名無しさん
17/11/30 11:29:17.22 tR5Ha3BP.net
>>63
>outはもはや要らない子
これは嘘
74:デフォルトの名無しさん
17/11/30 11:31:00.67 zWPBp6sP.net
>>66
タプル知らないの?
75:デフォルトの名無しさん
17/11/30 11:53:07.37 ZqSZg82x.net
>>73
nullっぽく使えるのある?
76:デフォルトの名無しさん
17/11/30 12:25:17.12 EK0LYHwo.net
今はout引数で変数宣言できるようになったからかなりスマートになった
むしろタプルの必要性が疑問なくらい
TryGetXならnull問題もないし
77:デフォルトの名無しさん
17/11/30 12:26:38.17 rx1MFcR/.net
何が返されるか分かりにくいじゃん
タプルで返して分割代入すればいい
78:デフォルトの名無しさん
17/11/30 12:29:50.89 FnXA8j5a.net
タプルだったらわかりやすくなる例が思いつかんが
79:デフォルトの名無しさん
17/11/30 12:34:03.03 rx1MFcR/.net
そもそもタプルいらん
80:デフォルトの名無しさん
17/11/30 12:47:20.27 h6W3uA8y.net
>>78
訳:新しいことを覚える気力がない
81:デフォルトの名無しさん
17/11/30 12:51:45.93 Puu3loId.net
outでもクラスでも構造体でもタプルでも好きなもの使えばいいよ
>>78
いらんというお前のレスがいらん
チラシに書いとけ
82:デフォルトの名無しさん
17/11/30 12:52:07.78 1mMbqqg+.net
分散どうやって出すの?
83:デフォルトの名無しさん
17/11/30 12:54:30.58 rx1MFcR/.net
>>81
URLリンク(whoopsidaisies.hatenablog.com)
84:デフォルトの名無しさん
17/11/30 12:56:35.10 SRRUekt+.net
MS的にはXOrDefaultじゃないの
85:デフォルトの名無しさん
17/11/30 13:04:29.34 rx1MFcR/.net
>>79
.NETライブラリでも使われてないしな
86:デフォルトの名無しさん
17/11/30 13:15:30.72 RhI3AKYT.net
outって呼び出す時に一々変数を定義しなきゃいけないのが面倒
Tupleは戻り値が分かりづらいって欠点がある
どちらも一長一短だから好きな方を使えばいい
.NETライブラリが使ってないから使わないって思考停止すぎんだろ
87:デフォルトの名無しさん
17/11/30 13:19:26.22 rx1MFcR/.net
公認じゃない感あるし.NETの関数とマッチしないからな
88:デフォルトの名無しさん
17/11/30 13:21:37.72 FnXA8j5a.net
クラス作ろうぜ
89:デフォルトの名無しさん
17/11/30 13:26:10.35 rx1MFcR/.net
>>81
自分で書いてみた。
URLリンク(ideone.com)
90:デフォルトの名無しさん
17/11/30 13:26:15.27 RhI3AKYT.net
それが一番修正とか楽だしな
クラスは正義
91:デフォルトの名無しさん
17/11/30 13:26:30.06 rx1MFcR/.net
そうそう、クラスでやれってことな。
92:デフォルトの名無しさん
17/11/30 13:35:54.67 rx1MFcR/.net
Average関数もあったんだな
URLリンク(ideone.com)
93:デフォルトの名無しさん
17/11/30 13:39:45.69 rx1MFcR/.net
>>88と>>91は連動してて同じになっとるわ。
94:デフォルトの名無しさん
17/11/30 13:42:28.63 OCgtcJe/.net
c#が気に入らなきゃMatzみたいにオレオレ言語作れよ
95:デフォルトの名無しさん
17/11/30 14:01:20.98 2bRo+qFI.net
時間帯によってgpuの色味をコントロールするソフトを作りたいです
具体的にはf.luxみたいなソフトを作りたいのですが、かんたんですか?C#でいいんです?
f.luxはガンマ?が高目に設定されるようで、余計眩しく感じたりします
96:デフォルトの名無しさん
17/11/30 14:06:23.80 rx1MFcR/.net
Windows10のナイトモードでいいよ。
97:デフォルトの名無しさん
17/11/30 14:08:43.36 2bRo+qFI.net
時間帯によって徐々に変わるようにしたいのですが
98:デフォルトの名無しさん
17/11/30 14:18:40.16 rx1MFcR/.net
グラフィックドライバの設定を変えるプログラム書けばいいんじゃね?知らんけど。
URLリンク(software.intel.com)
99:デフォルトの名無しさん
17/11/30 18:39:49.21 yjKo9V4L.net
>>94
たまに似たような人がいるけど仕様段階で先が見えないくらいならあきらめた方がいい
このスレは設計のアドバイスをする役割ではないから
100:デフォルトの名無しさん
17/11/30 18:42:54.90 FnXA8j5a.net
実装のアドバイスもできないけどね
101:デフォルトの名無しさん
17/11/30 19:06:36.32 YyeHHjlB.net
画面関係ってOSのAPIレベルで標準化されてるのかな。
Win10だとそれっぽい機能がついてるから存在するのかもしれんが、それ以前のOSには存在しない気が
そもそも、昔よくあったOOPの責務の仕分け問題じゃないけど、画面の調整機能って
本来はモニター側が担当すべき機能でPC側でやるのはいかにも筋悪だよねw
102:デフォルトの名無しさん
17/11/30 19:07:49.09 WwTER4eR.net
>>99
お前はな
103:デフォルトの名無しさん
17/11/30 19:09:36.21 Wh6PhrD2.net
スキルの無いやつほど難しい事をやりたがる法則
104:デフォルトの名無しさん
17/11/30 19:19:51.31 qd73bvGb.net
まあ、でも、一人も試みるやついないってのも寂しい話だ
105:デフォルトの名無しさん
17/11/30 20:49:28.87 yjKo9V4L.net
>>100
アドベガンマが昔からあるのでアプリケーションで変えることはできる
スレ違いだし興味も無いのでこれ以上調べる気にもならない
>>103
やりたい人はやればいい
要件整理からはじめてガチ初心者にずっと教えるのが覚悟できれば
106:デフォルトの名無しさん
17/11/30 21:15:26.66 ZsTPl3HQ.net
>>85
c#7の新機能に出力変数宣言(out-var)がある。
これはこれで変数宣言を見落としそうだけど。
107:デフォルトの名無しさん
17/11/30 22:31:01.31 kZZqjgS1.net
>>102
賢者は困難を知り愚者は不可能を知らず
108:デフォルトの名無しさん
17/11/30 22:54:46.88 uf+KIpfb.net
>>106
愚者は厚顔無恥あり正しい事を指摘するとキレる
109:デフォルトの名無しさん
17/11/30 22:57:13.50 lpDomEoB.net
クッサ
110:デフォルトの名無しさん
17/11/30 23:04:10.82 dLltLXuH.net
値渡しと参照渡しの違いって、エクセルの貼り付けの「値のみ貼り付け」と「すべて貼り付け」みたいなもんですか?
111:デフォルトの名無しさん
17/11/30 23:15:31.56 wfb+bzow.net
「図として貼り付け」と「リンクした図として貼り付け」の方が近いかな
112:デフォルトの名無しさん
17/11/30 23:45:15.41 dLltLXuH.net
>>110
なるほど。そこまで外れてなかったようで安心しました。
113:デフォルトの名無しさん
17/11/30 23:46:11.61 YyeHHjlB.net
>>109
変数:割り当てられたメモリー上の特定のアドレス範囲
値:変数の中身(変数に割り当てられたメモリーの範囲のバイト列)
参照:変数に割り当てられたメモリーの範囲の開始アドレス
まあ、値がwebページのコンテンツなら参照はそのURIみたいなもの
114:デフォルトの名無しさん
17/12/01 00:04:00.62 euIX7D1U.net
>>112
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。
115:デフォルトの名無しさん
17/12/01 00:20:18.07 g1uYteJH.net
>>113
何も難しくないよw
2chで言えば参照渡しは人(メソッド)に対してレスのアンカーを示すだけで
中身は教えない。
値渡しはレスの内容のコピペ
参照渡し:
>>113
値渡し:
値をコピーする際にアドレスをよりどころにしているのが参照渡しということですね。
なんとなくイメージはわかるのですがなかなか。
116:デフォルトの名無しさん
17/12/01 09:09:10.01 0aG9Yubt.net
C#の次期バージョンではin参照渡しとかreadonly ref structとか参照渡し周りが超絶複雑になるよ
117:デフォルトの名無しさん
17/12/01 09:15:31.37 WDfZGQOx.net
.NETライブラリがそれらを採用しないなら使わん
118:デフォルトの名無しさん
17/12/01 09:53:17.68 prkNCuF1.net
>>116
ライブラリってのが何を指してるのかしらんが、CLRはパフォーマンス向上のために採用するだろ
119:デフォルトの名無しさん
17/12/01 09:54:03.08 2xCFHlEB.net
なんの思想もなくただ思い付いた機能追加してんな
次世代の課題はどう考えてもコードの自動生成だからな
もうc#にそれを受け切るキャパはないと結論出してくだらん機能追加してんのかな?
この設計を実現するためのこの機能ってのがないよな
120:デフォルトの名無しさん
17/12/01 09:57:33.53 ey3QBHng.net
馬鹿は要らん心配しなくていいぞw
121:デフォルトの名無しさん
17/12/01 10:17:38.98 iOkVpy7f.net
>>119
ごもっともだがmsの言語拡張にいったい何パーセントのc#プログラマーがついて行けてるんだろ?
122:デフォルトの名無しさん
17/12/01 10:18:45.36 WDfZGQOx.net
無駄にごちゃごちゃするだけ
要らんやろ
123:デフォルトの名無しさん
17/12/01 10:34:20.88 THofu70g.net
>>120
基盤のためだから、馬鹿な一般プログラマーはついていけなくていい
パフォーマンス向上だ間接的な利益を受けるから
124:デフォルトの名無しさん
17/12/01 10:37:55.11 tm4OIa2O.net
値型参照関連の新機能はパフォーマンス向上のために追加されるから
使わん奴は一生使わんだろうな
125:デフォルトの名無しさん
17/12/01 11:15:01.09 iOkVpy7f.net
>>122
>>102の法則が発動され中途半端な馬鹿がグダグダで複雑怪奇な(当然バグだらけ)の
コードを量産するから困るのです。
126:デフォルトの名無しさん
17/12/01 11:19:59.25 KuFa7ekd.net
馬鹿と一緒に仕事しなければOK
馬鹿に仕事を発注しなければOK
そうもいかないって?馬鹿は大変だなw
127:デフォルトの名無しさん
17/12/01 11:25:04.63 iOkVpy7f.net
受託開発なんて馬鹿の巣窟だわ
128:デフォルトの名無しさん
17/12/01 12:24:05.27 Y1F3euov.net
MicrosoftがVBを切り捨てたようにC#も底辺から切り捨てられていく
底辺プログラマの未来は暗い
129:デフォルトの名無しさん
17/12/01 12:25:29.05 RDzVJ16W.net
C#は他の言語で便利な機能があれば取り入れようとしてる時期
rubyみたいに何でも取り入れてごちゃごちゃにならなければいいけど
本当の意味で新しい機能はしばらく追加されないだろう
130:デフォルトの名無しさん
17/12/01 12:30:03.27 ZeZypetk.net
>>128
それって簡単に言えばなんの思想もないから他言語パクって見ますって話でしょw
131:デフォルトの名無しさん
17/12/01 12:33:48.54 TMbg8N17.net
>>129
全部入れてるわけじゃない
思想的にあってるものだけ入れてる
似たような感じだったjavaとも進化の仕方から違いが見て取れるはず
C#の下位がjavaと思ってたけど今は結構違いがある
132:デフォルトの名無しさん
17/12/01 12:42:25.56 WDfZGQOx.net
プログラマとして大事なのはコミュ力だから
133:デフォルトの名無しさん
17/12/01 12:52:31.16 Y1F3euov.net
技術力があれば不要なコミュニケーションを大幅ぬ削減できるという事実から目をそらさないで
134:デフォルトの名無しさん
17/12/01 12:53:48.42 iOkVpy7f.net
それはない
135:デフォルトの名無しさん
17/12/01 13:05:58.75 OnhdkLQO.net
そりゃC#にはVisualStudioとRoslynという超強力な助っ人がいるからね
さらにReSharper買えばリファクタリングも楽々
136:デフォルトの名無しさん
17/12/01 13:10:05.18 THofu70g.net
>>128
まあ8だろうね
137:デフォルトの名無しさん
17/12/01 21:14:22.99 IpWMomyL.net
outって使った記憶無いなぁってプログラム書いてたらTryParseで普通に使ってた
138:デフォルトの名無しさん
17/12/02 00:32:48.74 8Fsyuzgi.net
>>123
うむ
ほとんどの人は気にする必要すらない
139:デフォルトの名無しさん
17/12/02 02:52:21.48 GXJK2Or3.net
Parallelで走らせてる処理を一時停止させる方法ない?
140:デフォルトの名無しさん
17/12/02 04:44:45.92 y1r+I3k4.net
>>136
無い
141:デフォルトの名無しさん
17/12/02 09:04:32.19 VVl/8CKy.net
private class Pixel
{
public byte R { get; }
public byte G { get; }
public byte B { get; }
public int Index { get; }
public Pixel(IList<byte> data, int index)
{
B = data[0];
G = data[1];
R = data[2];
Index = index;
}
}
private static (int x1, int x2, int y1, int y2) Solve(BitmapSource source)
{
var width = source.PixelWidth;
var height = source.PixelHeight;
var stride = width * source.Format.BitsPerPixel / 8;
var data = new byte[stride * height];
source.CopyPixels(data, stride, 0);
var pixels = data.Buffer(source.Format.BitsPerPixel / 8).Select((x, i) => new Pixel(x, i));
あるところのコピペですが、最後の行の data.Bufferで 「'byte[]' に 'Buffer' の定義が含まれておらず、型 'byte[]' の最初の引数を受け付ける拡張メソッド 'Buffer' が見つかりませんでした。」
となります。 Byte型にBufferメソッドはないのですが、なぜこのような記述になっているのでしょうか?
142:デフォルトの名無しさん
17/12/02 09:14:48.79 FEBxWHiJ.net
usingが抜けてる
143:デフォルトの名無しさん
17/12/02 09:16:43.91 DFDj7NSx.net
>>140
.netのバージョンじゃん?
144:デフォルトの名無しさん
17/12/02 09:20:05.04 y4HB0lRC.net
>>140
多分元々はBufferメソッドは拡張メソッドとして定義されてたものだと思う。配列型のメンバに無くてもあとから追加したように見せるやつ。
145:デフォルトの名無しさん
17/12/02 10:41:07.35 kxO6m70V.net
>>140
Rxじゃね
146:デフォルトの名無しさん
17/12/02 11:40:59.81 VVl/8CKy.net
みなさんどうもありがとうございます。
>>141
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
なので問題はないと思います。
>>142
古い.NET Frameworkしろってことですよね?
やってみたんたんですけど、Byte型に Bufferメソッドはなかったです。
>>143
自作した拡張メソッドなら他人にはわからないですね。
やってることはBitmapImageからピクセルデータの配列を取得してるので
べつのものに置き換えて済みそうな気がするんですが・・・
>>144
知らないのでググってみました。色々できそうなので調べてみます。
147:デフォルトの名無しさん
17/12/02 13:42:47.26 NyAfE05B.net
小さいから見えんかったけど
IListじゃん
ググると微妙に出てくる
148:デフォルトの名無しさん
17/12/02 14:36:47.13 d+Ubtrjs.net
C#のint配列はArrayの派生クラスですか?
149:デフォルトの名無しさん
17/12/02 14:57:01.75 DKhOQsY1.net
そうだよ
150:デフォルトの名無しさん
17/12/02 15:33:22.07 suCQ4i95.net
>>147
形式的にそう見えるようになっているけど、実際には通常のクラスの継承とは異なってるよ
配列は配列型という特別な種類の型であって、クラスや構造体とはまた異なるものだ
151:デフォルトの名無しさん
17/12/04 22:56:10.41 ZukSnJvXA
AngleSharpの使い方について教えてください!
<div class="aaa" hoge="javascript:changeBackgroundColor(this);">
<span id="idxxx" class="laste_span">取得したい箇所</span>
</div>
このようなelementがあったとして、
// 指定したサイトのHTMLをストリ
152:ームで取得するvar doc = default(IHtmlDocument);using (var client = new HttpClient())using (var stream = await client.GetStreamAsync(new Uri(urlstring))) { // AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる var parser = new HtmlParser(); doc = await parser.ParseAsync(stream);}ここからdocに対してどのようにアクセスすれば取得したい箇所を取り出せるのでしょうか?
153:デフォルトの名無しさん
17/12/04 23:04:09.19 vR5lLnEi.net
AngleSharpの使い方について教えてください!
<div class="aaa" hoge="javascript:changeBackgroundColor(this);">
<span id="idxxx" class="laste_span">取得したい箇所</span>
</div>
このようなelementがあったとして、
// 指定したサイトのHTMLをストリームで取得する
var doc = default(IHtmlDocument);
using (var client = new HttpClient())
using (var stream = await client.GetStreamAsync(new Uri(urlstring))) {
// AngleSharp.Parser.Html.HtmlParserオブジェクトにHTMLをパースさせる
var parser = new HtmlParser();
doc = await parser.ParseAsync(stream);
}
ここからdocに対してどのようにすれば取得したい箇所が得られるのでしょうか?
154:デフォルトの名無しさん
17/12/04 23:14:30.56 LqjCBPi+.net
...
}
var elm=doc.QuerySelector(“div.aaa span#idxxx”);
var text=elm.TextContent.Trim(); //文字列を取得
155:デフォルトの名無しさん
17/12/04 23:20:48.64 2ttKv46c.net
>>152
#idxxx だけでよくね?
156:デフォルトの名無しさん
17/12/05 00:13:40.14 bv7GN3wK.net
id よりも先祖の階層は、指定する必要がない
最も子孫の、id 以降を指定するだけでよい
157:デフォルトの名無しさん
17/12/05 00:37:34.79 me3XgAZI.net
>>152
>>153
>>154
ありがとうございます!
明日確認してみます。
158:デフォルトの名無しさん
17/12/05 05:15:33.65 cXtd7Bhl.net
あるtextBox1と表示内容が同じtextBox2を作りたいのですが
textBox1.Text="hoge";
textBox2.Text="hoge";
と記述するのではなくて
visualstudioのデザイナーでコピーするだけでtextBox2を簡単に作れる様な方法はないでしょうか?
159:デフォルトの名無しさん
17/12/05 06:21:13.05 td42eqy6.net
デザイナーでコピーすればいいじゃん
160:デフォルトの名無しさん
17/12/05 07:59:45.98 IsGNrsv0.net
連動させたいってこと?
161:デフォルトの名無しさん
17/12/05 08:01:01.32 cXtd7Bhl.net
すいません、Textの内容hogeは計�
162:Z結果をstringに変換したもので毎回違うので 単にコピーしただけでは出来なくて困っています
163:デフォルトの名無しさん
17/12/05 08:02:23.95 cXtd7Bhl.net
はい、連動させたいということです
データバインドというので出来るのかなと思ったのですが難しくてよくわかりませんでした…
164:デフォルトの名無しさん
17/12/05 08:05:41.37 cXtd7Bhl.net
複数のタブで色々な計算をしていて、その結果を見やすい様にひとつのタブにまとめて表示させたい
という感じです
165:デフォルトの名無しさん
17/12/05 08:09:42.45 IsGNrsv0.net
コンテクストクラスを作ってタブ開いたときにそのコンテクストオブジェクトの内容を表示させる
166:デフォルトの名無しさん
17/12/05 08:49:06.85 aO16oHUn.net
更新タイミングでそうなるように値入れればいいじゃん
167:デフォルトの名無しさん
17/12/05 08:50:24.01 aO16oHUn.net
何ができなくて困ってるのか全くわからない
168:デフォルトの名無しさん
17/12/05 09:35:53.48 5W3/kp5y.net
うむ。
textBox1.Text=res1;
textBox2.Text=res1;
textBox1.Text=res2;
textBox2.Text=res2;
こんな感じで毎回両方に代入すればいい。
169:デフォルトの名無しさん
17/12/05 11:10:31.20 8/AWIhin.net
なんで要素1つのタプルが宣言できねえんだよこのポンコツ
170:デフォルトの名無しさん
17/12/05 12:23:48.53 Z3/XP0Jc.net
changed使えば
171:デフォルトの名無しさん
17/12/05 13:39:29.23 92ldxPu3.net
>>156
文字通りに解釈すると表示が同期するコントロールを継承・またはユーザーコントロールとして新しく作るってなるけど
>>165とどっちが楽とか考えてみたらいいよ
172:デフォルトの名無しさん
17/12/05 13:44:53.19 yVpW5F/D.net
EF初心者なんですがPKが有るDBでsaveChangesしようとするとPKが重複してるというエラー出ます。解決策を教えてください。
173:デフォルトの名無しさん
17/12/05 14:34:58.67 dOKGjr2C.net
コードを修正する
174:デフォルトの名無しさん
17/12/05 18:14:21.88 BG6o1pBu.net
増減する情報(例えば、車種、色、ナンバー等)を管理するのに適したものは何ですか?
自作クラスを作って
List<myClass> myList;
myList.Add(new myClass());
myList.Remove(~);
とするのと、
DataTableで、車種、色、ナンバーを Columnsとし、
Row の Add と Remove するのと、
実行速度とかの面で、どちらがよいでしょうか。
175:デフォルトの名無しさん
17/12/05 18:27:09.86 K4lUm6I7.net
>>171
Listに1票
176:デフォルトの名無しさん
17/12/05 18:28:03.32 AWED9izS.net
ListのAddはO(1)、RemoveはO(n)
DictionaryのAddはO(1)、RemoveはほぼO(1)
なのでキーがユニークになるならDictionaryを使えばOK
あとDataTableは余程のことが無い限り使っちゃダメ
177:デフォルトの名無しさん
17/12/05 18:38:38.70 xkHn8EO8.net
>>171
それを保存するならDBを使うべき
SQLiteとか
178:デフォルトの名無しさん
17/12/05 18:39:45.00 BG6o1pBu.net
DataTable はダメなんですか?
別件ですが、日時を有する情報で、ある特定の期間の直近のデータを特定したい場合があり、
Selectを使いたいのでDataTableを使った経験があるのですが、よくなかったですか?
179:デフォルトの名無しさん
17/12/05 18:41:02.99 BG6o1pBu.net
>>174
保存はしません。あくまでも内部の情報としての利用です。
180:デフォルトの名無しさん
17/12/05 18:43:51.03 xkHn8EO8.net
DataTableは土方臭いから、やり方に拘るタイプの人は嫌ってることが多い
DataTable自体は、パフォーマンスに優れ、クソ安定した優秀な技術
愛用してるプログラマがクソなだけ
181:デフォルトの名無しさん
17/12/05 18:47:31.87 Yyswv8hy.net
DataTable よりも List を使うと 10 倍早くなる
略
DataTable 8.32, 8.12, 8.12 sec
list 0.88, 0.83, 0.83 sec
とう具合に、DataTable よりも list のほうが 10 倍早くなっています。
182:デフォルトの名無しさん
17/12/05 19:00:51.66 PhhOBNeX.net
その10倍がボトルネックにならなきゃどうでもいい
183:デフォルトの名無しさん
17/12/05 19:04:36.42 rIDRW6+f.net
>>179
質問者が実行速度にこだわっているのならどうでもよくはない
そんな話するのならこの質問がどうでもいいってなる
184:デフォルトの名無しさん
17/12/05 19:13:14.27 BG6o1pBu.net
皆さん、ありがとうございます。
速度も速いしクソにはなりたくないので、今回の案件ではlistを使う方向で進めることにします。
先ほど書いたとおり、以前DateTime型の絞込みでSelectが便利だと思いDataTableを使ったことがあります。
この場合も、listで、自力でソードや比較を実装した方が良かったのでしょうか?
まぁ速度の兼ね合いかとは思うのですが、皆様ならどうしますか。
185:デフォルトの名無しさん
17/12/05 19:15:08.60 0r8GtYYi.net
8秒と0.8秒だったら大騒ぎだが80msと8msの差だったら無視できるという意味では
どういうものをどのくらい扱うかで違うから本人がテストしなきゃ仕方ないね
186:デフォルトの名無しさん
17/12/05 19:17:31.03 k+S65OIc.net
DataTableはオワコン
Microsoftも切捨てようとしたがクレーマーの圧力に負けてしぶしぶサポートすることになった
187:デフォルトの名無しさん
17/12/05 19:19:50.77 rIDRW6+f.net
>>181
まず用途が管理なのに保存しないとか意味不明なんだけど
データその都度読み込んで捨てるのなら作りやすい方で作って
速度アップ見込めそうなら形式を変えるだけ
188:デフォルトの名無しさん
17/12/05 19:21:31.02 ICEc9nSZ.net
何れにしてもLinqは覚えておこう
189:デフォルトの名無しさん
17/12/05 19:47:42.46 C7A8AnoX.net
RemoveするならGetHashCodeとEqualsをちゃんと実装してHashSetにぶち込んだ方が良くない…?
190:デフォルトの名無しさん
17/12/05 20:12:24.58 ParyWK8l.net
リストに重複データが存在するかもしれないしHashsetにしていいかは不明だな
設計書とか作って主キーやユニークキーにあたるデータを明示的にしてんならそれでいいけど大抵はIEqualityComparer指定する方が使い勝手がよさそう
191:デフォルトの名無しさん
17/12/05 20:22:49.22 PhhOBNeX.net
>>181
先ずは作り易い方で作れ
速度面の改善をするのは、一通り完成してからでいい
ボトルネックは大抵、標準ライブラリからどのクラスを採用するかなんてレベルには無いから気にすんな
192:デフォルトの名無しさん
17/12/05 20:48:47.73 XeWx8Qol.net
>>170
分からないなら答えなくてもいいよ
193:デフォルトの名無しさん
17/12/05 21:03:05.57 BG6o1pBu.net
皆さん、レスありがとうございます。
色々と馴染みのないキーワードが出てきたので少しずつ調べて行きたいと思います。
194:デフォルトの名無しさん
17/12/05 21:42:08.05 IsGNrsv0.net
Googleのトップがプログラミング
195:デフォルトの名無しさん
17/12/06 08:39:00.97 Y6zaPgMb.net
>>183
クレーマー言うな。
EFが普及してないんだから仕方ない。
msはDataTableよりvb6に引導を渡してくれ。
196:デフォルトの名無しさん
17/12/06 15:27:39.07 nfsVfh5P.net
Webフォームを作っています。
サーバ上の特定のフォルダに、とあるファイルが不定期に生成されます。
それを監視してWebフォームに表示したいのですが、FileSystemWatherのようなコントロールはないでしょうか?
ない場合、Timerで回すしかない考え付かないのですが、通常Webフォームで1秒間隔程度なら許容されるインターバルでしょうか?
197:デフォルトの名無しさん
17/12/06 15:39:57.42 A61Dczsv.net
>>193
無いと言うか、あったところでその状況をサーバに取りに行かないとどうにもならん。
ユースケースによるかと。
コネクション数を気にしないなら、ファイルが生成されるまでタイムアウトしないAPI作って、ajaxで呼ぶのが一番機敏に動く�
198:ニ思う。 一秒間隔でリクエストはちょっと多いんじゃないかな。生成されてない画面を10人が10分開いたままにしたら、それだけで6000行もログが埋まってしまう気がする。
199:デフォルトの名無しさん
17/12/06 15:53:34.43 sywZU+Dz.net
>>193
問題ないけど不定期ならプッシュ通知の実装もありますよ
200:デフォルトの名無しさん
17/12/06 15:55:24.63 nfsVfh5P.net
>>194
言葉足らずですみません。
IISが動いているサーバにデータのファイルが不定期に生成されます。
それをWeb画面で様子をみたいという要望です。
動いてる様子が分かればいいのですが、ファイルがまとまって生成される事があるため、
ある程度短いインターバルにしたいとは思ってたのですが。
ローカルアプリも考えたのですが、その場合、複数のPCがサーバのファイルを覗きに行く事になるので、それはそれで嫌かなと思いまして。
> ファイルが生成されるまでタイムアウトしないAPI作って、ajaxで呼ぶ
もう少し教えてもらえないでしょうか。
APIって具体的に何で作ったどんな形式のものですか?
調べるヒントをください。
>>195
同じくもう少しヒントを!どんな感じの実装ですか?
201:デフォルトの名無しさん
17/12/06 16:07:24.35 sywZU+Dz.net
>>196
ごめん、Webプッシュと言うらしいけど未だ使ったことは無いんだ
グーグル先生に聞いてください
202:デフォルトの名無しさん
17/12/06 16:32:05.88 0RCrbv9w.net
>>196
SignalR
203:デフォルトの名無しさん
17/12/06 17:50:23.31 3KlZJVUn.net
C#を採用したTizen4.0っていうOSのスマホが発展途上国でバカ売れらしい
204:デフォルトの名無しさん
17/12/06 18:10:03.35 nv7gWMkp.net
indexでF5連打
205:デフォルトの名無しさん
17/12/06 18:21:23.18 nv7gWMkp.net
この人と同一人物じゃないかと疑ってしまう
703 名前:デフォルトの名無しさん (ワッチョイ 02c2-8CrJ)[sage] 投稿日:2017/11/21(火) 21:20:36.17 ID:8K/pnPq30 [1/2]
最近のオシロスコープはWebサーバー機能を持っていて、Webブラウザでアクセスすると
計測画面を表示させることができますが、C#で同じような機能を簡単に実装することはできるでしょうか?
リモートデスクトップではなく、WinFormsのアプリ画面だけをネット越しに共有する感じです。
206:デフォルトの名無しさん
17/12/06 18:23:00.31 zMhQDjeD.net
>>196
Web Socketかポーリングを使う
つまりSignalR
207:デフォルトの名無しさん
17/12/06 19:40:50.48 trEM6d6d.net
ポーリング間隔はどっちにしろ決めないと話にならない
208:デフォルトの名無しさん
17/12/06 19:44:16.54 WLCLi8WA.net
ロングポーリングかWebSocketならポーリング間隔は不要だぞ
209:デフォルトの名無しさん
17/12/06 19:50:30.04 trEM6d6d.net
>>204
どういう仕組み?
210:デフォルトの名無しさん
17/12/06 19:54:18.94 trEM6d6d.net
サーバー側でクライアント数の把握をするの?
悪手じゃね?
211:デフォルトの名無しさん
17/12/06 20:24:33.34 WLCLi8WA.net
通知が取得できるようになるまで長いことセッション張りっぱなしにするだけだぞ
悪手もクソも普通に使われてる手法
212:デフォルトの名無しさん
17/12/06 20:26:17.59 jQEB5IsZ.net
>>206
SignalR知らんの?
213:デフォルトの名無しさん
17/12/06 20:50:56.89 trEM6d6d.net
>>207
それってサーバー側でクライアントを管理してないとできないよね?
214:デフォルトの名無しさん
17/12/06 20:51:29.75 trEM6d6d.net
>>208
いや、これ仕組みの話だから
215:デフォルトの名無しさん
17/12/06 21:59:20.59 W/tg1Ic8.net
>>209
それが何か?
普通のHTTPリクエスト処理だって、リクエストを受け付けてからレスポンスを返すまで、
君の言葉で言えばクライアントを管理してるだろ
そのレスポンスを返すまでの時間が長いだけだよ
216:デフォルトの名無しさん
17/12/06 22:02:13.59 trEM6d6d.net
>>211
ファイル更新が丸一日無かったらどうなんの?
217:デフォルトの名無しさん
17/12/06 22:13:07.11 W/tg1Ic8.net
>>212
リクエストにタイムアウト付けるに決まってるだろ
218:デフォルトの名無しさん
17/12/06 22:15:10.75 H2dXQlT6.net
元の質問Timerで一秒間隔で呼び出すとかなんだが大丈夫なのか?
219:デフォルトの名無しさん
17/12/06 22:29:46.09 JrOz0Sq/.net
>>214
5chのリクエスト数に比べると屁みたいなもんだろな。
220:デフォルトの名無しさん
17/12/06 22:31:12.35 9Cl2Q0EY.net
そもそもサーバーのファイル一覧を表示するWebアプリなんか自分で作らなくても出来合いのOSSが腐るほどあるだろ
自分で作るより遥かに品質もいいよ
221:デフォルトの名無しさん
17/12/06 22:34:48.06 H2dXQlT6.net
>>215
サーバーがそんな強力な前提か
222:デフォルトの名無しさん
17/12/06 22:35:13.44 lccJ0ap6.net
webベースのファイル管理サービスでイケてるやつあったっけ?
223:デフォルトの名無しさん
17/12/06 22:36:33.33 W/tg1Ic8.net
>>215
キャパシティ的な話をするなら、そもそもサーバーのディレクトリを各クライアントがネットワークドライブにマウントしても全く問題もないだろうな
用途的に、問題になるほどにクライアントの数が多いとは思えん
224:213
17/12/06 22:36:35.54 H2dXQlT6.net
って違うw釣られて間違えたw
クライアント側の話だよ
225:デフォルトの名無しさん
17/12/06 22:41:18.34 9Cl2Q0EY.net
>>220
ロングポーリングなら関係ないぞ
結局はサーバー側でのファイル生成イベントの発生頻度次第
226:デフォルトの名無しさん
17/12/06 22:43:23.56 JrOz0Sq/.net
>>219
タスクトレイ常駐型のデスクトップアプリでも作った方が使いやすいだろうな。
227:デフォルトの名無しさん
17/12/06 23:56:51.95 5T1FsMv1.net
サーバー側はFileSystemWatcher(だったっけ?)でフォルダ監視してなんかあったらテキストファイルでもDBでも適当な保管場所に情報を保存するサービスと
その保存場所から自動更新でひたすら情報を読み取るWeb画面作ればよくね?
自分ならそうするわ
ボリューム的に半日仕事で終わるし
228:デフォルトの名無しさん
17/12/07 01:41:57.78 h6BVmLyc.net
1秒じゃなくて4秒にしよう
229:デフォルトの名無しさん
17/12/07 07:03:53.69 e1xCIudC.net
他のアプリにキーボードのコマンドを送りたいのですが、どの様な方法があるでしょうか?
sendinputなど調べてみたのですが例が少なく今一理解出来ませんでした
230:デフォルトの名無しさん
17/12/07 07:58:46.72 h6BVmLyc.net
プロセス間通信
231:デフォルトの名無しさん
17/12/07 08:07:25.81 QlnDuWpW.net
>>223
> その保存場所から自動更新でひたすら情報を読み取るWeb画面作ればよくね?
だからそれやるとクライアントが多い時にサーバーがパンクするからSignalRとかでサーバーから通知するって話
まあサーバーから通知って言うけど仕組み的にはイベント発生までレスポンスを返さないって言うだけのことなんだけどな
232:デフォルトの名無しさん
17/12/07 08:16:20.37 1QpgLYuZ.net
なつかしのSendMessageとか
233:デフォルトの名無しさん
17/12/07 08:27:43.21 teoFHcQT.net
>>225
SendKeysで
sendinputは他のプロセスには送れない
234:デフォルトの名無しさん
17/12/07 08:50:35.95 afn7IHoQ.net
.netの場合クラスないでFontオブジェクトを生成した場合にはクラスを解放した場合は
Fontオブジェクトは解放されるの? Disposeすべきかどうかはどうやって調べたら
いいのだ?
235:デフォルトの名無しさん
17/12/07 10:06:11.39 lA04OzcH.net
>>227
しないっつうのw どういう理解してる?
なんのためにわざわざ別にサービス作って保存してんだ
これでパンクするならごく普通のWebサービスも作れんわ
236:デフォルトの名無しさん
17/12/07 10:31:29.62 vYoZ1cCC.net
>>230
パフォーマンスを要求するなら適切なタイミングで解放すべき。
どうでもいいならガーベッジコレクタに任せる
237:デフォルトの名無しさん
17/12/07 10:32:55.56 vYoZ1cCC.net
質問の答えになってなかった
238:デフォルトの名無しさん
17/12/07 10:43:44.03 teoFHcQT.net
>>230
IDisposable実装してないクラスは放置で良いと思ってる。
239:デフォルトの名無しさん
17/12/07 10:56:49.03 ODzGS5Kr.net
FontをDisposeするコードは見
240:たことも発想も無かったな newで作ったら全部Disposeする発想なのか
241:デフォルトの名無しさん
17/12/07 10:58:19.97 vYoZ1cCC.net
Font, Pen, Brushはサイズ重いしな
242:デフォルトの名無しさん
17/12/07 11:44:12.26 Rln0TdUu.net
>>235
Fontはコントロールを自作する場合は(ほとんどの場合手抜きで)コントロールと同じ寿命に
することもあるけど、usingで対処できる場合が大半でしょ
243:デフォルトの名無しさん
17/12/07 12:54:28.08 QlnDuWpW.net
>>231
見たときに最新情報になってりゃいいんじゃなくて、イベントが発生したらあまり遅れずにクライアント側の画面を更新するんだぞ?
なぜSignalRとかの話になってるのか理解してないだろ
244:デフォルトの名無しさん
17/12/07 13:02:41.60 lA04OzcH.net
>>238
そもそもWeb画面で見たいっつう要望じゃん
つうか100台同時アクセスして毎秒更新してもカスみたいな負荷だわこんなもん
一体どんな骨董品で動かす想定してんだよ
245:デフォルトの名無しさん
17/12/07 13:07:11.00 lA04OzcH.net
そうでなくてもSignalRなんているかよ
サービスでtcpポートlistenしてイベント発生する都度情報を垂れ流す古き良きソケット間通信で十分だろw
246:デフォルトの名無しさん
17/12/07 13:09:35.59 teoFHcQT.net
日本語で
247:デフォルトの名無しさん
17/12/07 13:22:15.77 2pT1zkKO.net
>>240
ブ ブラウザ画面の話してるから要するにWebSocketってこと?
248:デフォルトの名無しさん
17/12/07 13:29:39.70 lA04OzcH.net
>>242
いや
デスクトップアプリにするんでもソケット間通信でいいよねっつう話
249:デフォルトの名無しさん
17/12/07 13:51:52.29 +NxgTnqm.net
Webアプリで素のソケット通信って何なのさ?
250:デフォルトの名無しさん
17/12/07 14:33:53.52 LGA5S92E.net
質問者置いてけぼりでワロタ
いつの間にかサーバ側を何とかする話になってる
251:デフォルトの名無しさん
17/12/07 14:40:55.27 +NxgTnqm.net
皆さん、単純なものを複雑に実装するスキルをお持ちのようでw
252:デフォルトの名無しさん
17/12/07 15:33:24.53 BPsvGxGu.net
C#でデーモン作って状況をDBに保管して、webシステムは普通にDBからページ作れば良いんじゃね?
セッション全てがフォルダアクセスに行くと面倒だからそれだけ避ければいい
253:デフォルトの名無しさん
17/12/07 16:02:17.31 cbI0OqL3.net
知らないのならば
254:デフォルトの名無しさん
17/12/07 16:10:15.58 CONsZMOl.net
>>196
見たい時にボタンクリックして最新情報を取得すればいいやん。
常時モニターする必要性は無いだろ?
255:デフォルトの名無しさん
17/12/07 16:16:30.86 3BaUjcas.net
本当に初歩的なことで無知で予め謝るね、ごめんなさい。
var revokedPasswords = [
];
function getAuthenticationHash (password) {
var hasher = new jsSHA("SHA-256", "TEXT");
hasher.update("vira " + password.trim().toLowerCase() + " mate");
return hasher.getHash("HEX");
};
function isValidPassword (password) {
if (revokedPasswords.indexOf(hash) >= 0)
return false;
var hash = getAuthenticationHash(password);
if (validPasswords.indexOf(hash) >= 0)
return true;
return false;
};
context.getAuthenticationHash = getAuthenticationHash;
context.isValidPassword = isValidPassword;
というのがあって、これはパスワードを”SHA-256”ってやつで変換しろってことであってるのかな?
256:デフォルトの名無しさん
17/12/07 16:19:30.73 bi5OWsBC.net
>>250
ここはc#スレです
257:デフォルトの名無しさん
17/12/07 17:32:36.95 2pT1zkKO.net
>>250
はいそうです。
258:デフォルトの名無しさん
17/12/07 18:14:35.54 +Wu2cJH/.net
>>228>>229
ありがとうございます
最終的にバックグラウンドでキー入力を他アプリに送りたいのですが
どういった方法があるでしょうか?
259:デフォルトの名無しさん
17/12/07 18:30:35.51 NSH9BpmW.net
>>253
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
URLリンク(dobon.net)
バックグラウンドとは?
特定のアプリに対してのみ送信なら無理
260:デフォルトの名無しさん
17/12/07 19:35:39.52 qnTgxbKH.net
>>253
バックグランドってタスクトレイ常駐アプリにしたいって事?
NotifyIcon使えば出来るけど。
バックグランドがWindowsサービスって意味なら無理かな。
.NETのSendKeysは、半角カナや&は化ける。
WSHのSendKeysを使えば化けないかも。
261:デフォルトの名無しさん
17/12/07 20:32:51.80 QlnDuWpW.net
>>239
> そもそもWeb画面で見たいっつう要望じゃん
>>193と>>196を読んで自動更新したいんだ
って理解できないアホは黙ってろ
262:デフォルトの名無しさん
17/12/07 20:48:22.81 p8nuhjj6.net
>>239が言ってるのは、クライアントがサーバーに対してXHRでも使って1秒ごとにポーリングすればいいということだと思うぞ
リクエストのたびにサーバー側でも毎回ファイルシステム舐めてファイル一覧作ってたら遅いだろうけど、
サーバー側ではFileSystemWatcherなり定期的なポーリングなりで非同期でファイル一覧のキャッシュを更新していけば、
クライアントが頻繁にリクエストしてきてもまず問題にはならない
263:デフォルトの名無しさん
17/12/07 20:50:09.09 lA04OzcH.net
>>257
普通誰が読んでもそういう理解になるよね
264:デフォルトの名無しさん
17/12/07 20:54:28.15 h6BVmLyc.net
>>256はWebに疎すぎる
265:デフォルトの名無しさん
17/12/07 21:06:57.10 p8nuhjj6.net
(A)サーバー内でのファイルシステムに対するポーリング と、(B)クライアントによるサーバーへのポーリング がごっちゃになってるのがこの話の混乱の原因
そこを非同期で分離するのはまず常識的な大前提であって、
ABそれぞれをどう最適化するかはそれほど重要ではない
とりあえず実装が手っ取り早いのはABとも定期的に更新することだし、
効率と即時性を追求するならAはFileSystemWatcherでBはロングポーリングorWebSocketだろうね
266:デフォルトの名無しさん
17/12/07 21:09:53.55 G7lyLovK.net
>>257-259
なんでそんなタコな設計するんだ?
って>>194に既に書いてあるのにバカすぎるだろ
267:デフォルトの名無しさん
17/12/07 21:12:08.87 qnTgxbKH.net
質問主はWebアプリに拘ってるわけじゃないけど
沢山のクライアントPCからWebサーバのフォルダを共有したくないからWebアプリが良いかな程度に思ってるだけだろ。
Webサーバ上に監視サービス作るのならWebアプリに拘る必要は無いし。
268:デフォルトの名無しさん
17/12/07 21:19:32.52 lA04OzcH.net
>>261
>>194がバカだからね
仕方ないね
ファイルが生成されるまでタイムアウトしないAPIとか、1秒間隔のリクエストが多いとか、6000行のログとか
何もかも全てが意味不明だからね
どうしようもないね
269:デフォルトの名無しさん
17/12/07 21:21:02.83 p8nuhjj6.net
>>261
>>194と矛盾することは何も言ってないつもりだけどな
>>194は>>260でいうBの部分の実装例を挙げてるだけであって、Aの部分については何も言及してないぞ
270:デフォルトの名無しさん
17/12/07 21:24:18.74 Is/SlhXg.net
悪いけどこれC#の話題なのかなあ?
271:デフォルトの名無しさん
17/12/07 21:29:45.67 EeTBbz6o.net
じゃあ会社でLINQを薦めようとしたら、その前にまずユニットテストを覚えさせなければと愕然とした話でいいのか
272:デフォルトの名無しさん
17/12/07 21:40:07.74 lfszpYB8.net
ソケット通信はstunnelで暗号化するんだよね?
273:デフォルトの名無しさん
17/12/07 21:46:02.79 G7lyLovK.net
>>264
そもそもAをどうのこうの言ってる奴は池沼の>>223ぐらいだろ w
274:デフォルトの名無しさん
17/12/07 23:37:45.38 gBefvYul.net
イベントの購読破棄って
どんなケースでも破棄されるように几帳面にやるものなの?
URLリンク(takachan.hatenablog.com)
275: これ見たら-=しなくても漏れないようなので サボりたくなるんだけど サボってはいけないケースとサボっていいケースがあるなら知っておきたい
276:デフォルトの名無しさん
17/12/08 02:03:25.04 cDyzbPRT.net
>>269
何やってるのかよー分からん記事だねw
イベントでリークが発生しうるのは相談室の方の97に書いてあるケースだけだと思う
それは違うって言ってる人もいるけど、たぶん何か勘違いしてるだけだと思うね
277:デフォルトの名無しさん
17/12/08 02:05:20.09 dE4K6487.net
{"status":"go","solution":{"Res":"0SpQ"},"endTime":1512663686}
っていうJSONデータがあって、その中のResの値をとりたいんですけど、
var seri = new DataContractJsonSerializer(typeof(recapres));
byte[] bytes = Encoding.UTF8.GetBytes(a);
var ms = new MemoryStream(bytes);
recapres info = (recapres)seri.ReadObject(ms);
ここまでは調べて書けたんですけど、
この先のResの値をとるコードの書き方がわかりません。
どのように記述すればいいのでしょうか?
solutionの部分は、
[DataMember]
public List<SOL> solution { get; set; }
としてしてます。
278:デフォルトの名無しさん
17/12/08 04:06:20.76 xohAuzUW.net
>>271
です。
調べる方法変えたらいけました
279:デフォルトの名無しさん
17/12/08 07:58:19.65 ahDNvKU9.net
>>270
サボってはいけないのはイベント発行側のライフサイクルが長いとき
サボっていいのは発行側と購読側のライフサイクルがほぼ同じとき
という理解でOK?
280:デフォルトの名無しさん
17/12/08 08:11:45.30 PpC6VnTr.net
>>269
このリンク先の人はイベントとGCを正しく理解してない
この人、他の記事もバカっぽいのばっかりだから初心者はこんなの見ちゃだめ
>>273
間違ってはいないけど、補足するなら
発行側より購読側のライフサイクルが長いときもサボっていい
参照の向きは必ず発行側→購読側なので、イベントハンドラの登録そのものは発行側の寿命には影響しない
フォームとボタンのように、たいていは購読側も発行側への参照を握り続けているので、結果的に寿命は一致するケースが多いんだけどね
281:デフォルトの名無しさん
17/12/08 08:41:02.41 LOVuAI3k.net
>>274
SIerの中の人のブログだね
c#でメモリリークって「推して知るべし」
282:デフォルトの名無しさん
17/12/08 08:43:23.27 oxsZSnq/.net
>>263
193だけどなんで?
普通にロングポーリングの実装かと。
283:デフォルトの名無しさん
17/12/08 09:32:30.34 eUH+zyLO.net
イベントとかUIしか使わんしUIはデザイナーが勝手にコーディングするからイベントなんて使わんな
284:デフォルトの名無しさん
17/12/08 09:40:52.12 2x5NCYhZ.net
へえ、すごいね
帰っていいよ
285:デフォルトの名無しさん
17/12/08 11:10:02.45 cJ57jE1N.net
+=を一切使わずに作るのか
コマンドバインディングを駆使する感じ?
それは確かに凄いな
286:デフォルトの名無しさん
17/12/08 11:28:41.60 7LHrgDvL.net
>>276
ロングポーリングの実装について勉強しといで
単にタイムアウトを無期限にする実装のことをロングポーリングとは言わない
287:デフォルトの名無しさん
17/12/08 11:44:45.00 oxsZSnq/.net
>>280
うん、実装次第だよね。
無期限か、プロキシに切られる寸前にするか、10分にするか、どうでも。
無期限はCouchDBのchange監視なんかは、ほっといたら無期限になるんじゃなかったっけ?
ログが大きくなったり他のを埋めるほどのリクエストは問題だと思うけど。特にイントラでの運用だと。
事例調べてきたらいいのになぁ
288:デフォルトの名無しさん
17/12/08 12:25:41.51 IbEiOVbO.net
>>279
?
289:デフォルトの名無しさん
17/12/08 12:27:34.90 IbEiOVbO.net
イベント使う機会ある?
290:デフォルトの名無しさん
17/12/08 12:44:05.29 M8mJAXMK.net
>>283
無い人はそれでいいよ
自分には~いらないとか~必要ないとかそういうこと言いあうスレじゃないんで
291:デフォルトの名無しさん
17/12/08 12:53:05.93 eUH+zyLO.net
>>284
単純に興味がある
みんななにに使ってるだろう。
そもそも要らないとは一言も
292:デフォルトの名無しさん
17/12/08 12:56:22.31 n5uOCz3i.net
>>285
UIアプリつくったことないの?
イベントだらけやん
293:デフォルトの名無しさん
17/12/08 12:58:10.32 eUH+zyLO.net
>>286
うん。UIしか俺も使わん。
それ以外にある?
UIのはデザイナが勝手にコーディングするからイベントに触れることがない。
294:デフォルトの名無しさん
17/12/08 12:58:14.04 PXTxgSdc.net
>>280
> 単にタイムアウトを無期限にする実装のことをロングポーリングとは言わない
そんなことを思ってるのは君だけ
マジでちょっと勉強してきた方がいいぞ
今だと単なるアホにしか見えてないし
295:デフォルトの名無しさん
17/12/08 13:04:34.05 LezyuZlt.net
>>287
通信アプリとかデータが来たらオレオレイベント発生させる。
296:デフォルトの名無しさん
17/12/08 13:11:44.12 T81djMMQ.net
あらゆるクラスにログ出力のイベントつけちゃう
297:デフォルトの名無しさん
17/12/08 13:19:11.96 zPIj5vhG.net
ID変わってるかもですが、>>193です。
反応できてないですが、皆さんの議論は参考にさせて頂いています。
SignalRですか?少し調べてみたのですが、目的に合致しているかもしれません。
ですが、後だしなのですが、今回対象になっているサーバがframework 3.5で、
現在運用されているwebアプリはVS2008で開発されています。
ここに追加する形で考えているため、SignalRは使えません。
(別の場所に同じようなサーバがあり、こちらは去年立ち上げたばかりで、水平展開することになり、かつ、私が担当する事になったら是非ともSignalRなりを勉強したいと思っています。)
そこで、やはりTimerを使う事になるかなと思っているのですが、気になる点があるので教えていただければありがたいです。
ログが大きくなるとあるのですが、意識してなくてもログが記録されているものなのですか?
そのログはどこで確認でき、ログを残さなくすることはできないのでしょうか?
298:デフォルトの名無しさん
17/12/08 13:23:25.17 LezyuZlt.net
>>291
IISのログの事だろうけど気にしなくても良いでしょ。
299:デフォルトの名無しさん
17/12/08 13:28:18.22 Xls5mA2Y.net
プロパティー変化時の~Changedイベントは普通に多用するでしょう。
非同期処理完了をイベントで通知するのは非同期メソッドが出来たので
流行らなくなったね。
300:デフォルトの名無しさん
17/12/08 14:02:11.06 PpIHj1rp.net
最近はイベントも種類が増えたね
・x:Bindによるイベントバインディング
・EventAggregatorって言う集約イベント
・Rxや、その派生のReactiveProperty
従来型はあまり使わなくなったね。
301:デフォルトの名無しさん
17/12/08 14:10:42.44 M8mJAXMK.net
>>287
最初の質問は「イベント使う機会ある?」だったけど、相手によってどんどん変えるの?
動的にコントロール追加する時とかデザイナでできない
イベントが多重発生する状況のときは処理中に止めて終わったらイベントを再開する
他にもあるだろうけど自分が遭遇する機会無いのならそれでいいじゃん
>>291
質問続けるのならどこまでサーバー側をいじれるかも書いてほしい
一番簡単なのが他の人も書いているけどサーバー側でステータス用意して
クライアント側がそれを取りに行くだけの処理の時だから
302:デフォルトの名無しさん
17/12/08 14:16:37.32 yJmj+jOP.net
PerformanceCounterって、
OS起動直後からしばらく立たないと使えないとかの制限あるんですかね?
303:デフォルトの名無しさん
17/12/08 14:45:49.73 IbEiOVbO.net
>>295
なんも変わってなくね
最初から「UIしか使わんやろ」オンリーですが?
304:デフォルトの名無しさん
17/12/08 14:52:00.48 IbEiOVbO.net
>自分が遭遇する機会無いのならそれでいいじゃん
なにをそんなにイカってるのか分からんわ。
「イベントってUIしか使わなくなくね?イベントの使い道他になにがあるの?」
単純な疑問に突然キレられても困惑よ。
305:デフォルトの名無しさん
17/12/08 15:19:35.30 FTlzMntS.net
ここのスレの住人は「C#の~要らなくね?」って意見に過敏だからなwwwww C#信者だから当たり前かなw
要らないとは言ってなくてもそう解釈されるんじゃよw
306:デフォルトの名無しさん
17/12/08 15:22:00.68 XHPT3EtZ.net
あのさぁ、c#の#って要らなくねえ?
って言ってみる。
307:デフォルトの名無しさん
17/12/08 15:37:29.35 NIv2jCgd.net
要りますよ、おじいちゃん。
308:デフォルトの名無しさん
17/12/08 15:43:54.34 XHPT3EtZ.net
#を取ったら、オブジェクト指向もジェネリックスもラムダ式も例外もイベントも無くなって平和になるべ?
309:デフォルトの名無しさん
17/12/08 16:08:01.83 zPIj5vhG.net
>>295
失礼しました。
サーバは、frameworkのインストールとか、既存の動いているソフトをいじるとかはできないですが、
新たなソフト(Webでもローカルexeでも)を動かしたり、フォルダやファイルの操作は自由にできます。
>一番簡単なのが他の人も書いているけどサーバー側でステータス用意して
>クライアント側がそれを取りに行くだけの処理の時だから
自分に理解できない事は脳内でスルーしてしまっているかも。
これは別途、更新したファイルのリストを作っておくとかって事でしょうか?
確かに作成されたファイルを、各リクエスト(=開いてるブラウザ、ですよね?)毎のTimerイベントで行うのは非効率ですね。
私のレベルでは、サーバでローカルアプリを動かして、何らかのファイルなりDBに出力するくらいしか思いつきません。
Webアプリ内で、同等の事とかできればいいんでしょうけど。
310:デフォルトの名無しさん
17/12/08 18:12:13.39 oxsZSnq/.net
>>291
記録されてる。IISの設定次第。
残さないってのは、邪魔なログがある以上に困るのでやめて。
>>292
IISのログだけど、障害調査する側に回ったら、気にしてほしいと願うようになると思う。
311:デフォルトの名無しさん
17/12/08 18:55:14.76 Hk+pFmDF.net
C#だけの話では無いのですが、インスタンス作られたら自分の仕事するだけでフィールドもパブリックメソッドも無いクラスって、OOP的にはアンチパターンでしょうか
312:デフォルトの名無しさん
17/12/08 19:03:17.13 cJ57jE1N.net
>>305
パターンというのはみんなが繰り返しやるからパターンと呼ばれる
だれもそんな設計しないと思うので
何かのアンチではあってもアンチパターンではないと思う
313:デフォルトの名無しさん
17/12/08 19:11:34.28 PpC6VnTr.net
>>305
フィールドを使いたいなら分からないでもないが、フィールドも使わないんだったら単なる静的メソッドでいいだろ
あえて変なスタイルを採用する積極的理由がない
314:デフォルトの名無しさん
17/12/08 19:22:05.40 Vo/E3SIp.net
>>305
コンストラクタの中で処理するのはアンチパターンに入るかも
315:デフォルトの名無しさん
17/12/08 21:13:55.11 l65xZylR.net
>>308
コンストラクタだけで完結させるのはやはりアンチパターンですよね
データベース相手で、パブリックメソッドが一つしかないクラスを作った時に、コンストラクタで全部やっちゃえば良いねと作っちゃったんですけど、こんなことしてるクラス見たこと
316:無いので不安に思い
317:デフォルトの名無しさん
17/12/08 21:46:31.29 T5yPQbL2.net
コンストラクタ内で全部やっちゃうのは、
コンストラクタの責務を超えてる気がするなー
318:デフォルトの名無しさん
17/12/08 21:48:13.33 T5yPQbL2.net
数年後とかに(または自分以外の人間が)、コードを改修するハメになった時に
うっかりその派生クラスとか作ると、ヘンな副作用を起こしそうなので
ちゃんとメソッドに分割した方がお行儀が良い、と思う
319:デフォルトの名無しさん
17/12/08 22:06:43.30 nAKkewiT.net
>>305
既に指摘されてる通り、アンチどうこう以前に普通は無意味だからやらないけど、
staticクラスは多態できない(インターフェイスも実装できないし継承関係も作れない)ので、
多態を実現するために例え状態(フィールドやプロパティ)を持たなくてもインスタンスを
作ることは理屈上はありえると思う。
私しゃーやったことありませんが
320:デフォルトの名無しさん
17/12/08 22:39:43.44 zVfb1lJX.net
>>305
staticメソッドじゃダメなの?
321:デフォルトの名無しさん
17/12/08 22:48:26.92 8QW3tG+Y.net
>>306
ところで設計じゃないよ
コーディングプランだからw
322:デフォルトの名無しさん
17/12/08 23:59:26.68 ahDNvKU9.net
>>314
ん?
何が違うんだ?
323:デフォルトの名無しさん
17/12/09 18:25:35.22 yz0yK5Nn.net
C++でゲーム作っていた者ですが
今後はC#で作っていこうと勉強しています
C++あがりのプログラマがC#で間違い易い、
ありがちなミスを教えてください。
324:デフォルトの名無しさん
17/12/09 18:46:18.09 Yi9bTbLW.net
迷わず行けよ行けば分かるさダー
325:デフォルトの名無しさん
17/12/09 18:51:16.17 DLrsngiD.net
C++とかいう高度な言語使えないから分からんにゃーい
326:デフォルトの名無しさん
17/12/09 19:05:02.00 9A22gNCm.net
>>316
ミスじゃないけどGCでイライラしそう
327:デフォルトの名無しさん
17/12/09 19:14:58.17 x4vPcfX+.net
>>316
速度最適化を気にしすぎないことかな
328:デフォルトの名無しさん
17/12/09 19:22:18.63 fpEjaZID.net
>>316
C++プログラマがC#でよくやる間違い
・クラス名の頭にCを付ける
・名前空間やメソッド名を先頭小文字にしたりアンスコ入れたりする
・using 名前空間; を恐れる
・int を System.Int32 と書きたがる
・ループ大好き
・new を嫌う
・やたらとenumを多用する
・エラーを戻り値で返す
329:デフォルトの名無しさん
17/12/09 19:26:45.34 fpEjaZID.net
あと、
・やたらとでかいクラスを作る
も追加で
C++はクラス定義が面倒なので心理的に大きなクラスを作る癖がつきがち
330:デフォルトの名無しさん
17/12/09 19:39:14.82 Avl0kHLY.net
C#はRADありきで細かい部分はちょくちょくリファレンスを読んで確認するしかない
331:デフォルトの名無しさん
17/12/09 19:42:11.92 kSf52iSg.net
>>321
> ・やたらとenumを多用する
具体的な解説Please。
C#でもよく使うと思うけど。
332:デフォルトの名無しさん
17/12/09 19:51:35.61 zCNCLFXW.net
templateの感覚でGenericを使おうとして発狂する
333:デフォルトの名無しさん
17/12/09 19:55:26.03 fpEjaZID.net
>>324
C++で多態を使うなら便利なRAIIを捨てなくてはならない(スマポを使うこともできるが、普通は可能なら避けたいと考える)
多態を使う心理的ハードルが高くなるわけだ
334:デフォルトの名無しさん
17/12/09 20:41:18.42 1hSvWs3J.net
>>319
かなり持続性を求めるアプリ?FullGCの影響くらうのって1秒くらいだよね?
335:デフォルトの名無しさん
17/12/09 20:44:23.80 LewaYlvd.net
地雷原のC++を歩けるなら舗装道路のC#なんか楽勝だろと思うけど、
落とし穴があるとしたらこういう驕りかもしれんね。
C#出た頃C#によく分からん難癖付けてたのはJavaな人で、C++erはむしろ
好意的な評価の人が多かったような気がするから考えすぎかもしれんけど
336:デフォルトの名無しさん
17/12/09 20:46:31.46 kSf52iSg.net
>>326
それとenumに何の関係が?
337:デフォルトの名無しさん
17/12/09 21:10:41.34 jyWlwvil.net
>>327
1秒ももたついたらクソゲーの烙印押されと思うぞ
338:デフォルトの名無しさん
17/12/09 21:16:00.04 DLrsngiD.net
ゲーム開発かよ
339:デフォルトの名無しさん
17/12/09 21:31:07.48 kSf52iSg.net
動画でも音声でもリアルタイム処理が必要な場合は1秒でも止まると困るね。
340:デフォルトの名無しさん
17/12/09 21:36:14.68 bldOuh/e.net
10秒に一度ぐらいずつ強制gcやっときゃいいよ
341:デフォルトの名無しさん
17/12/09 21:41:11.39 LewaYlvd.net
大昔のPC-98じゃあるまいしそんな止まらないからw
何でGCの話になるといつもこうなのw
何十年前の話をしてるんだよw
342:デフォルトの名無しさん
17/12/09 21:44:43.70 CMBXHaeA.net
GCで体感できるほどもたついたことないな
343:デフォルトの名無しさん
17/12/09 21:53:25.70 fpEjaZID.net
>>329
さすがにenumと多態が結びつかないのはオブジェクト指向の理解不足
344:デフォルトの名無しさん
17/12/09 21:56:19.74 DLrsngiD.net
>>336
分からないから詳しく
345:デフォルトの名無しさん
17/12/09 22:01:20.70 bldOuh/e.net
enum継承できねーから使わねーよ
346:デフォルトの名無しさん
17/12/09 22:03:05.57 DLrsngiD.net
>>338
そういうことか
347:デフォルトの名無しさん
17/12/09 22:06:49.31 LNYXpqZE.net
んー、それでもC++の人が多用するって理由とそれがC#じゃ間違いって理由がよくわからん。
348:デフォルトの名無しさん
17/12/09 22:09:24.80 DLrsngiD.net
>>340
C++使いは多態を使いたがらないから、多態使わないならenumをなんの懸念もなく使えるから使いまくるってことかな?
349:デフォルトの名無しさん
17/12/09 22:12:55.12 CMBXHaeA.net
この流れは質問に対して必要なのか?
後今更だが
>>321
>・名前空間やメソッド名を先頭小文字にしたりアンスコ入れたりする
これは非推奨だがビルドが通るので間違いとは言えない
350:デフォルトの名無しさん
17/12/09 22:13:29.50 jyWlwvil.net
enum を継承? w
351:デフォルトの名無しさん
17/12/09 22:15:27.00 DLrsngiD.net
>>342
エラーじゃないならいいってことならそれ以外のやつも当てはまるだろ?
なぜそれだけピックアップしたんだ?
352:デフォルトの名無しさん
17/12/09 22:17:17.61 CMBXHaeA.net
>>344
他は知らん
353:デフォルトの名無しさん
17/12/09 22:20:10.10 DLrsngiD.net
>>343
クラスの中にインナーenum(?)を定義したら、そのクラス継承してもそのenumが未定義になるってことかな?
354:デフォルトの名無しさん
17/12/09 22:28:13.72 Er9Ndq7R.net
最近enumが~って言う初心者が一人紛れ込んだだけだから
相手にしなくていいよ
355:デフォルトの名無しさん
17/12/10 00:39:39.78 okOunyow.net
言語そのものの事ではないのだけど。
Windows10 の PC に入れっぱなしにしてた VS Community 2015 で C# で Webアプリ(MVC)の新規プロジェクトを作成して、
それをそのままビルド→実行するとブラウザが起動して(これは当たり前)、
サーバーエラーとなって「指定された引数は、有効な値の範囲内にありません。」て表示する&
ダイアログで「Mirosoft.VsHub.Server.HttpHost64.exeは動作を停止しました」って出ます。
HttpHost64.exeの方は連続して出てて、 KB3090034 を当てたら最初の1回だけになりました。
原因が分からないので同じような症状を経験、解決した人か心当たりのある方がいたら対処法を教えて欲しいです。
356:デフォルトの名無しさん
17/12/10 02:07:22.55 40kmfkZ7.net
これは?
URLリンク(northbrain.org)
357:デフォルトの名無しさん
17/12/10 10:45:19.56 +bg1ulUg.net
enum大好きな人多いよね
358:デフォルトの名無しさん
17/12/10 10:51:21.68 cFJQGF3i.net
処理結果表すのに文字列やint使いたくないからenum使っているけど、他に良い方法あるかな?
359:デフォルトの名無しさん
17/12/10 10:56:20.84 OKZOYtiA.net
>>351
設計の筋が悪いんだと思うよ
たとえばデータ取得処理が返すべきは成功コードorエラーコードではなく
取得したデータそのものであり、失敗したら例外を投げる
360:デフォルトの名無しさん
17/12/10 10:59:35.44 cFJQGF3i.net
ごめんなさい、例の子呼んじゃいました・・・
361:デフォルトの名無しさん
17/12/10 11:19:22.17 klwCxkV9.net
死ね
362:デフォルトの名無しさん
17/12/10 11:22:56.63 zEFqnqTD.net
質問があいまいな上に答えてもらった相手を例の子呼ばわりって何がしたいんだろう
文字列とint対応させて作りたいのならenum使うの自然だし変えようとしたらその設計変えるしかないわ
363:デフォルトの名無しさん
17/12/10 11:23:21.91 7Si01GpM.net
なんでこうも例外は嫌われなきゃいけないのか
364:デフォルトの名無しさん
17/12/10 11:24:00.35 DEQ8njbJ.net
あいつが召喚されるから
365:デフォルトの名無しさん
17/12/10 11:24:37.45 1RSLLPBx.net
>>351
オブジェクトを返せばいいよ
366:デフォルトの名無しさん
17/12/10 11:25:55.23 1RSLLPBx.net
例外を使えないならOOPやめたほうがいい
というかプログラマやめたら?
同僚からしたらすげえ邪魔なんだけど
367:デフォルトの名無しさん
17/12/10 11:27:29.98 zEFqnqTD.net
>>356
>>359
例外の話じゃなかったのに処理結果=例外なんだ
368:デフォルトの名無しさん
17/12/10 11:31:38.35 1RSLLPBx.net
>>360
一般論的に言って例外使えない子は退職して欲しいってだけだよ
>>355に対する答えは>>359で出してるでしょ
369:デフォルトの名無しさん
17/12/10 11:32:45.27 K5F4H8OZ.net
例外も内部にステータス持つなら同じことだから、要はenumのかわりにクラスを使えということなんだろう。
必ずしもそれが筋が良いとは思わんけどな。
370:デフォルトの名無しさん
17/12/10 11:36:28.15 zEFqnqTD.net
>>361
例外使えないとか使わない前提じゃないけどもう日本語通じないか
ファイルダイアログも使ったことないんだろうね
371:デフォルトの名無しさん
17/12/10 11:36:52.38 1RSLLPBx.net
>>361
>>>360
>一般論的に言って例外使えない子は退職して欲しいってだけだよ
>>>355に対する答えは>>359で出してるでしょ
安価ミス
>>355に対する答えは>>358で出してるでしょ
372:デフォルトの名無しさん
17/12/10 11:38:37.58 zEFqnqTD.net
>>364
ああごめん
アンカーまともに判断して意味不明な煽りだと勘違いしたわ
373:デフォルトの名無しさん
17/12/10 11:55:32.54 7Si01GpM.net
enumで戻り値を返した先にはswitch~case文の羅列が待っている
それは、オブジェクト指向として美しくない
とか言って見る
374:デフォルトの名無しさん
17/12/10 12:15:32.85 I3oRkg9y.net
>>350
エナム?イーナム?
375:デフォルトの名無しさん
17/12/10 12:16:06.09 fCk6aJzv.net
メソッドの結果が何種類かある
どの結果なら何をするかはメソッド自体は知らない
なのでenumを返してクライアントに判断してもらう
って理由でenumならなんの問題もない
enum switch地獄に陥るのはクライアントの実装の問題なので解消できる問題だな
イベントでもいいけどイベントは管理しにくいからできれば避けたい
376:347
17/12/10 12:24:22.81 okOunyow.net
>>349
ありがとうございます。
HttpHost64.exe のエラーダイアログは出ないんですが、「指定された引数は、有効な値の範囲内にありません。」は同じでした。
本当になんなんだろう。。
377:デフォルトの名無しさん
17/12/10 12:25:57.85 w7IPLNC5.net
そんなもん地獄でもなんでもないわw
大袈裟なやつだなw
378:デフォルトの名無しさん
17/12/10 12:42:01.80 hfoTCgp6.net
なんでEnumダメなん?.NET標準ライブラリでもよく使われてるやん
379:デフォルトの名無しさん
17/12/10 12:44:31.00 KNXh5gp+.net
補完効くから便利だもんね
switchとか全部書いてくれるし
380:デフォルトの名無しさん
17/12/10 13:02:49.80 Lqf3YhZb.net
>>366
その主張一時期流行ったけど、今になって冷静に考えると
かなり羹に懲りて膾吹いてる感がある
381:デフォルトの名無しさん
17/12/10 13:08:33.64 1RSLLPBx.net
ケースバイケース
microsoftが使ってれば万能というわけでもないし使ってなければダメというわけでも無い
382:デフォルトの名無しさん
17/12/10 13:24:00.94 TdgJU12g.net
ダメって言ってる奴の頭がおかしいだけ
enum の継承とか意味わからんし
383:デフォルトの名無しさん
17/12/10 13:31:07.35 Xq7qpXg6.net
>>375
ステートマシン作ってそのクラスを継承すると欲しくなる
384:デフォルトの名無しさん
17/12/10 13:33:07.99 1RSLLPBx.net
ダメとは言わないがコード整理するとenumが自然と消える
385:デフォルトの名無しさん
17/12/10 14:00:03.48 K5F4H8OZ.net
どこでどういうタイミングで消えるのか興味深い
386:デフォルトの名無しさん
17/12/10 14:11:52.06 1RSLLPBx.net
>>378
例えばこういう感じ
void ExternalCode(MyEnum e) {
int x = 0;
if (e == MyEnum.A) x = 1;
if (e == MyEnum.B) x = 2;
Console.WriteLine(x) }
↓
static class MyEnumEx {
public static int GetX(this MyEnum e) {
if (e == MyEnum.A) return 1;
if (e == MyEnum.B) return 2;
return 0; } }
void ExternalCode(MyEnum e) {
Console.WriteLine(e.GetX()); }
↓
class MyEnumBase {
public virtual int GetX() { return 0; } }
class MyEnumA : MyEnumBase {
public override int GetX() { return 1; } }
class MyEnumB : MyEnumBase {
public override int GetX() { return 2; } }
void ExternalCode(MyEnumBase e) {
Console.WriteLine(e.GetX()); }
387:デフォルトの名無しさん
17/12/10 14:20:47.04 K5F4H8OZ.net
ありがとう。
言いたいことはわかったけど、それって整理されたの?という疑問は残る。
この例だとenumで分岐されるのがint xという単一の値を決定する処理だけだけど、
ExternalCode() には class MyEnumEx を用意して、MyEnumを使う別の処理には
また別のclassを用意して、ってなるわけだよね。
388:デフォルトの名無しさん
17/12/10 14:23:46.87 KNXh5gp+.net
君のenumの使い方がそもそもおかしいだけで、普通はオプション的なものに使うからそうはならないだろう
389:デフォルトの名無しさん
17/12/10 14:44:45.17 1RSLLPBx.net
>>380
ならないわけだよ
MyEnumに関する責務が分散していることが問題だから整理して凝集させるわけだ
それなのに責務をまた複数のクラスに分散させてちゃ意味が無いだろう
別の場所でyを取得する処理が書かれてるなら
class MyEnumBase {
public virtual int GetX() { return 0; }
public virtual int GetY() { ... }
}
というように拡張していけばいい
390:デフォルトの名無しさん
17/12/10 14:50:12.52 o/NiMYKz.net
>>376
サブステートを定義するとかしかやりようがないような気がするけど...
enum 使わなきゃ綺麗に書けるの?
391:デフォルトの名無しさん
17/12/10 15:30:45.08 hRp3Q2MJ.net
>>369
最新の2017でないのなら専用スレで聞け
Visual Studio 2015 Part8
スレリンク(tech板)
VSは複数バージョン入れると干渉して稀に不具合起きるらしいけどその辺は自己責任
392:デフォルトの名無しさん
17/12/10 16:01:41.00 K5F4H8OZ.net
>>382
そこ集めちゃうの?という印象。
たとえば enum System.IO.FileMode のようなものを class で置き換えるとした場合、せっかく
抽象化したのに操作対象毎に異なる実装をそこに全部書くことを想定しているんだろうか。
393:デフォルトの名無しさん
17/12/10 16:32:25.95 1RSLLPBx.net
>>385
操作対象はインターフェースで分離する
FileModeはFileModeに関連する責務だけを担当する
操作対象に関する責務はFileModeには無い
394:デフォルトの名無しさん
17/12/10 16:41:37.05 1RSLLPBx.net
むろん全てのenumをオブジェクトにすべきと言ってるわけではない
ビジネスレイヤではオブジェクトにしたほうが良い場面が圧倒的に多いが
単なるフラグセットとみなしたほうが有利な場面もそりゃあるだろう
395:デフォルトの名無しさん
17/12/10 16:56:48.76 K5F4H8OZ.net
>操作対象に関する責務はFileModeには無い
だからね、例えばローカルファイルとネットワークドライブ上のファイルとで同じFileModeに対する
操作手順が異なるとした場合、それをどこに実装するかって話。
1つの class Enum に実装するのは論外として、インターフェースと実装クラスに分離するなら>>380の通り。
あるいはFileクラスに掛かる実装は class Enum 側に持たないというならenumのままでもいいじゃん、となる。
>>387
結局そうだよね。圧倒的かどうかは知らんけどw
396:デフォルトの名無しさん
17/12/10 16:57:04.47 AsjcCxkl.net
xがなにで1と2でどう違うのか分からんが
まずxをクラス(か構造体)にするべきだと思うんだが
397:デフォルトの名無しさん
17/12/10 16:59:10.81 1RSLLPBx.net
>>389
大した意味のないサンプルに深入りするの馬鹿馬鹿しくない?
398:デフォルトの名無しさん
17/12/10 17:11:04.47 QtRE0gJ3.net
ほらキチガイが湧いたwww
399:デフォルトの名無しさん
17/12/10 17:14:47.78 IOEOCVr0.net
例外も列挙体もLINQもインタフェースもイラネってかwwwwww
400:デフォルトの名無しさん
17/12/10 17:31:58.06 klwCxkV9.net
死ねで終わらせとけばいいのに相手しやがって死ね
401:デフォルトの名無しさん
17/12/10 17:55:36.64 CnpEkAKU.net
昔流行ったswitchを無くせって話は、元々はJavaみたいな関数ポインタもデリゲートも使えない言語で
ジャンプテーブルをどうやって実現するかって話(要するにいかに効率化するかって目線の話)
だったと思うんだけど、それが途中からこじつけか何か知らんけどOOP敵に美しいとか正しいって
話にすり替わった印象しかないね。
そりゃ多態使ってswitch無くした方が美しく可読的に書ける場合もあるけど、
そうじゃない場合の方が圧倒的に多い。
要するに上にも書いたけど、羹に懲りて膾を吹く類の話だよね。
今でもこういうこと言ってる人の話は真に受けちゃダメだと思う
402:デフォルトの名無しさん
17/12/10 18:11:31.06 u72ghqtY.net
enumをクラス化でシンプルにできるのはシングルのenumで状態が決まる場合
複合的な状態を持ってるとまあ理解に苦しむコードになるよ
ifとswitchのほうが読みやすく理解しやすいならそっちを使えばいい
403:デフォルトの名無しさん
17/12/10 18:13:44.60 o/NiMYKz.net
>>390
例示されたサンプルがおかしいって言われてるって言うことをそろそろ気づこうか
404:デフォルトの名無しさん
17/12/10 18:15:53.82 40kmfkZ7.net
しょーもな
首吊って死ねば?
405:デフォルトの名無しさん
17/12/10 18:30:36.92 1RSLLPBx.net
>>394
オブジェクト指向をやるならカプセル化や単一責務は基本中の基本
enum switchはそれを全部ぶち壊しにする
だからやめとけって世界中で言われてんだよ
406:デフォルトの名無しさん
17/12/10 18:39:54.73 u72ghqtY.net
それは使い方が悪いだけだよ
407:デフォルトの名無しさん
17/12/10 18:41:44.28 o/NiMYKz.net
>>398
お前の狭い世界はどうでもいい
408:デフォルトの名無しさん
17/12/10 18:45:22.58 1RSLLPBx.net
まあ初心者スレだしOOPわからんってのも仕方がないか…
何年後かには理解できてると思う
409:デフォルトの名無しさん
17/12/10 18:47:16.85 u72ghqtY.net
>>379
このコートの最初が悪くてあとが良いとは限らないと思うが
これ100個あったとして
どこぞの言語みたいに一クラス一ファイル縛りがあったら100個ファイルが必要
それに見通しが非常に悪い
switchも見通しが悪いけど100個のクラスの100メソッドを検索で渡るよりまし
410:デフォルトの名無しさん
17/12/10 18:49:15.44 u72ghqtY.net
状態によって見やすいコードはかわるけどswitch==悪はfalseだろ
411:デフォルトの名無しさん
17/12/10 18:52:06.23 40kmfkZ7.net
>>403
草
412:デフォルトの名無しさん
17/12/10 18:52:09.72 in4pjWGE.net
雑談スレか
413:デフォルトの名無しさん
17/12/10 18:55:12.88 1RSLLPBx.net
>>402
すまんがまず100このenum値って時点で設計ミスだと思うぞ
普通の業務ロジックでそんな区分分けみたことないわ
大量のenumといったらせいぜいリソースIDのラベル化とか?
そ�
414:ネんまでクラス化はしないよ なんでもクラス化するわけじゃないってなんどもレスしてるよね? まあ仮に区分が膨大な場合でもそれがビジネス上の振る舞いを持つならクラスにしたほうがいいぞ クラスにしたら見通し悪いっていうけど そりゃビジネスそのものが見通し悪いんだから仕方がないか クラスっていう保護がなければもっと悲惨なことになる
415:347
17/12/10 18:55:31.09 okOunyow.net
>>384
誘導ありがとうございます。
416:デフォルトの名無しさん
17/12/10 18:57:52.94 u72ghqtY.net
もともと責務と言いながら
状態を伝えるだけのenumをクラスに拡張しちゃって責務の内容を広げっちゃって
保守性を落としてるんだからまだまだだね
417:デフォルトの名無しさん
17/12/10 18:59:10.78 u72ghqtY.net
>>406
1つ目と3つ目を比べると1つ目のほうがすぐれたコードだと思う
理解しやすい
それ以上優れてる理由はない
418:デフォルトの名無しさん
17/12/10 19:02:50.61 1RSLLPBx.net
enumが100個あってシステムのあっちこっちに分岐があります
仕様が変わりました値Aの仕様が変わりました
enumの場合:
システムをenumのAで検索
あっちこっちでヒットしたコードを慎重に整合性を確認しながら修正
もしかしたら見逃しがあるかもしれないと不安を抱えながら作業
Aを修正してるのに周りの他の値の場合の処理が凄まじいノイズになってめまいがする
コードが他の責務に埋め込まれてるのでテストは容易ではない
クラスの場合:
派生クラスAが定義されてるファイルを開く
1つのファイルに集中できるので楽々修正
Aに関する処理は全部このファイルにあるので見逃しも無い
他の値の処理が周りに無いのでクリアな視界で作業可能
クラスになってるのでテストは超簡単
419:デフォルトの名無しさん
17/12/10 19:07:08.35 1RSLLPBx.net
enum値が削除されたら?
新しいenum値が追加されたら?
クラス化されてないと超しんどいぞ
システムにばら撒かれたenum100個なんて管理しきれないよ
OOPの言語と開発環境ならクラス100個は楽勝で管理できるけどな
420:デフォルトの名無しさん
17/12/10 19:07:59.48 u72ghqtY.net
>>410
クラスを使うべき時は使う
そうじゃないときはswitch enumでも十分
421:デフォルトの名無しさん
17/12/10 19:09:21.56 HHgBYreh.net
enumなんて存在すら忘れてた
もうクセでデータ保持するクラス作っちゃってたわ
やっぱ固定値の列挙はenumの方がええんやろか
422:デフォルトの名無しさん
17/12/10 19:10:43.29 1RSLLPBx.net
>>412
それでいいよ
ビジネスが入り組んできたらクラスにリファクタリングすればいい
俺は最初からクラスにしてるけどね