[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 04/08 11:46 / Filesize : 273 KB / Number-of Response : 1029
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん [2018/12/15(土) 11:07:07.89 ID:0aSEF/I+0.net]
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1538646998/
■コードを貼る場合は↓を使いましょう。
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
referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

175 名前:デフォルトの名無しさん [2019/01/06(日) 18:18:02.00 ID:Dx0jhieJ0.net]
今のところ、「手元でビルド→SCPコマンドで転送→SSHで実行」みたいにしてるんだけど・・・・やっぱもっといい方法あるよな

176 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 18:22:43.98 ID:SgRztK6B0.net]
LINQの質問です
list1とlist2はList<int>型だとして

foreach(var value1 in list1) {
foreach(var value2 in list2) {
Console.WriteLine(value1 * value2);
}
}


これと同じことをLINQを使ってやるとしたらどう書けばいいですか?
Zipを使ってみたのですが同じインデックス同士しか掛け合わせてくれませんでした

177 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 20:09:56.59 ID:NF88G39c0.net]
linqでブロードキャストできたっけ?

178 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 20:11:35.37 ID:YeoWOZf6a.net]
>>173
メソッド構文ならSelectManyを使う
foreach (var v in list1.SelectMany(v1 => list2, (v1, v2) => v1 * v2))
{
Console.WriteLine(v);
}

この場合はクエリ構文の方が分かりやすいかも
var q = from v1 in list1
from v2 in list2
select v1 * v2;
foreach (var v in q)
{
Console.WriteLine(v);
}

179 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 20:13:20.52 ID:NF88G39c0.net]
>>173
ttps://dobon.net/vb/dotnet/programing/arraymap.html
これでいけんじゃね?
ConvertAll

180 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 21:11:45.37 ID:iQ1zVEqTM.net]
>>170
AWSとか使えば簡単だよ
MSの推奨はもちろんAzureだけど、単なるVMのホスティングサービスとして使う以上のことを期待すると正直ゴミカスなので全くお薦めできない

181 名前:デフォルトの名無しさん mailto:sage [2019/01/06(日) 21:17:12.87 ID:iQ1zVEqTM.net]
>>176
今時ConvertAllとか紹介してるゴミサイトはさっさと閉鎖すべき

182 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 00:48:07.98 ID:voJmrOTp0.net]
>>178
今だと何がベスト?

183 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 09:13:26.65 ID:yGBdcOaa0.net]
>>175>>176
いけました!
ありがとうございます
今回はSelectManyを使おうと思います



184 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 09:34:56.37 ID:z57KVTQ70.net]
>>166
考え方としては、例えば「3」が入力された時点で
次の入力結果は「3」か「30」〜「39」しかありえないから
11通りの2進数表示を用意しておいて次のキーが押されたらそこで合うものを選んで表示する
どんなに10進数の入力桁数が増えても毎回11通り用意すればいいのは一緒なのと
10進数が1桁増えるときに2進数表示で最後の4桁以外の文字列は使い回せるから文字列連結処理は多少減らせる

この処理がユーザーのキー入力速度より早くCPUが処理できれば多少意味がある程度だろうけど

185 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 10:20:00.74 ID:e8LT8JMZa.net]
>>181
そのためにReadKeyを繰り返してたらそのオーバーヘッドの方が効果を圧倒的に上回ります
出直してきてください

186 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 10:28:19.23 ID:3j9bnJUUM.net]
>>181について更にツッコむと、1文字ずつ処理するなら単に入力されたキーの値を普通に反映させていけばよい
わざわざ候補を事前に用意してGCに負担をかける意味は全く無い

187 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 15:22:57.85 ID:Nhl1xZLpa.net]
チラシを見てキャベツが1円安いからと電車賃300円払って遠くのスーパーまで買いに行くような無駄な努力に思える。

188 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:03:54.28 ID:RNZAQQS50.net]
ネタを元にボケてるだけかと思ったら

189 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 19:56:07.52 ID:ukOyD8nn0.net]
Json.NETを使ったデシリアライズについて教えてください。
以下のようなJsonファイルを読み込んで、リストにデシリアライズをしたいです。

[
{
"email": "foo.example.com",
"active": true,
},
{
"email": "bar.example.com",
"active": false,
}
]

しかし、デシリアライズ時に、オブジェクトが2つ以上会い場合に例外が発生します。
using ( var sr = new StreamReader( @".\accounts.json" ) )
{
var accounts = JsonConvert.DeserializeObject<List<Account>>( sr.ReadToEnd() );
}

例外
Newtonsoft.Json.JsonSerializationException

エラーの原因はわかるのですが、解決策が思いつきません。
よろしくお願いします。

190 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 20:12:15.21 ID:RNZAQQS50.net]
デシリアライズではまる前に
オブジェクトをシリアライズして、どういうjsonが出来るか確認することを勧める

191 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 20:34:39.02 ID:ukOyD8nn0.net]
>>187
オブジェクトが単体の時は[]で囲まれていなかったので、
配列として認識されないような気がします。

もう一度考え直してみます。
ありがとうございました。

192 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 20:52:50.47 ID:voJmrOTp0.net]
parser通さずに自力解析した方が早そうw

193 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 21:41:14.56 ID:EmaCRb9M0.net]
>>186
うちの環境ではそのままで読み込めた。w
ああ、json ファイルのパスや、クラスをフルパスで書くように直したりはしたけど。
あと List<Account> を Account[] に変えてみても動作した。

json パーサは Newtonsoft.Json でいいんだよね?
ひょっとして json ファイルの文字コードや改行コードの問題だったりして。VS2017 で試した。



194 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 22:00:13.12 ID:RNZAQQS50.net]
まあ結論としては只の配列よねw
List<>が勝手に出てくる訳もなく

195 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 22:27:36.78 ID:LR2ZtPQc0.net]
>>181
「10進数が1桁増えるときに2進数表示で最後の4桁以外の文字列は使い回せるから文字列連結処理は多少減らせる」
の意味がわからない。

196 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 22:49:30.37 ID:ZGeLga+2M.net]
BCD?

197 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 23:07:28.05 ID:7iifCEQOa.net]
>>191
アホ?
デシリアライズ先の型としてList<>を指定してるんだからどう見ても勝手に出てきてはいないでしょ
普通にデシリアライズできるよ

198 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 23:26:43.60 ID:PUyuVhSj0.net]
>>192
単純に勘違いだろ。16進数から2進数への変換なら成立するけど
例えば251と256の2進数の下4桁が違うのはすぐわかる
質問引っ張るのもまずいけど元の質問者もフィードバックくらいしてほしいな

199 名前:デフォルトの名無しさん mailto:sage [2019/01/07(月) 23:45:26.56 ID:RNZAQQS50.net]
json.netはList指定いけたわ
低速過ぎて最近使ってなかった
失礼した

200 名前:デフォルトの名無しさん [2019/01/08(火) 01:42:19.06 ID:+TBsMqqs0.net]
9時と13時に定期的に作業を実行させたいので、タイマーを使ってプログラムを書きました。
似た部分が多いのでタイマー自体を配列化したのですが、「動作を停止しました」とエラーが出て動きませんでした。
タイマーの配列化って無理なんでしょうか?

System.Windows.Forms.Timer[] timerOnce = new System.Windows.Forms.Timer[2];
public GetControlsList()
{
myTimerOnce(timerOnce[0], "9:00");
timerOnce[0].Tick += new EventHandler(timerOnce_Tick);
}

// 指定時刻までの時間を計算して、Intarvalにセット
private void myTimerOnce(System.Windows.Forms.Timer thisTimer, string setTime)
{
//現在の時刻から、ターゲット時刻までのインターバルを算出
TimeSpan mySpan = DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd ") + setTime) - DateTime.Now;
int sleepSec = (int)mySpan.TotalMilliseconds;
thisTimer.Enabled = true;// タイマ ON
thisTimer.Interval = sleepSec; // 更新間隔
}

// 指定時刻になったらmethodを実行
void timerOnce_Tick(object sender, EventArgs e)
{
//実行したいメソッド
}

201 名前:デフォルトの名無しさん mailto:sage [2019/01/08(火) 06:44:44.69 ID:dT41V3TC0.net]
アドバイス頂いた通りシリアライズを見直したところ解決しました。

var account = new Account { Email = "hogehoge.example.com", Active = true, };
using ( StreamWriter sw = File.CreateText( @".\accounts.json" ) )
{
var jw = new JsonTextWriter( sw ) { Formatting = Formatting.Indented };
new JsonSerializer().Serialize( jw, account );
}

このように書いていたので、accountをリストに変換してから行うようにしました。
new JsonSerializer().Serialize( jw, new List<Account> { account } );

レスくれた皆さん、ありがとうございます。
こちらもVS2017なのできっと文法違いが原因です。
Json形式を勉強し直します。

202 名前:デフォルトの名無しさん mailto:sage [2019/01/08(火) 08:12:51.74 ID:mtJIt88ca.net]
>>197
そもそもWinFormsのタイマーは精度や信頼性がとても低く、時間の計測に使ってはいけない
あくまで「時々処理をさせたい」だけのときに使うもの
あなたのケー

203 名前:Xならタスクスケジューラを使うのが定石です []
[ここ壊れてます]



204 名前:デフォルトの名無しさん mailto:sage [2019/01/08(火) 09:49:22.14 ID:Sw3FA19SM.net]
>>197
配列をnewしただけで中身のTimerをnewしてないからじゃないの

205 名前:デフォルトの名無しさん mailto:sage [2019/01/08(火) 09:53:57.24 ID:Sw3FA19SM.net]
まずデバッグ実行することを覚えた方がいい気がしないでもない

206 名前:デフォルトの名無しさん mailto:sage [2019/01/08(火) 12:12:53.32 ID:+TBsMqqs0.net]
>>200
まさにそれでした。
1行加えただけで解決しました。ありがとうございました。

207 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 07:23:03.10 ID:fI4baLQf0.net]
本当に初心者質問ですが、ライブラリはimportとnamespaceから書いていくのと、どちらが良いのでしょうか

もしくは使い分けがあるのでしょうか

208 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 07:48:48.51 ID:c4aAB3Aqd.net]
>>203
ここC#スレやで

209 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 12:18:51.14 ID:fI4baLQf0.net]
>>204
C#はusingですけどスコープ内でオブジェクト破棄する機能もusingと呼称してるので混乱しないようにimportと表現しました

なんで2つの記述方法を許しているのか、何か意味があるのか気になりまして

210 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 12:21:16.40 ID:c4aAB3Aqd.net]
>>205
c#にもimportはあるから余計混乱するだけ

名前空間とusingsは全然用途違うでしょ?

211 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 12:21:41.32 ID:c4aAB3Aqd.net]
C#というかMSBuildだけど

212 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 14:41:58.83 ID:2h2JyjUc0.net]
>>203
名前空間の全表記は可読性下げるので使ってないな
VSでカーソル当てれば名前空間表示されるし、今時テキストエディタでゴリゴリ書いている人でもなければ全表記する必要ないと思う

213 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 14:52:14.20 ID:TKkGGOqYM.net]
>>208
MediaのcolorとDrawingのcolorが混在してるときはぶっ潰したくなる



214 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 14:55:45.81 ID:TKkGGOqYM.net]
pathってファイルパスじゃなくて
曲線かよ死ねよとか
省略形でも違いがあったほうが絶対いい

215 名前:デフォルトの名無しさん mailto:sage [2019/01/09(水) 19:11:30.62 ID:5txyXp0A0.net]
>>203
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-directive
usingでググればここに理由も呼び分け方(using ディレクティブ)も出ている
一般的な呼び名を使わないと調べることすらできなくなるよ

216 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 13:13:55.78 ID:lMztlpGar.net]
>>209
そういうの他にもある

217 名前:デフォルトの名無しさん mailto:sage [2019/01/10(木) 20:09:22.40 ID:9xQ4gBbQa.net]
P/InvokeやCOM相互運用を書くときに
System.Runtime.InteropServices.ComTypes以下の構造体やインターフェースを使う時があるんだけど
System.Runtime.InteropServices以下に同名の物があるから、大体の場合で完全修飾かusing alias directiveが必要になって面倒なんだよなあ
.Net1.1時代の後方互換性のためにObsolete付きで残してあるんだろうけど邪魔で仕方がない

218 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 12:39:13.44 ID:qc15f1nfD.net]
>>211
その名前を知る事が大変ですよね
沢山本読むしかないんでしょうけど

219 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 12:57:28.29 ID:RbVY6SmB0.net]
>>214
この話はusingの話で質問した人もわかっているし
わからないなら分からないなりに説明したらいいだけ
オレオレ用語使ってこんなところで質問するのは普通におかしい

220 名前:デフォルトの名無しさん [2019/01/11(金) 13:29:58.48 ID:5RUmP2fm0.net]
スレ間違えたことを嘘に嘘を塗り固めるのは朝鮮人の始まり

221 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 14:37:44.48 ID:225AU0sE0.net]
ちょっと教えろください。
int型変数二つの足し算でオーバーフローするかどうかチェックしたいのですが、
@decimalに

222 名前:Lャストして足し算した結果がintの範囲に収まっているかif文で判断
Atry catchで例外をつかまえる
どっちがいいのでしょう?
[]
[ここ壊れてます]

223 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 14:40:44.08 ID:86XGb19RM.net]
>>217
Bdecimalではなくlongにキャストして足し算した結果がintの範囲に収まっているか判断



224 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 15:54:41.82 ID:r18fheRy0.net]
>>217
int_max - a < bなら
a + b < int_maxが成り立つ
でも>218のほうがわかりやすいとは思う

225 名前:203 mailto:sage [2019/01/11(金) 17:49:49.09 ID:1orv+xc30.net]
俺がjavaerという事がバレちまったらしょうがねえ

なんだよusingってよ
vb如きだってjavaリスペクトしてんぞ

226 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:29:52.22 ID:KWycMyC0a.net]
>>217
オーバーフローは同じ符号の値を足した時にしか起こらず、起こった場合は前後で符号が変わる。
他の人が見ても何やってるか分かることが重要ならそれで判定するのが一番だと思う

227 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:33:43.65 ID:KnmjjSvJM.net]
ラップアラウンドとサチュレーションって学生のときに聞いたのが最後だ

228 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:40:14.66 ID:fFtOgUz40.net]
すみません、初めて見る構造体が出て来たのですが

[StructLayout(LayoutKind.Sequential)]
struct INITCOMMONCONTROLSEX
{
public int dwSize;
public uint dwICC;
}

これは何構造体と読むのですか?

229 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:45:24.19 ID:1+lzGhU1M.net]
つまらん!

お前の話はつまらん!

230 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:46:13.28 ID:eF6moy/g0.net]
>>223
https://ufcpp.net/study/csharp/interop/memorylayout/
>Sequentialレイアウトでは、複合型のフィールドは宣言した順序通りにレイアウトされます。

231 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:49:12.65 ID:1+lzGhU1M.net]
イニシャライズコモンコントロールズイーエックス構造体

232 名前:デフォルトの名無しさん mailto:sage [2019/01/11(金) 18:51:24.03 ID:zVvjOIcHa.net]
>>223
構造体名で検索したらInitCommonControlsEx関数が出てくるじゃろ

233 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 00:09:08.43 ID:iaJ8ArIE0.net]
VS2017でC#のプログラムを組んでます。

はじめてVS2017を使うのですが、画面の下に


準備完了 ↑ソース管理に追加

という邪魔なバーが表示されてます。
VS2010にはありませんでした。目障りなのでこれを消したいのですが何か方法はありますか?



234 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 00:20:55.22 ID:Fl9Ups4U0.net]
>>228
ツール->オプション、環境->全般、ステータス バーを表示するのチェックを外す

235 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 00:21:44.23 ID:iaJ8ArIE0.net]
>>229
ありがとうございます!!目障りだったんですよね。

236 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 01:04:45.40 ID:CChJ5ept0.net]
色々迷ったけど
オートフォーマットはOFFにした

237 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 03:22:33.67 ID:S1bCJ3S10.net]
例外処理(に限らず、エラー処理)ってどこまで徹底して行うべきなんでしょうか?
下みたいに、使うインスタンス片っ端から毎回nullチェックとかしてたら、凄まじいコード量になるんですが・・・・・
if(obj == null)
{
return msg;
}

238 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 03:53:00.80 ID:ejfouP+Ya.net]
>>232
さあ。
でもバグと例外は区別した方がいいんじゃないか。

そのコードは多分バグを想定してるんだよね?
絶対にとは言い切れないが、バグを想定してそれを検出するifは書かないのが普通じゃないか
いやライブラリみたいなものを作ってるならバグを想定して例外を投げるのは普通だけど

239 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 03:58:46.63 ID:ejfouP+Ya.net]
最後の行は引

240 名前:数のチェックの話ね []
[ここ壊れてます]

241 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 04:03:08.28 ID:2xT9w9620.net]
return msg
してるから まず例外をちゃんと使えてないんじゃ疑惑

242 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 04:04:51.50 ID:DC6KrvaN0.net]
デザインパターンでnullオブジェクトパターンみたいの参考にするのは?

243 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 04:12:05.96 ID:DC6KrvaN0.net]
nullが入るケースがあることを想定している場合にnullチェックを全部書くのがめんどいならnullオブジェクトパターン適用すればいいし
本来はnullが入ってたらおかしいケースならエラーを起こして拾わせるのが正しい構造って回答でいいのかな?



244 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 04:17:50.15 ID:2xT9w9620.net]
・nullが来ない想定ならチェック不要
・nullケース考慮したくないならnullオブジェクトパターン
・null来た場合にぬるり以外で知らせるならチェックする
・nullのネスト面倒ならnull条件演算子

こんな感じやろか
null非許容参照型使うという手もあるが

245 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 08:05:30.51 ID:VHzQIvd20.net]
読んでる入門書のLINQとラムダうんたらってのが分からなくて
手がstopしてしまっているのですが入門者向けに分かりやすく解説されてるページなど教えていただけないでしょうか?
メソッドの使い方はある程度分かったのですがそれじゃ駄目なんすかね…

246 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 08:39:26.90 ID:0dPYYJK00.net]
>>239
LINQやらラムダ使えなくても動くものはつくれるからまぁまずは作ってみよう

247 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 10:13:12.90 ID:iaJ8ArIE0.net]
最近は、自分でプログラム組まずにランサーズでハイスキルな奴に外注してるわw
中抜きでうま〜〜〜

248 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 10:35:45.31 ID:e9xF8Gpoa.net]
>>232
チームの方針次第
うちの場合は

nullを許可しない引数と返り値は基本的に全てチェックして例外を投げてる
めんどくさいと思うかもしれないがFluentAssertionのようなライブラリを使えばそこまで大きな負担にはならない

nullオブジェクトパターンはやればわかるがチェックするよりも手間がかかる
また必ずしもnullの場合の適切な動作を定められるとは限らない
適切でない場合にパターンを適用するとそれがnullオブジェクトかどうかチェックするといった本末転倒なことになりかねない
なのでこれが最も適切と確実に判断できる場合を除いて使用しない

C# 8.0が待ち遠しいね

249 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 10:44:33.52 ID:CChJ5ept0.net]
>>232
仕様と設計で解決する問題
エラーが出たときどうしたいの?
エラー出たときに別に原因とかわからんでええなら一連の処理をtrycatchで囲ったらええやん
なんか起きたらcatchに入ってくるで

250 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 17:18:08.40 ID:XDHakXaX0.net]
>>232
外部とのやりとりの場所は結構厳重にチェックを入れる。
自分で書いているところは適当に流す。

外部とは当該館数のパラメータや、呼び出す関数とかの戻り値ね。
try catch で囲んで、チェックして例外発行して、catch 内でまとめてトレース情報込みでログ出してスローするくらいなら大した手間じゃないじゃない。
その例なら if( obj == null ) throw new ArgumentNullException("ぼーっと生きてんじゃねーよ!"); で済む話じゃん。

>>239
コピペでもいいからたくさん書いてみる。で解決するよ。
やってるうちに理屈が分かるようになる。

251 名前:デフォルトの名無しさん mailto:sage [2019/01/12(土) 17:23:52.90 ID:iaJ8ArIE0.net]
昔は開発現場でこっそりExcel型の2chブラウザでネットサーフィンばかりしてたな〜
座ってるだけで月70万むっちゃらくやった

252 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 00:23:58.00 ID:X0+RFgX60.net]
>>239
駆け出し時代オー

253 名前:vンソース改造してた時にLINQはパフォーマンス悪いと思って見つけ次第foreachに手直しするという逆工程でLINQとラムダ式マスターした []
[ここ壊れてます]



254 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 00:46:53.42 ID:IIPQpabmp.net]
使えば勝手にlinqの快感にハマって抜け出せなくなる

255 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 04:21:19.42 ID:qwE0jZig0.net]
麻薬のような機能だなw

256 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 09:07:48.83 ID:Xn8IPTP50.net]
LINQもRxも使いだすと元に戻れなくなる

でも性能気にしてstructとforeachに書き直し始めると時間足りない

257 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 09:32:12.32 ID:Z+h8nfOL0.net]
>>246
パフォーマンスのためならなんでforにしなかったん?

258 名前:デフォルトの名無しさん mailto:sage [2019/01/13(日) 18:27:15.40 ID:X0+RFgX60.net]
>>250
Listはしてたよ
あとラムダ式はLINQ→foreachより行数減らす意識持って1行メソッドを見つけ次第ラムダ式に直す工程で習得したな

259 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 23:20:39.35 ID:3wGjtMyb0.net]
ComboBoxに例えばA〜Dと4つ項目が入っていて、A〜Cは同一計算方法でDのみ特別な計算方法でコード内容が異なり且つ色んな計算をする為コードが長くなる場合の見やすくする為の最初の分岐方法とか書き方とかありませんか?
今はifで分岐した中にあれこれ結果を取ってきて結果を出してるのでifがやたら長く見辛いです。なんかいい方法があれば教えて頂きたいです。

260 名前:デフォルトの名無しさん mailto:sage [2019/01/14(月) 23:31:33.99 ID:CBheeOs80.net]
LINQ使うと元に戻れなくなるのはわかるんだけどデバッグしづらくね?
デバッグを想定する時点で初心者なのかな...教えてエロい人

261 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 00:45:24.53 ID:DUfu4s9fa.net]
>>252
4っつぽっちの分岐で何がそんなに見づらくなるのかちょっと理解できんよ。
いや、煽ってるわけじゃなく本当に

各分岐先のコードが長くなるっていうのならそれぞれメソッドに切り分けるだけじゃないの?

262 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 02:09:17.70 ID:gvlEsXBIp.net]
>>252
if(value == d){
d用処理またはメソッド
}else {
a〜c用処理またはメソッド


これじゃダメなの?

263 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 04:09:30.23 ID:Vsgk6Uc3K.net]
>>252
ComboBoxにブチ込むためのクラスを書いてDは継承



264 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 06:09:12.86 ID:rjgxVR8i0.net]
LINQはなかなか身につかんなあ。
とりあえずforで書いといて見直してこれLINQで一行になるんじゃね?と気付いたらいそいそと書き直す感じ。
LINQ脳になってない

265 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 06:39:49.84 ID:OSSPo6bD0.net]
例えば処理順を意識しなくて良い場合、通常のforまたはforeachで処理するのと、Parallel.ForEachで並列処理するのはやはり並列処理の方が早い?

266 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 07:24:38.34 ID:ohj/8QmzM.net]
>>255
質問者の意図とは違うかもしれんがそういうコード書くと怒るやつがいた職場がある
わざわざ継承してうにゃうにゃやらんと怒る
んでできたコードが何がいいのか考えてもさっぱり意味がわからん
本人にメリットを聞いてもさっぱり理解できんというかメリットの話になると必ずボケた返しをする
ありもしない改修を想定してキチガイとしか思えない発言を連発する
そもそも仕様書や設計書に処理がその数で分岐するってあるのに
なんで普通に書いたら怒るんだよ
もうお前とはやってられん
ってとこまでいって仕様書や設計書通りに組んでるのに工数が増えてるのはあんたのせいだ
って会社間の会議になってもまだグチグチ言ってる
その場にいる全員?な状態だった

267 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 08:37:28.18 ID:biF ]
[ここ壊れてます]

268 名前:9zsRRd.net mailto: 環境次第 []
[ここ壊れてます]

269 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 08:41:56.04 ID:AEHaNlhRa.net]
>>259
条件分岐が減るとかじゃないの?
それだけ不具合が減る理屈だが、工数が増えてるんじゃ意味ないな

270 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 08:50:45.78 ID:OahWWfOzM.net]
普通のケースでは継承にしても
条件分岐が別の場所に移動するだけだべ

271 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 09:24:06.17 ID:n85zJfLmM.net]
>>258
Parallel.ForEachはオーバーヘッドが大きい
一周に数百ミリ秒かかるくらいの粒度の大きなループでない限りは普通のforeachより確実に遅くなる

272 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 10:26:04.16 ID:fix0rts+0.net]
多態性は手間がかかる割に恩恵が少ないよな

273 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 16:18:48.41 ID:R0UqBAnw0.net]
>>257
foreachならともかくforで書いているなら苦労するだろう



274 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 16:22:04.50 ID:R0UqBAnw0.net]
>>259
逆のパターンなら数多見てきたけど、そのパターンは珍しいな
if分岐が10以上になるからなんとかしてと言われて継承使ったプロトタイプ渡したら、なぜか基底クラスでif文復活してたことならあるけど

275 名前:デフォルトの名無しさん mailto:sage [2019/01/15(火) 16:36:00.01 ID:0qvQfApDM.net]
C#のforeachってpythonみたいに定義しないでindex取得出来ませんか?forにするしかないでしょうか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<273KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef