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

レス数が950を超えています。1000を超えると書き込みができなくなります。
2017/10/09(月) 19:00:56.93ID:Y4203ffV0
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part131
http://mevius.5ch.net/test/read.cgi/tech/1504861931/
■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1492843013/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2017/11/05(日) 09:14:14.87ID:dh3CGsv/0
言語仕様としてref値型が必要なのはわかるけど
じゃあ使うかというと使わないかな
もう何年も書いた記憶がない
2017/11/05(日) 09:29:17.02ID:yKSdtk7l0
ゲームで自分で当たり判定を書いたとき
GC を避けるため使ったことがあるな
2017/11/05(日) 09:52:03.41ID:TvjmwwI20
>>894
hoge.TryParseも使った事がないと?
2017/11/05(日) 10:20:04.86ID:3uuR82Hq0
.TryParse( ) は ref じゃなくて out
2017/11/05(日) 10:20:40.26ID:vfJyTH9D0
アプリ作るたびに
ViewModelBaseのSetProperty<T>(ref T field, T newValue
を作って毎回使ってるな。
で、今ちょうどJavaでMVVMやってて、refないのでSetPropertyがかけなくてつらい・・
if (this.value != value) {
 this.value = value;
notifyほにゃ
}
refないのでプロパティ毎に3行書いてるんだけど死にたい。
2017/11/05(日) 10:40:15.20ID:iAaHdauhM
SetProperty(value, v => field = value)
でいいだろ
設定先が単純なフィールドでない場合にも対応できるしJavaでも同じ
2017/11/05(日) 10:56:36.45ID:vfJyTH9D0
んん??
どういうことそれ。引数2つ??
3つ使って
SetProperty<T>(T field, T newValue, Action<T> setterActon)
こんな感じならいけそだけど。
SetPropert(field1, 10, t => field1 = 10)
後は最後にproperyNameを渡す引数追加して。
2017/11/05(日) 11:01:15.31ID:vfJyTH9D0
SetPropert(field1, 10, t => field1 = 10)

SetProperty(field1, 10, t => field1 = t)だった
bool SetProperty<T>(T field, T newValue, Action<T> setterActon, string propertyName) {
 if (!object.equals(field, newValue)) return false;
 setterAction(newValue);
 onPropertyChanged(propertyName);
return true;
}
コンパイルしてねぇけどこんな感じかな。
2017/11/05(日) 11:11:46.25ID:27Wvnc5t0
>>888
前とは別の人だし、githubで適当に検索してみただけだから特に時間もかけてないんだけどね
roslynとかで"ref 適当な型名"で検索しても、何件か引っかかるし一応新しいコードでも(美しいかはおいといて)使ってるんじゃないかな
軽くしか見てないけどnullなら初期化ってしてるコードが多いけど、ArrayBuilerはある程度有効活用になってそうな雰囲気

ref値型いらないって言ってるのはホントの初心者でしょ
そちらは明らかに使いみちだらけ
2017/11/05(日) 11:22:13.81ID:+CtSMn6Br
×初心者
○過去を捨てられないベテランさん
2017/11/05(日) 11:28:47.04ID:idfQljxTM
例外が必ず適切にはかれるわけではないからこうしろって言われても困る
2017/11/05(日) 11:31:31.42ID:3uuR82Hq0
>>902
いいわけは要らんよ
君がref参照型が有効だと思うコードを晒せばいいだけ
2017/11/05(日) 11:31:51.41ID:FejOKWJjM
>>904
どう言う意味?
2017/11/05(日) 12:03:01.14ID:8CRgy4j+a
まだ変なのが暴れてるけど、参照型であれ値型であれrefなんか必要ない、
であれば主張に一貫性があり一理ある。

筋が通らないのは。refは値型でしか意味がないという主張。
昨日説明した通り値型参照型の違いはrefの有用性と関係ない。

>>906
>>904がそうい言いたいのかどうか分からないけど、例外の処理方法や
どの程度「真面目に」処理するかだって所詮要件次第なのに、例外の話になると
妙に教条主義的になる変な人がいるのは確かだ
2017/11/05(日) 12:46:34.43ID:FejOKWJjM
>>907
例外が適切に吐かれないって事が有るのか知りたい。
2017/11/05(日) 12:51:25.95ID:uz/X8WP/M
>>907
> まだ変なのが暴れてるけど
自己紹介ですか?
2017/11/05(日) 13:12:09.84ID:yAuwzX3k0
ref はCの&にあたるものだが、&iは普通に使うけど&pなんて見たこと無いってことだ
2017/11/05(日) 13:34:59.13ID:sDEQ50LK0
>>894
パフォーマンスを求められる処理には縁がない人なんですね
2017/11/05(日) 13:46:53.29ID:eJ/HGJ4TM
素人なのでref/outの使い道がよくわからないのですが、public変数にするとかじゃだめなんですか?
2017/11/05(日) 13:50:53.40ID:xly4dgsP0
>>912
メソッド実行するたびにインスタンス作成すればおk
2017/11/05(日) 13:54:44.96ID:jvnuL8BP0
>>912
コトリン使えばおk
2017/11/05(日) 14:06:26.50ID:bQLtuEEMM
>>912
全部Public変数にしたら引数も戻り値も不要だね。
君は天才かも。
2017/11/05(日) 14:08:16.80ID:+CtSMn6Br
>>912
素人なら自作関数には両方使わない
唯一あるとすれば
パフォーマンスをシビアにする必要がある
かつフィールドをたくさん持った値型
の場合だがそんな状況はアプリにもよるがそうそう無い
917デフォルトの名無しさん (ワッチョイ 6e8a-cDlW)
垢版 |
2017/11/05(日) 14:15:44.96ID:tjXjX3Hx0
>>893
と赤間さんが言ってたね
2017/11/05(日) 15:53:29.60ID:3uuR82Hq0
>>912
釣り針でかすぎ
919デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 18:22:15.77ID:/t3HbS0w0
藤原竜也に戻せよ
920デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/05(日) 18:23:05.50ID:/t3HbS0w0
誤爆
2017/11/05(日) 20:56:07.78ID:TvjmwwI20
>>917
赤間って誰?
MSDNのコラムにc#の例外処理について解説していた良い記事があったんだが見つからんわ。

C と C++のが見つかったw
https://msdn.microsoft.com/ja-jp/library/cc440190(v=vs.71).aspx
2017/11/05(日) 21:00:58.55ID:UgX7F9HB0
https://blogs.msdn.microsoft.com/nakama/2008/12/29/net-part-1/
これかな?
2017/11/05(日) 21:09:00.23ID:TvjmwwI20
>>922
赤間さん?
2017/11/05(日) 21:12:55.00ID:TvjmwwI20
「よほどのことがない限り、アプリケーションで try-catch を書いてはいけません。」
これよ、これ。例外処理の本質。
2017/11/05(日) 21:42:49.26ID:xly4dgsP0
>>924
そうはいってもファイルが読めないだけで例外だすじゃん
2017/11/05(日) 21:52:08.84ID:RoulHjpBa
>>922
ああこの記事ね。
個人的にはあんまりロジカルじゃないと思うんだよねこの記事。
読んでいて感じるいくつかの「なぜ」に対する答えがない

(1) エラーを業務エラーとそれ以外に大別するのはいいとして、なぜ前者に例外機構を
使ってはいけないのか?

(2) なぜ集約例外ハンドラーみたいなスパテッティーを推すのか。
そもそもそういうスパゲッティーを避けるための仕組みが例外機構ではなかったのか?

(3) いくら何でも
「よほどのことがない限り、アプリケーションで try-catch を書いてはいけません」
これは言い過ぎではないのか。
2017/11/05(日) 21:59:38.87ID:sDEQ50LK0
>>926
(3)は吹いたわwww
2017/11/05(日) 22:12:12.00ID:5Sua66ij0
リトライとかの回復処理は全部ライブラリー内で完結してることが前提なんだろうな。
言いたいことは分からないでもないけど、想定しているアプリがすごく狭い気がする。
2017/11/05(日) 22:39:40.25ID:GDhCJlyO0
アプリケーションってよりビジネスロジックって言いたかったのかね
2017/11/05(日) 22:49:10.60ID:fgQ02ied0
>>926
(1)や(3)はコメントで回答されてるんじゃないの?

集約例外ハンドラーは業務エラーを戻り値で表現しようと
例外で表現しようと必要じゃない?
2017/11/05(日) 22:51:14.59ID:sDEQ50LK0
>>930
必要だってのと推奨するのとは違うだろ
2017/11/05(日) 22:52:06.64ID:6FoY61ET0
てか集約例外ハンドラーがスパゲッティってどういうこと?
エラーメッセージやログ処理して終了するだけのごく短いコードだと思うけど違うの?
2017/11/06(月) 00:52:33.36ID:voxzxgu2r
>>925
ヘルスバーグも筆の誤り
2017/11/06(月) 06:29:36.68ID:6qywALcU0
>>928
例外に落ちた時点で回復可能なエラーって限られてるぞ。
ファイルがロックされて書き込めないとか。
殆どは回復不能だし、デッドロックにしてもリトライするより適切にロックしているかやロジックを見直す必要があるだろうし。
ま、例外の原因で一番多いのは自分の仕込んだバグだw
2017/11/06(月) 08:53:17.37ID:2nM3KO37M
>>932
集約例外に回復コードを仕込もうと思ってるんだろ。
2017/11/06(月) 12:00:15.83ID:I56lauc90
くそベンダーにありがちwww
2017/11/06(月) 12:23:10.12ID:2nM3KO37M
糞ベンダーは、全てのメソッドにtry-catchを入れるコーディング規約。
938デフォルトの名無しさん (ワッチョイ 46e7-SXc1)
垢版 |
2017/11/06(月) 16:16:18.79ID:sVTioIv70
ネットで更新してるアプリってテキストファイルの文字読み込んでプログラミングしてるんだなその方が変更しやすいのか?
2017/11/06(月) 17:30:29.32ID:2nM3KO37M
>>938
エスパー登場を待とう
2017/11/06(月) 17:33:56.53ID:RoDWv0Jka
>>938
勘違いです
2017/11/06(月) 17:36:08.18ID:Z+IOadg3M
ランチャー的なフォームから小画面を起動するフォームアプリを作ったのですが、小画面大量に出すと重くなります。小画面毎に別スレッドで起動する方法を教えてください
2017/11/06(月) 17:37:41.80ID:RoDWv0Jka
設計が間違ってます
小画面を大量に出さないようにしましょう
2017/11/06(月) 17:43:20.86ID:Vd7vqFxu0
小画面の意味がわからないし、大量とはどのくらいなのかもわからない
944デフォルトの名無しさん (ワッチョイ 46e7-SXc1)
垢版 |
2017/11/06(月) 17:48:57.32ID:sVTioIv70
なんだ勘違いかテキストで読み込んでるのは理由あんまりないんだ
2017/11/06(月) 17:51:17.55ID:Z+IOadg3M
>>942
そこをなんとか
>>943
10枚程度です。
2017/11/06(月) 17:53:30.02ID:RoDWv0Jka
ツールでボットやwebチェッカー使ってるんじゃないかな
ボット一個にwindow1個とか

そういうのはwindow一個で多数のものを扱うべき
リソースの無駄
2017/11/06(月) 17:55:01.56ID:PxQVFHXG0
どうせ並列で動いてるならPCもう一個買えよ
2017/11/06(月) 17:56:54.41ID:JuX+gvIy0
>>945
フォームを別に表示したら元のフォームには影響しないし
10や20くらいの別フォーム起動したくらいで重くなったことはない
小画面で何をやっているかわからないしスレッド分けて〜では多分解決しない
>>944
スレ違いだと思うけどアンチウィルスのパターンデータ更新みたいなのと勘違いしているだろ
VisualStudioだってバイナリアップデートなんだから
949デフォルトの名無しさん (ワッチョイ 417f-dVlt)
垢版 |
2017/11/06(月) 18:06:53.58ID:piexXh++0
関数にListを渡す時に関数内で要素を書き換えできないようにするにはどうすればいいですか
950デフォルトの名無しさん (ガックシ 0626-a3yt)
垢版 |
2017/11/06(月) 18:08:01.18ID:QmwWSIUM6
無理です
2017/11/06(月) 18:08:42.99ID:JuX+gvIy0
>>949
C#7.2を待つかそのlistをコピーして渡すか書き換えないように気を付けるかしてください
2017/11/06(月) 18:27:27.21ID:rATvQkns0
IReadOnlyListとして渡せばええやん
953デフォルトの名無しさん (ガックシ 0626-a3yt)
垢版 |
2017/11/06(月) 18:33:50.08ID:QmwWSIUM6
>>952
なにそれ
オブジェクトのリストを作ったとしてそのリストの要素のプロパティを書き換えるのも出来ない?
2017/11/06(月) 18:35:54.11ID:3XyzIl3H0
>>951
readonly ref って構造体限定じゃね?
2017/11/06(月) 18:37:32.84ID:RoDWv0Jka
>>952
こんなものがあったのか
便利そう
2017/11/06(月) 19:01:30.72ID:7bDcgZ2tM
>>801
無いことがバレてプログラマの月収は一律18万円になった
2017/11/06(月) 19:16:12.58ID:GQ87vZ7n0
>>949
AsReadOnlyメソッドで足りるならそちらで

>>905
言い訳とは
普通にroslynのソースとダブルポインタを要求するPInvokeじゃ不満足?複雑なやり取りを低コストでやれてると思うが
2017/11/06(月) 19:34:57.48ID:6qywALcU0
>>941
スキルの無いヤツほどスレッドを使いたがる。
スレッドが何か分かっているヤツはスレッドでしか実現できない場合のみ仕方なくスレッドを使う。
2017/11/06(月) 19:43:20.15ID:6qywALcU0
>>938
質問の内容がワケワカラン過ぎるぞ。
2017/11/06(月) 20:15:45.06ID:TIxTD8nqM
>>957
> 普通にroslynのソースとダブルポインタを要求するPInvokeじゃ不満足?複雑なやり取りを低コストでやれてると思うが
だからそう言う言い訳はどうでもいいからコードを晒せよ
2017/11/06(月) 20:27:25.28ID:XSO2MFzP0
>>953
流石にそれを禁止するのは無理
IListにあるAddとかRemoveとかインデクサのsetterとかがないというだけなので
2017/11/06(月) 21:47:01.14ID:Uzk0iC6KM
>>958
では軽くする方法を教えて下さい。
子フォームでは重要なことは非同期で行っています
2017/11/06(月) 21:54:22.54ID:PxQVFHXG0
何やってるか知らんけど
10枚も出したらそれで限界な可能性は?
非アクティブなときも重いってあるかなぁ?
2017/11/06(月) 21:55:47.11ID:4oP8v+rY0
>>962
では重い原因を教えて下さい。
ただフォーム出して重くなったでは何も分かりません。
2017/11/06(月) 22:04:31.11ID:TDT9B1paa
>>962
まず重い原因を突き止めましょう。

純粋にFormのロード(表示)だけに時間がかかってるなら
個人的は軽量化は諦めた方がいいと思う

Loadか何かのタイミングで実行してる初期化が重いなら
そこを軽量化するなりタイミングを工夫するなり

個人的想像だと前者の可能性は低い気がする
というか、Vista時代のPCでも余程大量のコントロール乗せてたり
レイアウトパネル系を多用でもしてないとそこまで極端に重くはならんと思う
966デフォルトの名無しさん (ワッチョイ 0676-9Rqp)
垢版 |
2017/11/06(月) 22:06:21.11ID:qEpy6DDg0
Listを抽象化したいのですが、どのように書けば良いでしょうか?
以下のように書けるかと思ったのですがダメでした
よろしくお願いします

interface ITest
{

}

public class Test: ITest
{
public string hogege { get; set; }
}

class Hoge
{
List<ITest> test = new List<Test>();
}
2017/11/06(月) 22:06:24.98ID:/hMSyilp0
>>962
単純にそのアプリ、親アプリと子アプリに別けて、親アプリから小アプリを10個起動したら駄目なの?
重い処理があって辛いぐらいの機能があるなら、1つの子画面で親ごと巻き込まれて死んでほしくないし、俺ならプロセスから別ける。

あと、非同期でやってる、の非同期がasyncなら、それは普通にタスクを切り替えるスキの間隔が広いかとか、諸々普通に重いだけじゃないの?
await Task.Delay(1)とか呼んでみたら?
968デフォルトの名無しさん (ワッチョイ ad8a-cDlW)
垢版 |
2017/11/06(月) 22:11:16.29ID:AYpingtn0
>>966
右辺と左辺の型が違うじゃん
2017/11/06(月) 22:40:14.56ID:Uzk0iC6KM
>>967
その、プロセスの分け方教えて下さい!
2017/11/06(月) 22:48:51.69ID:voxwNiAb0
>>969
今更どうしようもないが、次作るときはウインドウの数減らしたほうが良いよ
できればメイン一つで画面遷移やタブで処理+ダイアログも同時に開くのは一つだけとかね
2017/11/06(月) 22:49:36.85ID:9FNc82fk0
死ね
2017/11/06(月) 23:36:54.55ID:VYb2y8+kM
>>966
List抽象化はIList<Test> test= じゃないのかよw
2017/11/06(月) 23:50:31.09ID:/hMSyilp0
>>969
プロセスの分け方も何も、今フォーム起こすのに使ってるメソッドの引数を文字列にして、Process.Startで起動引数にして起動するだけのイメージだったけど。
974デフォルトの名無しさん (ワッチョイ 2ee8-zAbU)
垢版 |
2017/11/07(火) 01:00:13.01ID:cTk2bFo+0
Parallelって非同期でしか使えない?
2017/11/07(火) 01:08:19.93ID:V+BPLIz50
うんにゃ
2017/11/07(火) 01:33:47.43ID:TUoQCgcU0
>>975
同期できるのか
使おうかな
2017/11/07(火) 02:12:31.67ID:V+BPLIz50
>>976
どういう用途を想定してるん?
2017/11/07(火) 09:07:17.90ID:lDMoKAlXM
そもそもParallelは同期処理に使うもんだぞ
Fork-Joinっていう、同期処理を並列で実行するパターン
2017/11/07(火) 12:22:40.45ID:BMsgFSV6r
一晩エスパーしたけどListの抽象化の意味解読できず

ITest[] tests = new Test[n];
IEnumrable<ITest> = new List<Test>();
なら可能だが
980デフォルトの名無しさん (スププ Sd62-cDlW)
垢版 |
2017/11/07(火) 15:05:18.45ID:+aQKsyS3d
リスト抽象化という分かってるようで何も理解できてないお題
981デフォルトの名無しさん (ガックシ 0626-e3AS)
垢版 |
2017/11/07(火) 15:17:32.57ID:odkSTBx66
>>980
新スレ頼んだ
2017/11/07(火) 15:31:40.49ID:QoqDyUp+0
>>979
変数名忘れてる!
983デフォルトの名無しさん (ワッチョイ 46e7-M99L)
垢版 |
2017/11/07(火) 16:33:19.67ID:pVSOD8mN0
抽象化して継承するのと基本クラスにして継承するのと使い道がわからんよな
2017/11/07(火) 16:46:40.87ID:j6tNoJ1F0
スレタイのC#表記は一つだけでいい
形骸化してる
2017/11/07(火) 20:08:16.46ID:LeQqgpmT0
そういえばずっと疑問なんだが
そもそもC#て「シーシャープ」で合ってる? #はNo.だと習ったような...
それともスレタイどおり普通に「シーフラット」なのか?
2017/11/07(火) 20:11:35.30ID:QoqDyUp+0
>>985
作った人によると(C++)++で、+を4つ並べて#にしたという
で、読み方はシーシャープだと
2017/11/07(火) 20:14:22.37ID:4uzCwn7XM
>>985
正式にはシャープだけど、半角表記にするために井桁でもいいことになってる
2017/11/07(火) 20:17:34.23ID:LeQqgpmT0
ほほう!!ありがとう!
2017/11/07(火) 20:25:03.73ID:LeQqgpmT0
さすがに♭でなくて安心した
2017/11/07(火) 20:48:12.22ID:wMlMdyQ30
>>987
ちょっと違う
半角で表せるようにC#と書いてC Sharpと読むと仕様書に明記されてる
C♯とかは間違い
2017/11/07(火) 20:49:14.24ID:bwe89n7Ka
>>986
その話は後付けだったと思うけどw

つまりC#(C sharp)っていう名前が決まったのが先で、よく見るとこれって+が四つでインクリメント演算子が2つの
ようにも見えるよねって話だったはず
2017/11/07(火) 20:50:12.84ID:4uzCwn7XM
>>990
いや公式な仕様書だと♯表記だよ
2017/11/07(火) 20:50:44.75ID:bwe89n7Ka
>>990
そもそも#と♯が本来別文字かどうか怪しいw
印刷屋さんの都合じゃないのかと
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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