ふらっと C#,C♯,C#(初心者用) Part134

■ このスレッドは過去ログ倉庫に格納されています
2017/11/28(火) 21:30:48.55ID:7U+HR4FY
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。

内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。

なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/

■コードを貼る場合は↓を使いましょう。
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
736デフォルトの名無しさん
垢版 |
2017/12/18(月) 23:28:28.84ID:pniu1iMQ
>>734
ワシの環境だとこれで成功したんだがどこがやりたいことと違うんやろう
https://ideone.com/4MqfUE
2017/12/19(火) 00:49:42.79ID:aZpIRKJe
>>735
その2 JsonConverterを使ってデシリアライズの10行目p.nameでnameが見えずエラーになります…

>>736
デバックを行うと
foreach (var r in Test.status
{
Console.WriteLine(r.name);
}
のrの部分がnullになり結果が何も表示されません
cvrl + spaceでr.name自体は出るのですが…
2017/12/19(火) 00:53:59.81ID:ySpyuYdG
>>737
変数名Testを違うのに変えてもダメですか?
2017/12/19(火) 01:03:43.75ID:aZpIRKJe
>>738
deserializeに変えてみても駄目ですね
とりあえず今日は寝て明日先輩にも聞いてみます
2017/12/19(火) 07:59:35.15ID:ChgNtW7Q
c#にレクトトラッカーってないですか?
2017/12/19(火) 08:27:59.60ID:JkA1xsmg
非同期な複数のスレッドから、staticクラスの中のstreamwriterでcsvにログを書いてます
タイミングにより、ファイル競合?ロック?するようで、一つのスレッドからしかログが出力されません
ロック解除を待機するみたいなことはどうやるのでしょうか?
2017/12/19(火) 08:36:09.07ID:ChgNtW7Q
>>741
俺、そういうログ一生懸命作ろうとしたらスレッド毎にログ出してよって言われたよ
結局待ちが発生すると
ログの発生タイミングっていうか順序が全くの嘘っぱちになっちゃうじゃん
そんなゴミいらねーって言われたぜ
上司がいるならちょっと仕様確認オススメ
2017/12/19(火) 08:44:00.33ID:LhTNVyY+
Queue使えばよくね
ログ出力メソッドはエンキューするだけ
ログ出力はワーカスレッドでのんびりやればいい
2017/12/19(火) 09:13:04.87ID:nH54/Jdj
素直にLoggingライブラリ使う
メンテナンスする人の気持ちも考えなきゃ
2017/12/19(火) 09:18:25.50ID:yH1cU4+B
いつも思うけど、やっぱAutoRrsetとかのイベント付きキューなんてないの?
2017/12/19(火) 09:53:23.28ID:33gf6qei
>>745
BlockingQueueのコンストラクタにConcurrentQueueを渡す
2017/12/19(火) 10:25:11.81ID:OVvTmQOX
BlockingCollectionだな
ちなみにコンストラクタに基になるコレクション渡さなかったら既定でConcurrentQueueが使われる
2017/12/19(火) 10:28:02.49ID:gf33i/87
>>741
SeriLogの実装みてみ
2017/12/19(火) 10:32:13.69ID:NMj9FFtI
やってみた感じぶっちゃけ難しい
片方のスレッドが超忙しいとき待ちが発生すると他のスレッドが全く動かなくなっちゃう
2017/12/19(火) 11:33:40.95ID:Ck77l9Yv
もう書いてる人がいるけど、前後関係が重要なら文字通りバッファーを設けるだけだよね
ライブラリのQueueは使いづらいからたぶん自作することになるけど、そんな難しくない
2017/12/19(火) 11:52:48.64ID:VR9xxmjw
Nlogじゃないの?
2017/12/19(火) 12:08:45.23ID:K2Dj0raT
C#特有というわけでは無いですが、例えば抽象クラス「費用」を作った後、費用合計を求めたい場合、費用の各サブクラスから値を取得し合算するのと「費用合計」クラスを作って、そこだけに問い合わせるの、どちらが良い作りでしょうか
2017/12/19(火) 12:10:26.76ID:yH1cU4+B
>>746
>>747
へーそうかい!?
調査してみるよ。

ありがとうね
754741
垢版 |
2017/12/19(火) 12:37:26.95ID:JkA1xsmg
順序は気にしません
2つのスレッドそれぞれから1回/秒ずつ出力されるだけです
2017/12/19(火) 12:43:08.19ID:tMFeAU0g
>>752
サンプルコードを見せてよ
2017/12/19(火) 14:22:15.69ID:Ck77l9Yv
>>752
何を聞きたいのかよく分からないw
たぶん俺だけじゃないと思う

とりあえず「費用合計」クラスは普通に考えればない

合計を求める費用を集約しているオブジェクトがあるなら、そのオブジェクトに
合計させる(LINQのSum使ってもいいし自分でメソッドかプロパティを書いてもいい)のが普通

そんなものなくても配列にでもぶち込んでLINQ使うだけじゃないの?
2017/12/19(火) 14:32:35.77ID:f0pyN6AV
いやなかなかいい質問だと思うよ
初心者でそこに気付けるのはいい視点だと思う
素質がある

中級者でもそこに全然思いが至らない人がいて困る
素質のない人だ


Sumを呼ぶとその時点で計算が行われるのことが困る場合がある
10個スレッドがあってそれぞれでSUM呼ばれて値が一致しないとか
そのつどDB読んじゃって負荷がかかりすぎるとか
758デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:44:56.70ID:/RoT047O
>>752
費用クラスが合って費目毎にインスタンスを作るとか
費用合計クラスとか
何かを大きく勘違いしている
759デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:45:53.04ID:/RoT047O
才能なし最下位確定じゃ
2017/12/19(火) 14:47:19.61ID:RU/P54BS
費用合計の仕様次第じゃん
2017/12/19(火) 14:53:12.54ID:m20tEW6J
>>759
おまえ顔にハナクソ付いてんぞ
762デフォルトの名無しさん
垢版 |
2017/12/19(火) 14:55:25.58ID:/RoT047O
ウンコ確定
2017/12/19(火) 14:57:42.73ID:RU/P54BS
>>761
NG
ハナクソに顔が付いてる可能性を除外できてない
2017/12/19(火) 14:57:48.67ID:vDUVA/Ha
>>762
おじいちゃん口臭いですよ^^
765デフォルトの名無しさん
垢版 |
2017/12/19(火) 15:02:05.90ID:/RoT047O
それケツだ
766デフォルトの名無しさん
垢版 |
2017/12/19(火) 15:58:21.40ID:f0lLnGqp
ASP.NET MVCのControllerの処理で、そこだけでちょちょっと利用する
関数などが沢山増えて来てコードが数千行になって来たのだが、
そう言う関数はどこに置けばいいの?
MVPクラスの人の回答をお願いします。
2017/12/19(火) 16:10:19.74ID:RU/P54BS
partialだな(by一般兵)
2017/12/19(火) 16:37:05.61ID:EJrHySC4
partialとかブッコイて一般兵気取りかよw
見習いもいいとこだぜ。入隊前じゃねぇの?
2017/12/19(火) 16:41:36.67ID:0zOqWbHM
>>766
初心者スレにMVPクラスの人はいない
regionとTODOで整理したらいいだけじゃね
770デフォルトの名無しさん
垢版 |
2017/12/19(火) 16:53:03.26ID:8WX8gLVn
Controllerに何でも詰め込むからだろ
Modelにやらせればええのだ
2017/12/19(火) 17:05:55.38ID:RU/P54BS
>>768
代案を出せよMVP
2017/12/19(火) 17:48:31.52ID:TOTUMgYQ
俺が呼ばれた気がした
2017/12/19(火) 17:52:51.22ID:VU3/qJii
昔は相談室とこのスレにあの人が住んでたんだけどね
今もいるんだろうか?
2017/12/19(火) 18:37:30.91ID:ayXhJHgO
>>766
決まった答えはない
責務に応じて分割するだけ
775デフォルトの名無しさん
垢版 |
2017/12/19(火) 18:40:59.36ID:J+VWEpvK
「決まった答えはない」とか言うの決まった答えしかできない奴よくいるよねw
2017/12/19(火) 18:53:48.71ID:JM38580+
>>775
日本語www
777デフォルトの名無しさん
垢版 |
2017/12/19(火) 21:56:50.83ID:cjNZWQaj
費用合計クラスの者ですが、以下のようなクラス設計をしました(実装は一応英語です)
public abstract class 費用
{
public abstract int 金額();
}

public class 支払家賃 : 費用
{
public override int 金額()
{
return 100;
}
}

class 水道光熱費 : 費用
{
public override int 金額()
{
return 200;
}
}

費目が増えても多態で対応できるのでオブジェクト指向しているなと思ったのですが
費用合計を出すのに都度インスタンスを作るのがなんだか野暮ったく
一般的なやり方をしているのか気になり投稿しました
このような書き方は、何か問題があるでしょうか?
2017/12/19(火) 22:01:25.18ID:vSkEKb16
データベース使いなさい
779752
垢版 |
2017/12/19(火) 22:02:23.97ID:cjNZWQaj
ちなみに、費用クラスで各費目を管理し
費用合計や各費目の値を返すメソッドを作ろうと思ったのですが
抽象クラスに「費目」という名前を使ってしまったので
テンパっています

OOは命名が難しいなと
2017/12/19(火) 22:05:19.18ID:N/VqY3nf
ありがちな形にこだわるタイプか
継承しなきゃならないほど金額()が込みいっているのかは置いておいて「動けばいいんだよ」
2017/12/19(火) 22:06:13.10ID:MJol/7NU
全体見てないからなんとも言えんけど
その粒度でクラス作るとクラス図ってどうなるの?
2000項目あったら2000クラス作るの?
って心配になった

あとは動けばいいよ
2017/12/19(火) 22:12:15.71ID:7vxZYYFe
>>779
だから悪いけど結局何が聞きたいのか伝わってないと思うよw

public static class 費用
{
  public const int 支払家賃 = 100;
  public const int 水道光熱費 = 200;
  public const int 総費用 = 支払家賃 + 水道光熱費 ;
}

なんかこれで問題ないようにも聞こえるけどこれじゃダメなの?
2017/12/19(火) 22:12:45.55ID:XIiNWcV9
>>777
才能無し、問題外
以上
2017/12/19(火) 22:13:51.01ID:ySpyuYdG
>>783
クッサw
死ねよハゲ^^
2017/12/19(火) 22:15:56.11ID:XIiNWcV9
>>784
センスの欠片もない
キミにプログラム開発は無理
2017/12/19(火) 22:17:09.67ID:ySpyuYdG
>>785
口臭いです^^
歯磨きサボらないで下さい・・・
2017/12/19(火) 22:20:34.71ID:XIiNWcV9
>>786
ここまで酷いのは見たことがない
誰かが適切なアドバイスをしたとしてもキミは斜め45度下へぶっとぶだろう
上ではなく下だwww
2017/12/19(火) 22:21:50.93ID:Li3fAhD+
どうやったらこんなつまんないレスを返せるんだよ...
重症やな w
2017/12/19(火) 22:24:47.20ID:ySpyuYdG
>>787
顔赤くなってますよ^^
もっとクールなキャラだったような気がします・・・
790デフォルトの名無しさん
垢版 |
2017/12/19(火) 22:29:22.36ID:f0lLnGqp
MVPクラスの人は居ますか?
2017/12/19(火) 22:30:42.82ID:MJol/7NU
>>790
>>777をエントリーしといた
2017/12/19(火) 22:30:56.03ID:XIiNWcV9
>>789
余りにも寒いコードを見たものでなw
2017/12/19(火) 22:32:05.29ID:7vxZYYFe
VIP患者なら大勢いるねw
2017/12/19(火) 22:35:08.57ID:ySpyuYdG
>>792
誰と勘違いしているのでしょう・・・
IDはちゃんとチェックしましょうね^^
2017/12/19(火) 22:38:19.96ID:XIiNWcV9
>>794
>>777 の同類だろwww
2017/12/19(火) 22:41:32.93ID:ySpyuYdG
>>795
おやおや・・・
とても都合の良い解釈ですね^^
右も左も分からない初心者に「センス無し、問題外」なんて冷たい言葉をかけるのはやめましょうね・・・
2017/12/19(火) 22:50:03.39ID:z/JS3u8x
まあ、自分が駆け出しの頃に上司にそう言われたことの腹いせにここで鬱憤晴らしてるんだろうなぁ....
2017/12/19(火) 23:01:26.33ID:MJol/7NU
別にどう組んでも動くし
正解はないのかもな

ただ、この言語で表現できる中規模のまとまりをそんなプロパティレベルのもんに使われると粒度の把握がし難いなと

結局設計の良し悪しなんてソイツの気分だからね
2017/12/19(火) 23:48:04.54ID:QDUgEa5j
例が例だから粒度的におかしいけどこんなこともできますよ的な…
Addで費用つっこんで使える
Removeとか全部略

public class 費用リスト
{
long sum = 0;
public long 合計 => sum;
List<費用> list = new List<費用>();
public ReadOnlyCollection<費用> 品目 { get;}

public 費用リスト()
{
品目 = new ReadOnlyCollection<費用>(list);
}

public void Add(費用 hiyo)
{
if (hiyo == null) { return; }
sum += hiyo.金額;
list.Add(hiyo);
}
}
2017/12/20(水) 00:00:42.82ID:+SxGwy2+
わざわざ費目をクラスで分けている理由のことじゃないの?
>>799だけなら別に必要ないかと。
2017/12/20(水) 05:02:03.39ID:/+M3aR4Y
>>777
例として固定値を返していると仮定
金額が費用の状態によって複雑になるなら有な考え方だと思う
2017/12/20(水) 05:27:10.69ID:uEdWuAdp
ねーな
業務上3000とか4000とか値扱ってる奴のが多いだろ
こういう組み方見るだけでうげっとする
じゃあ、構造を把握するためにクラス図でも見てみよーかって
資料開いた瞬間閉じるわ
2017/12/20(水) 06:24:16.03ID:w7lpXa1y
プログラムセンスのあるヤツなら最初からやらない間違いで
残念ながら矯正不能なんだわ
804752
垢版 |
2017/12/20(水) 07:08:03.81ID:FojWkfgf
費目が8個なのでサブクラスに各費目クラスを作ったのですが。。。

サブクラスは何個くらいが適当なのでしょうか
10個超えるとアウトでしょうか
805752
垢版 |
2017/12/20(水) 07:15:48.78ID:FojWkfgf
ちなみに費目をクラスで分けた理由は、費目ごとにちょっと込み入った算出処理をするので、それぞれを閉じ込めておきたいと思いました

でも、費用が最小の粒度の方が一般的な雰囲気ですね

急遽プログラムをやれと言われた人間なのでセンスとか言われると厳しいです
2017/12/20(水) 07:35:47.88ID:+xQghQuB
>>805
ならサブクラスでいいよ
ここの連中は単純な家計簿みたいなツールを前提に話してる
そうじゃなく対象が複雑なら話は変わる
2017/12/20(水) 07:42:10.14ID:uEdWuAdp
>>806
変わるかなぁ?
日○とか三○でもそんなの見たことないよ
ちなみにそこだと項目数が10万とか超えちゃってるかんね
それ全部クラス作ったらw
808752
垢版 |
2017/12/20(水) 07:53:51.41ID:JgbCLwPB
>>806
クラス分けしても悪くはないですか
ありがとうございます

ただ、費用の抽象クラスを費用クラスにしてメソッドを各費目算出とすると、メソッドに「費用合計算出」を作っても違和感が無いかなとも思い

プログラムは難しいとしみじみ思いました
2017/12/20(水) 07:59:44.59ID:+xQghQuB
>>807
対象としてるドメインが違うだろ
呆れるわ
2017/12/20(水) 08:14:04.00ID:XFxcCwxD
業務アプリの設計なんかDFD描いてトランザクションスクリプトでいいよ
開発者全員が相当慣れてない限り、まともなオブジェクト指向でスケールさせるのは現実的に無理
2017/12/20(水) 08:17:09.42ID:dzFn8RAE
費目の数が10万!?
ないわー w
2017/12/20(水) 08:20:29.69ID:dzFn8RAE
>>808
> ただ、費用の抽象クラスを費用クラスにしてメソッドを各費目算出とすると、メソッドに「費用合計算出」を作っても違和感が無いかなとも思い
個々の費目で合計なんて求めようがないと思うが...
合計の算出は費目を束ねるクラスでやるべき話じゃね?
2017/12/20(水) 08:23:01.94ID:TnQp+4qQ
それ以前に、費用の集計なんかSQLでいいよ
2017/12/20(水) 08:44:12.56ID:uEdWuAdp
>>811
余裕っしょ
設定数100個の部品が100個あっただけでもう一万よ
でかい機械で部品数たった100個とかありえないから10万は確実に超える
もっとあるだろうなぁ
815デフォルトの名無しさん
垢版 |
2017/12/20(水) 08:44:55.30ID:apLR0/3w
>>805
にわかプログラマーならオブジェクト指向に拘るより
もっと単純な仕組みでやったほうが良いね
目的がオブジェクト指向になって簡単なものを複雑にしてる気がする
2017/12/20(水) 09:24:55.44ID:CxRyWMoc
急遽プログラムやれと言われてこれだけオブジェクト指向理解したならすごいな
817デフォルトの名無しさん
垢版 |
2017/12/20(水) 09:30:51.88ID:apLR0/3w
費目毎のクラス分けは目眩がするけど
2017/12/20(水) 09:30:52.50ID:gjQwmCKz
>>804
ケースバイケース
2017/12/20(水) 09:33:53.14ID:gjQwmCKz
>>808
非常にセンスが良い
自信持って良い
注意点はおかしな現場(こっちの方が多数派だったりするがw)へ行った時に絶望しないことかな
2017/12/20(水) 10:12:49.94ID:IdA1DVd/
授業でC言語ちょっとやっただけでオブジェクト思考はちっとも理解してないから>>777がそんなに悪いのかわからない
費用ってクラスを使って家賃、光熱費のインスタンスを作るようにしたらいいのか?
2017/12/20(水) 10:28:45.17ID:GdnGy9ZB
>>799
sum += hiyo.金額;
エラー CS0019 演算子 '+=' を 'long' と 'メソッド グループ' 型のオペランドに適用することはできません
と出るのですが、正解を教えて下さい。
2017/12/20(水) 10:30:50.20ID:irahYJNV
元の奴が金額がメソッドになってるけど
それはプロパティになってる

というか金額をメソッドにしちゃだめ
元のコードがダメ
2017/12/20(水) 10:36:11.97ID:GdnGy9ZB
>>822
このエラーが出ている行を
エラーが出ないように修正する方法を教えて下さい。
2017/12/20(水) 10:38:08.67ID:irahYJNV
>>777の 金額をメソッドからプロパティに書き直す
2017/12/20(水) 10:44:45.87ID:N4PPX6u2
どーせ()忘れ
2017/12/20(水) 10:47:18.91ID:GdnGy9ZB
>>824
>>825
文章で説明して頂いても理解出来ないので
完全版のコードを掲載して頂けると有難いです。
2017/12/20(水) 10:50:33.77ID:irahYJNV
プロパティが自分で書けないならここからコード書いてても無駄だよ

早く勉強しろよ
2017/12/20(水) 10:53:01.07ID:hctoYabD
>>826
hiyo.金額()
829デフォルトの名無しさん
垢版 |
2017/12/20(水) 11:01:57.32ID:GdnGy9ZB
>>828
ありがとうございました。
2017/12/20(水) 11:04:38.98ID:irahYJNV
煽りでも何でもなく
プロパティが自分で書けないならここからコード書いてても無駄だよ
2017/12/20(水) 11:11:07.65ID:hctoYabD
あ、そすか。
2017/12/20(水) 11:19:04.73ID:fz4ulcZ2
>>822
金額をメソッドにしちゃダメな理由を3行で
2017/12/20(水) 11:44:22.53ID:EHvPlft0
まあ普通に考えればメソッドなら金額計算みたいに動詞的にしろよとは思うな
日本語メンバ名だと曖昧だけど
2017/12/20(水) 11:48:55.09ID:884JsNpl
まだやっていたんだ、簡単なことを難しくするバカのお手本
2017/12/20(水) 11:50:57.09ID:Wpgvy9KL
そうですか^^
■ このスレッドは過去ログ倉庫に格納されています