X



C#, C♯, C#相談室 Part95
■ このスレッドは過去ログ倉庫に格納されています
0106デフォルトの名無しさん
垢版 |
2017/11/12(日) 08:56:15.86ID:LXGneVsA
>>100
static classだとよくやるけど
static class My{
static class Hoge{
static class Config{
}
}
}
My.Hoge.Configのように使える
でも3重は使わないな
0107デフォルトの名無しさん
垢版 |
2017/11/12(日) 10:27:34.46ID:j0JK3XOe
Javaだと1クラス1ファイル
客先の規約で配置できるファイルに制限があると内部クラスを使わざるをえない
0112デフォルトの名無しさん
垢版 |
2017/11/12(日) 11:28:22.38ID:PNAmYcb6
.Net Core 2.0では、だいぶん.NetFrameworkの実装がカバーされたと聞きました。
https://raw.githubusercontent.com/dotnet/standard/master/docs/versions/netstandard2.0_ref.md
これを見る限りでは、System.IO.StreamやSystem.IO.FileInfo、ISerializableなど
もあります。これらをUWPやASP.NET Coreでも使えるようになるという理解でいいでしょうか。
0114デフォルトの名無しさん
垢版 |
2017/11/12(日) 12:19:41.85ID:pNqEHb8d
>>113
javaとは思想が違うからな
どうしてもメソッド使いたけりゃ拡張メソッド書けばいいだけのこと
0116デフォルトの名無しさん
垢版 |
2017/11/12(日) 12:39:52.61ID:j0JK3XOe
enumにメソッドを定義できないとenumスイッチがあちこちに書かれてシステムが汚染される
そんなことになるぐらいならenumは言語機能から追放したほうがいい
0119デフォルトの名無しさん
垢版 |
2017/11/12(日) 13:26:58.08ID:hG4wTZ8S
>>112
逆に聞きたいんだけど、どういう理解があると思ったの?
0120デフォルトの名無しさん
垢版 |
2017/11/12(日) 13:29:17.49ID:j0JK3XOe
>>117
Javaのenumのメソッドはポリモーフィック
なのでステートやストラテジーなど様々な応用が利く
0121デフォルトの名無しさん
垢版 |
2017/11/12(日) 14:44:05.96ID:IOmcFQTN
enumはどうせ定数に置き換えられるんだから、最初から定数で書いとけばいいな
0123デフォルトの名無しさん
垢版 |
2017/11/12(日) 16:08:56.10ID:kmdFzMTF
class A,B,C,...が有って
void func<T>(...){...}
みたいな関数を
func<A>(...);
func<B>(...);
func<C>(...);
みたいに順番に実行したい場合、
forループ使って書ける?
0125デフォルトの名無しさん
垢版 |
2017/11/12(日) 16:17:52.85ID:j0JK3XOe
>>123
var list = new dynamic[] { a, b, c };
foreach (var x in list)
func(x);

引数もインスタンスも無いならreflection
0128デフォルトの名無しさん
垢版 |
2017/11/12(日) 17:39:19.11ID:UFCv5vw0
>>127
reflectionと言うのでやる方法を教えて下さい
0130デフォルトの名無しさん
垢版 |
2017/11/12(日) 18:01:29.09ID:PNAmYcb6
>>119
APIはあっても、実際は例外投げるんじゃないかとか。
StreamやISerializableなど今まで散々レガシー扱いされてたのに、
すんなり実装されたのだったら、今までは何だったのかと思ってしまって。
0137デフォルトの名無しさん
垢版 |
2017/11/13(月) 01:47:33.98ID:v8HXsfBj
>>126
リフレクション
そもそも用途がわからんけど
0138デフォルトの名無しさん
垢版 |
2017/11/13(月) 01:55:32.64ID:v8HXsfBj
>>130
最初のリンクがそもそも.NETStandardの話なんだけど、.NETStandardとは何か知ってれば(最低限ググれば)前者は迷う余地がない
後者は経緯知らないけどレガシーが実装されたらだめという理由がない

…と考える人が大多数だと思う
0139デフォルトの名無しさん
垢版 |
2017/11/23(木) 11:44:32.89ID:3aIXz7vh
C#でちょっとした文字列の連結を行う場合、+がいいのかFormatがいいのかReplaceがいいのかStringBuilderを使うのがいいのか悩んでます
どれが一番いいのでしょうか?

1. string value = A + "-" + B;
2. string value = string.Format({0}-{1}, A, B);
3. string value = "{A}-{B}".Replace("{A}", A).Replace("{B}, B);
4. StringBuilder sb = new StringBuilder();
  sb.Append(A);
  sb.Append("-");
  sb.Append(B);
0140デフォルトの名無しさん
垢版 |
2017/11/23(木) 11:50:10.15ID:nWWLjgB9
こんな細かいことで悩んでいたら禿げるわ
それぞれにどれだけの差が出てくるか考えろよ
0142デフォルトの名無しさん
垢版 |
2017/11/23(木) 12:03:56.69ID:3aIXz7vh
>>141
なるほど
0144デフォルトの名無しさん
垢版 |
2017/11/23(木) 12:13:05.14ID:1XchAmld
連結ならいつもは分かりやすさ優先で+
実際に扱うデータで使ってみて遅いと感じたらStringBuilderに変えてるわ
置き換えは置き換えの時だし、フォーマット形式が必要と感じたらそれ使うし
悩むのかこれ…コーディング終わらんやろ…
0145デフォルトの名無しさん
垢版 |
2017/11/23(木) 12:20:49.75ID:Go3NcBxu
最初はくだらない事に悩むからしょうがない。直に、開き直るからそれまでとことん悩め。
0148デフォルトの名無しさん
垢版 |
2017/11/23(木) 14:17:08.77ID:U/QtJVxM
StringBuilder必要なのはループで回す時くらいやろ
固定回数なら最適化されるんちゃうか
しらんけど
0149デフォルトの名無しさん
垢版 |
2017/11/23(木) 15:17:10.10ID:JqKYKF6h
改行したい時はsb.AppendLine使う
var s = $@"hello
{A}
world";
別にこれでもいいけど、インデントが気持ち悪い
0150デフォルトの名無しさん
垢版 |
2017/11/23(木) 18:08:06.61ID:w+OP7Z8m
数個程度の定数個の結合にStringBuilderは無いね
@""で改行入れたときの改行コードってソースコードの改行コードに依存するんかな
0153デフォルトの名無しさん
垢版 |
2017/11/23(木) 18:29:25.95ID:Go3NcBxu
と書くと、問題あるな。あるメソッド内でループしてないから普通に文字列結合してても、
そのメソッドを使う方でループしてメソッド呼び出されたら・・
ということでなんでもない。
0154デフォルトの名無しさん
垢版 |
2017/11/23(木) 19:44:15.73ID:NThPFj2G
パフォーマンスは大差ないので可読性で選ぶ
となると

定数個なら+
動的ならlinqとJoin
0155デフォルトの名無しさん
垢版 |
2017/11/24(金) 08:32:28.20ID:LQb8e4yU
public override と
override public とでは、どっちが普通ですか?
0157デフォルトの名無しさん
垢版 |
2017/11/24(金) 09:49:06.09ID:LQb8e4yU
>>156
じゃあstatic使う場合は
どこに入れるべきですか?
0159デフォルトの名無しさん
垢版 |
2017/11/28(火) 20:01:33.21ID:uo9ygS2y
EF Core + MariaDBで行ロックをするにはどうしたらいいですか?
0162デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:02:54.88ID:LyP2QHxX
EFは基本、楽観ロックだからね。
自分が更新するデータは誰も変更しないだろうということで楽観的に考えて行ロックを取得しない。
で、実際の更新時に、保存しておいたタイムスタンプ列や全列を比較して更新するUpdate文を
発行して誰も変更してなきゃ成功する。
0163デフォルトの名無しさん
垢版 |
2017/11/29(水) 15:08:27.80ID:LyP2QHxX
対して、悲観的ロックは誰か変更するんじゃないかと悲観的に考え前もって行ロックする。
行ロック取得したければ、トランザクションの分離レベル変更して、間接的に取得すればいいんじゃねぇかな。
例えば、トランザクションをロックを使って実装してるデータベース使ってるなら、
トランザクションの分離レベルをREPEATABLE READにして読めば、読み込んレコードには
行ロックがかかる。
0166デフォルトの名無しさん
垢版 |
2017/12/02(土) 10:37:02.24ID:OECpFj6Y
Consoleアプリの関数Aから別のスレッドで関数Bをを実行。
Bが終わるまで数分かかるので、その間はAの処理を引き続きやる。
Bが終わったら何らかの通知をA(あるいはアプリ)で受けとる。
そんな処理をしたいのですが、どんな手法がお勧めですか?
0170デフォルトの名無しさん
垢版 |
2017/12/02(土) 13:31:40.26ID:OECpFj6Y
>>167
情報ありがとうございました。調べてみます。
>>168
それは何ですか?
>>169
関数Aの中で関数Bの終了をawaitするとそこでAの処理が停止しますよね?
それでは困るんです。
0171デフォルトの名無しさん
垢版 |
2017/12/02(土) 13:38:50.65ID:/lrBlva0
通知を受け取って何をするの?
Aが実行中に通知を受け取った場合は?
Aが終わったあとに通知を受け取った場合は?
0173デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:11:31.35ID:kxO6m70V
>>172
実際にコードに起こすこと考えたら>>171の疑問出てこない?
ポーリングの有無とかB終了の通知はA以外で受けたほうがいいのかみたいな
0174デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:21:45.96ID:/lrBlva0
void A() {
...
Task.Run(() => B());
...
...
}

void B() {
...
...
SetSomeFlag();
}

こういうこと?
何をしたいのかハッキリしないな
0176デフォルトの名無しさん
垢版 |
2017/12/02(土) 14:22:55.12ID:M5ek0NUJ
>>173
何で目の前の問題置いて次の実装考えるの
やり方が一つ決まったらそれでやり通す必要もないし
質問者の要件わからないのにそんなこと聞きだす必要はない
0177デフォルトの名無しさん
垢版 |
2017/12/02(土) 15:15:48.94ID:XMkOweAB
多分処理AはUIスレッドなんだろ
処理B実行中にUIは止めたくない
そして処理B完了でUIを更新したい

そんな要件だと想像した
0181デフォルトの名無しさん
垢版 |
2017/12/02(土) 18:20:58.48ID:M5ek0NUJ
元の話が設計で根本的におかしいか思い付きで質問しているかどっちか
後半に100ペリカ
0183デフォルトの名無しさん
垢版 |
2017/12/02(土) 21:02:27.32ID:8UWC/wK0
WaitHandleは完了を待つ側のスレッドをブロックするから、
それでいいんだったら普通にasync-awaitでいい
0185デフォルトの名無しさん
垢版 |
2017/12/02(土) 22:01:19.49ID:hEzEqaaq
Aで何したいかだけどコールバックでいいんじゃないの
0187デフォルトの名無しさん
垢版 |
2017/12/03(日) 01:24:35.88ID:R5bnWQiD
つかそもそも別スレッドで実行する必要があるのか
別プロセスで良いんじゃねえのか
0190166
垢版 |
2017/12/03(日) 10:48:55.10ID:fYwJfoN4
皆さんレスありがとうございました。
>Aが実行中に通知を受け取った場合は?
関数Cを別スレッドで実行したいです。例えばこんなふうに。
void C(){
 Console.WriteLine("Bが終わった");
}
>Aが終わったあとに通知を受け取った場合は?
Aは終わらないと言う前提でお願いします。
0193デフォルトの名無しさん
垢版 |
2017/12/03(日) 12:01:59.74ID:mrNMXEOK
フラット案件どころかこれだけレスとキーワード出ていて自分で解決できないのならプログラムやめるべき
0195デフォルトの名無しさん
垢版 |
2017/12/03(日) 12:14:39.54ID:WBs9Zv02
何でもいいけどすぐ動く完動品が出てくるまでこの調子だと思うぜ
どうせソースないんだろ、出てきたものを見ていじって作ろうとしてるんだろ
0196デフォルトの名無しさん
垢版 |
2017/12/03(日) 14:16:09.36ID:VfzmjXdH
>>190
BとCについてはよく分かった
Aが現状どういう処理をしているかによって
解決の仕方が違ってくると思うな
0198デフォルトの名無しさん
垢版 |
2017/12/04(月) 17:37:29.30ID:KH9vP8EW
コンソールアプリで関連性のない2つの動作を同居させるシチュエーションがわからん
マルチスレッドにしたら効率が良くなるってだけの頭の悪い発想じゃね
>>187が当てはまらないのならぜひ教えてほしいくらい
0199デフォルトの名無しさん
垢版 |
2017/12/06(水) 04:39:39.43ID:PV/6ekcb
>>188
コンソールアプリ同士なんだから、まず標準入出力でダメか考えるべきじゃね
ソケット通信が必要ならまあやればいいけど、それだとそもそもコンソールアプリなのが正しいのか疑問だ
0202デフォルトの名無しさん
垢版 |
2017/12/07(木) 12:33:06.20ID:NfkoL/Di
>>201
それはGUIが基本なのかCUIが基本なのかの違いであって
コンソールアプリである必要性とは関係ないよね

別にGUIを基本にしろって主張じゃないよ
ただCUI=コンソールアプリってわけでもないだろうと
0203デフォルトの名無しさん
垢版 |
2017/12/15(金) 07:32:48.50ID:fJhEByrM
Task<string>型からstream型に変換するにはどうしたらいいでしょうか?
調べてもよく分からず詰まっています
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況