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

■ このスレッドは過去ログ倉庫に格納されています
2017/11/29(水) 19:23:58.05ID:GNLsbK4F0
「どんなにくだらない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/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/

■コードを貼る場合は↓を使いましょう。
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
772愛知人
垢版 |
2018/01/29(月) 17:05:56.81ID:pcTu+bOr
>>770
arr.All(x=>x!=0&&x!=1000)
2018/01/29(月) 17:42:29.88ID:vA4dMQ1gM
>>771
ドキュメントでよくあるよなこれ
この種のミスをする奴は何度注意しても直らないんだよ
774愛知人
垢版 |
2018/01/29(月) 18:26:02.43ID:pcTu+bOr
反射的にレスしてすまん
たしかに2通りあるな
775デフォルトの名無しさん (ワッチョイ b703-rERY)
垢版 |
2018/01/29(月) 18:58:15.23ID:z90g+lRG0
ねえわwリアルでもこんなアスペばかりで困るけどなw
776愛知人
垢版 |
2018/01/29(月) 19:04:54.22ID:k6Igz8nX
arr.All(x=>!(x==0||x==1000))
!arr.All(x=>x==0||x==1000)
2018/01/29(月) 19:08:04.50ID:vO9vHw7qM
日本語で書くから間違える
最初からコード書けばいいのにね
2018/01/29(月) 19:10:08.17ID:CbBWbMhk0
>>775
お前の読解力が絶望的だってのはわかった
2018/01/29(月) 19:48:59.46ID:4EZh8ZpyM
>>777
なるほど、つまり>>770は、

arr.All(x=>!(x==0||x==1000))
を書きたいのですが

もしくは、

!arr.All(x=>x==0||x==1000)
を書きたいのですが

と質問すべきだったと。
確かにこれなら解釈が割れる心配ないね!
2018/01/29(月) 20:09:39.08ID:Ml84jtHT0
anyのことも、偶には思い出してやって下さい
781愛知人
垢版 |
2018/01/29(月) 21:07:54.20ID:pcTu+bOr
解ってます
2018/01/31(水) 06:50:26.36ID:ywuJndNd0
>>689
どーせ、CreateCompatibleDCみたいな話
2018/01/31(水) 07:23:04.73ID:NBRruYI30
>>782
それどっかにまとめないかな?
2018/01/31(水) 12:33:39.58ID:Hr5M/E+Xa
初心者だからわからないんだろうけど
そういうリソース系は数量をチェックしても無駄だよ

チェックした時点で大丈夫かもしれないけど
使うとき限界に達してるかもしれない
どこも保証しない
実行して失敗なら失敗
2018/01/31(水) 12:36:13.73ID:Hr5M/E+Xa
鉛筆の数をチェックしてあまり1本あっても自分が使うまでのわずかな間に
別のアプリがその鉛筆を使うと自分は使えない
2018/01/31(水) 12:37:16.98ID:202u6MlTM
開放のルールがワカンネ
2018/01/31(水) 12:40:26.06ID:Hr5M/E+Xa
いきなり鉛筆をつかもうとする
つかめなかったらwindowsは異常な事態になってるので回復は不能
アプリを落とす

自分で鉛筆を使ってる場合使わなくなったら即座に開放
たったこれだけ
2018/01/31(水) 12:51:37.68ID:YgPJ7UgLD
c♯固有の話では無いですがインターフェースのファイルとクラスのファイルは一般的に同じフォルダに入れてるのでしょうか?

インターフェース用フォルダ、抽象クラス用フォルダ、クラス用フォルダと分けた方が見やすいとかあるのかなと思いまして
2018/01/31(水) 12:54:49.47ID:Hr5M/E+Xa
c#固有じゃないとは言い切れない

ご自由にというか
その時のルールがあるならそれに従えばいい
c#はjavaのようにフォルダ構造が名前空間じゃないから
2018/01/31(水) 13:01:03.78ID:5zei4l0gM
>>788
普通は名前空間に合わせる
ソースにオリジナリティを出すな
2018/01/31(水) 18:20:28.08ID:SANOK0fjM
>>790
なるほど名前空間で別けるのですね

独学初心者には思いもつきませんでした
参考になります
2018/01/31(水) 18:51:07.07ID:K5Al/IGma
いや、それは単にVSがそういう前提で作ってある(ソリューションエクスプローラから
新規にファイルを作った時のスケルトンの名前空間がプロジェクトの規定の名前空間に
フォルダ階層がくっついたものになる)ってだけの話で、別に必要なら単に分類のために
フォルダ作ってもいいと思うよw

そんなケースはあんまりないとは思うけど
2018/01/31(水) 19:49:36.61ID:Hr5M/E+Xa
そういう前提には作ってないよ
設定があってチェック外せばどのフォルダで作っても同じ名前空間になる
794愛知人
垢版 |
2018/01/31(水) 19:50:28.99
このエラーの原因が分りません、教えてください(>_<)
https://i.imgur.com/0hN1rC0.png
2018/01/31(水) 19:52:10.31ID:Hr5M/E+Xa
>>794
スペルミス
クラス名見てみろ
796愛知人!id:ignore (ワッチョイ e305-5Mtj)
垢版 |
2018/01/31(水) 19:54:02.69ID:3eBSylxa0
>>795
ありがとうございます!
2018/01/31(水) 19:54:19.37ID:Ul/zaXpy0
>>794
マゲガー
2018/01/31(水) 19:58:03.82ID:Hr5M/E+Xa
おかしいと思ったらコピーして検索してみろ
2018/01/31(水) 20:41:19.03ID:6Q7+onpXM
>>798
最大で140℃くらいまでしか開かないので、コピー機に入りません(>_<)
2018/01/31(水) 21:11:48.89ID:uhY/QizFd
>>783
昔、GDI+とMFC or Win32APIから.netに移行する表とその説明があったけど、検索で調べきれないわ。

さかのぼると、WM_PAINT, BeginPaintとか古典的な描画APIとかの話になるから

今、ディスプレイドライバーのソースを見てるけど、なかなか説明が難しいわ

ごめんなさいね
2018/02/01(木) 03:40:13.00ID:J9JLK/T20
デバイスコンテキストの説明になんでドライバまで降りるねん。
2018/02/01(木) 04:01:11.67ID:XxNDw1fe0
最近この板変な人が多いの
2018/02/01(木) 07:50:14.98ID:jtx9E0YE0
知識をひけらかしたいだけでしょ
2018/02/01(木) 11:30:02.30ID:DhFBeVpNa
非常に単純化した話として
windowsは特定のリソースを数字で管理してるけど
その数字の上限が決まってる

管理してる空きがないと確保できない
単純な話

出来ないものはできない
それだけ
何も難しくない
2018/02/01(木) 11:31:56.97ID:DhFBeVpNa
だから使わなくなったらすぐに解放しておけばいい
それだけ
何も難しいことはないけど馬鹿がこねくり回して難しい難しい言ってるだけ

サンプルソースで開放してないのは1個ぐらいもれてても実害はないから

実装する際は自分で実装したらいい
2018/02/01(木) 12:00:06.18ID:1x8PgmKV0
実はウンコもちょっとくらいもれてても実害はない。お前のパンツは飾りか?
2018/02/01(木) 12:09:28.60ID:jtx9E0YE0
パンツに漏れてるウンコなら気にしちゃうけど
公園の片隅に置いてあるウンコは無視しちゃう
2018/02/01(木) 12:23:03.42ID:0snSQv2vr
気にしたやつが負け
809愛知人
垢版 |
2018/02/01(木) 22:50:11.02
WinFormsの自作Componemtでデータをネットから取得するメソッドで、完了と失敗のイベントを実装するのは普通ですか?
2018/02/02(金) 00:11:33.54ID:JsFuCwNz0
問題ないと思うが、今の流行りならasync Task<Hoge>等で結果返すパターンかな
2018/02/02(金) 00:34:30.18ID:cT4GbCx9M
コールバック地獄は嫌だ
812愛知人!id:ignore (ワッチョイ 9775-jUAt)
垢版 |
2018/02/02(金) 00:51:28.62ID:jGftTsx+0
ありがとうございます(>_<)
2018/02/02(金) 08:11:51.44ID:prG6i1oZ0
>>801
ごめんね。

低レベルでアロケータがどうなってるのか気になって。
( ノД`)…
2018/02/02(金) 11:49:47.51ID:BMFcc+go0
U+2028/2029に初めて遭遇したんだが
文字列を1文字ずつ走査して IsSeparator が true だったら削除して詰める、って関数ない?
2018/02/02(金) 12:19:04.07ID:dTcbVnf+r
秒で書けるのによくそんな事質問する気になるな
気が長いやつだ
816愛知人
垢版 |
2018/02/02(金) 12:29:56.98
>>814
Replace
2018/02/02(金) 12:34:09.95ID:BMFcc+go0
また拡張メソッドが増えた
818愛知人
垢版 |
2018/02/02(金) 12:37:13.44
区切り文字を削除したいシチュエーションなんか普通はないしな
知らんけど
2018/02/02(金) 12:38:34.03ID:BMFcc+go0
ところで拡張メソッドって参照されないんだっけ?

public static System.Data.SqlClient.SqlCommand CreateCommand(this System.Data.SqlClient.SqlTransaction SqlTransaction)
{
  var SqlCommand = SqlTransaction.Connection.CreateCommand();
  SqlCommand.Transaction = SqlTransaction;
  return SqlCommand;
}

BeginTransaction した後のトランザクションを使って CreateCommand すると
トランザクションの内側に入る、的な糞メソッドを作ったんだけど
どうやら、トランザクションの外側になっちゃうっぽいんだ。
→ Rollback しても戻らない
→ ブレークポイントしながら見てると、トランザクション自体が開始されていない

ref this で解決するかと思いきやクラスはダメで使えない
VB.NET だと普通に出来ちゃうと聞くが
820愛知人
垢版 |
2018/02/02(金) 19:36:31.54
コードでコントロールのプロパティを規定値(DefalutValue属性の値)にリセットする方法はありますか?(>_<)
2018/02/02(金) 19:54:02.62ID:UX+Yt5X5M
PropertyDescriptor(ctrl).GetProperties()[nameof(ctrl.Property)].ResetValue();
2018/02/02(金) 19:54:48.71ID:UX+Yt5X5M
あ、.ResetValue(ctrl)だった
823愛知人!id:ignore (ワッチョイ 9775-jUAt)
垢版 |
2018/02/02(金) 20:50:42.32ID:jGftTsx+0
ありがとうございます(>_<)
2018/02/02(金) 21:57:28.18ID:Zl28+evz0
c#っぽい独自言語の解析をしてるんですが
コメントの「//」や「/*」「*/」の解析って
ダブルコーテーション内と外ってどうやって判断したらよいでしょうか?
2018/02/02(金) 21:59:32.04ID:z7oDIr3g0
スタックに積む
2018/02/02(金) 22:38:26.26ID:dT49NCpma
>>824
やり方次第

作ったことあるのでわかりやすいのは文法をのままコードにする
頭から呼んでって状態を覚えておく

文字リテラル内は解析しないでエスケープルールや”の監視だけする

//や/*コメントの時は行末まで読み捨て
2018/02/02(金) 22:39:44.98ID:dT49NCpma
間違い

/*は*/を読み捨てしたらダメだなw
2018/02/02(金) 22:40:01.25ID:pft3AbU10
パーサジェネレータ使えよ
2018/02/02(金) 22:48:59.30ID:Zl28+evz0
>>826
それがわからない
文字列リテラルなのかコメントなのか判断できない
ダブルコーテーションから判定するとそれがコメントだったとき駄目
コメントから判定するとそれが文字列リテラルだったとき駄目
っていうパラドックス
2018/02/02(金) 22:52:11.72ID:dT49NCpma
>>829
それは変なやり方してるからだろ
おおかた正規表現などで判定してるんだろう

コードを頭から読んでできないのは
文法がおかしいかパースのやり方がおかしいからだ
2018/02/02(金) 22:56:57.54ID:dT49NCpma
急がないならどれかの言語のコードでもじっくり読んで勉強したらいい
大体の言語はオープンソースなので好きなのをやればいい
ただしc++の知識ぐらいはいる

急ぐならテストパターンを十分に用意して手あたり次第やればいい
2018/02/02(金) 23:08:58.70ID:Zl28+evz0
>>830
やけっぱちで
解析のコメント削除時に「//」か「/*」見つけたら同じ行の前側みて
文字列リテラル中かどうかみる処理入れて乗り切ってみた
2018/02/02(金) 23:10:39.49ID:z7oDIr3g0
>同じ行の前側みて
うん、かなり無茶苦茶だな
先頭から順に読んでいって、「今は文字列リテラル中」とか「今はコメント中」とかの状態を保持しておけよ
2018/02/02(金) 23:15:27.28ID:dT49NCpma
独自言語の解析してるんだろ?

他の部分が出来てるなら
普通に頭から読んでって "が出たらリテラルフラグオンにして
//が出たら行末まで読み捨て
/*だったら次の*/がでるまで捨てるだけ

何も難しくない
2018/02/02(金) 23:17:24.91ID:dT49NCpma
文字が抜けた

"が出たらリテラルフラグオンにして仕様通りリテラルを最後まで読み切るだけ
836デフォルトの名無しさん (ワッチョイ 7703-skLA)
垢版 |
2018/02/02(金) 23:18:02.29ID:HOyQOl0G0
独自言語が逐次実行される前提で話してるな
2018/02/02(金) 23:18:46.57ID:z7oDIr3g0
もしかして、1文字ずつじゃなく1行ずつ読み込んでるんじゃないだろうな
2018/02/02(金) 23:22:20.25ID:z7oDIr3g0
>>836
逐次実行じゃなくても、頭から順に読むのは同じだよ
読んだ物を構文木に積んでいって、評価・実行は最後にやれば良いだけ
2018/02/02(金) 23:24:38.81ID:yHy9QEH1a
>>829
難しく考えすぎでしょう。
>>826が言ってるのはたぶん単純なステートマシン。

enum State
{
  トークン探索中,
  文字列検出中,
  インラインコメント検出中、
  ....
}

stateを表すenumを定義して、stateの値に応じて動作を変えるだけ。
文字列リテラルの始め「"」やコメントの始まりを検出するのはstate = State.トークン探索中の時だけ。
素朴すぎるやり方だと思うが、少なくともこれでそんなパラドックスには陥らない
2018/02/02(金) 23:24:41.10ID:dT49NCpma
>>832
本当にめちゃくちゃだな
前方見ても意味ない
確定するためには本当に最初までさかのぼることになる
2018/02/02(金) 23:24:55.99ID:ErA95Rap0
>>834-835で答えが出てるのでこれ以上はスレの無駄遣い
2018/02/02(金) 23:27:13.14ID:HOyQOl0G0
>>838
横ぐるまを押したか
2018/02/03(土) 00:00:03.20ID:S/Wa3aFw0
>>840
大丈夫だよ
文字列リテラルって2行続かないじゃん確か
2018/02/03(土) 00:06:47.29ID:pHRpw+FT0
>>843
そんなのはルール次第
2018/02/03(土) 00:15:01.77ID:NdjAbgSB0
例えばC#なら@""で改行入れられるし
846愛知人!id:ignore (ワッチョイ 9775-jUAt)
垢版 |
2018/02/03(土) 00:17:09.98ID:GkUi/Itq0
そのときだけ行またげばいいだけだし
2018/02/03(土) 00:34:25.55ID:S/Wa3aFw0
>>845
ぎゃああああ
出来やがった

既存コードが解析の初っ端でコメント削除からやってるから
弄りたくなかったけど
いよいよ駄目だな
2018/02/03(土) 00:38:09.24ID:AuUEv0AE0
知らんかったんかいw

コメントは削除するんでなく、「読み捨てる」んだ
2018/02/03(土) 00:41:40.01ID:S/Wa3aFw0
>>848
いや、似非c#だからそんなことできんだろと
2018/02/03(土) 00:53:02.56ID:PxR3gYBlM
ヒアドキュメントを除いたとしてもしソースの先頭の/*をどうやってみつける?
状態を持たないならソースの頭までさかのぼるしかない
2018/02/03(土) 00:58:38.87ID:S/Wa3aFw0
>>850
いや、今のルーチンはコメントの削除からやってるのよ
2018/02/03(土) 01:03:27.72ID:OVqIgYtY0
コメントも文字列も先に始まったほうが勝つからどうしょうもない
2018/02/03(土) 01:06:21.86ID:PxR3gYBlM
質問しといて聞かないパターン=成長しない初心者パターン
2018/02/03(土) 01:12:38.71ID:xyf2cJ8Ka
ただ悩みを聞いて欲しかったんじゃないですか
女の相談事みたいなw
まあ、どうせ人も減ってるしそれもありでしょう
2018/02/03(土) 01:24:32.23ID:S/Wa3aFw0
>>853
いや、アドバイス通り
頭から読んでいくしかないっぽいっすね
クレームが来てるところがまさにそこなので誤魔化しが効かない
2018/02/03(土) 08:34:38.62ID:WhjNgY2U0
>>854
お姉さんが聞いてあげるわ。
今夜、川口駅リリア側の出入り口で待ってる
857デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 09:02:44.63ID:LvTBogUR0
swich() { case xxxx: ~
xxxxに変数をつかいたいのだが、switchに変わるものってなに?
2018/02/03(土) 09:33:50.59ID:NdjAbgSB0
if
2018/02/03(土) 09:53:42.04ID:nKXUpnsB0
>>857
xxxが数値か文字列なら変数だろうと使えたはずです。オブジェクトの場合、同値の判定が基本型のように単純じゃないから無理。
860デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 10:50:39.85ID:LvTBogUR0
switchi( (button)sender) ){
case Button1: ~
case Button2:~
case Button3:~
}
こんな感じのことがしたい。

〜はMethod()でいいので、
void switch_tb()= {
{Button1, Method1}
{Button2, Method2}
{Button3, Method3}
}
switch_suru((button)sender);
こんなことできんか? 
861デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 10:52:21.97ID:LvTBogUR0
C#はメソッドの中のローカルメソッドってできへんの?
2018/02/03(土) 11:00:14.66ID:VOrllN0n0
>>860
素直にButtonのNameプロパティ使え
2018/02/03(土) 11:01:41.64ID:Ns10a1iN0
>>861
C#7で出来るようになったよ
2018/02/03(土) 11:41:19.78ID:ZFgrbY8z0
糞化が止まらないのか。
2018/02/03(土) 12:15:40.34ID:7uT3RC1La
メソッド内メソッドは無くてもいい機能
メンバー封じ込めの方法はいくらでもあるし

ないほうがエラー見つけやすいと個人的には思う
866デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 12:24:29.31ID:LvTBogUR0
いい方法をみーつけ
2018/02/03(土) 12:24:59.79ID:ROxRBp/zr
バグだろwなにちょっと誤魔化そうとしてんのw
2018/02/03(土) 12:29:16.06ID:0dr4TWncd
>>864
言語の変化についていけないやつの糞化な
2018/02/03(土) 12:30:20.78ID:nKXUpnsB0
>>860
Buttonと関数のDictionaryでできそう
試してないけどこんな感じでメソッド取ってくれば…

Dictionary<Button, Func<T, TResult>>
2018/02/03(土) 12:31:12.90ID:7uT3RC1La
メソッド内メソッドはjavaでずっと使ってたけど
クラスを小さくしていくと使う場面は限られていく
2018/02/03(土) 12:33:37.55ID:Iq/kHIZ+0
初心者っぽくていいじゃん
「この機能が存在する意味が分からないんですけど、何の役に立つんですか?」
って定番の質問じゃん
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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