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


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

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



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

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

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

82 名前:79 mailto:sage [2018/06/11(月) 13:13:19.40 ID:6xD/x26k0.net]
>>80
新しいソリューションを作成してコードをコピペしたら問題が発生しなかったので
とりあえず解決したということにします。

ありがとうございます

83 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 21:03:57.62 ID:TLX2q1MD0.net]
フォームアプリで画面の真ん中に線を引きたいと思って単純に

(System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height)/2

のところに線を挽けばいいと思ったんですが、モニタのピクセルの半分のところに線を引くと
フォームの上の -□× のあるバーの下から0ピクセルになるから20ピクセルほどが下にずれてしまいます。
フォームの中央に線を引く方法ってないでしょうか?

84 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 21:10:24.16 ID:hXpDig4+p.net]
枠無しフォームでやれ。

85 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 21:11:16.03 ID:R9cSput30.net]
>>82
フォームの中央なのか画面の中央なのかまずはっきりしてくれ
スクリーン座標←→クライアント座標の変換を行うには?
www.atmarkit.co.jp/fdotnet/dotnettips/377screentoclient/screentoclient.html

86 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 21:12:11.98 ID:aKalcs2L0.net]
フォームの中央なのかディスプレイの中央なのかどっちだよ

87 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 21:44:14.69 ID:TLX2q1MD0.net]
自分でもどっちでいいかわからなくなったw
最初単純にフォーム最大化してるんだから、モニタの真ん中が真ん中だろと思ったら、
windowsって下にタスクバーあるわ、モニタの下に非表示領域20ピクセルほど隠れてるわ、フォームにフォームバーあるわで、
モニタの真ん中が真ん中に見えない。
たぶん無意識化でフォームの真ん中が人は真ん中と認識しているので気持ち悪い。
ということでフォームの真ん中にしました。

88 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 22:15:41.36 ID:kexbIBuK0.net]
>>86
タスクバーの位置なんて自由に変えられるんだけど

89 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 22:24:08.10 ID:xa0hP702a.net]
>モニタの下に非表示領域20ピクセルほど隠れてるわ
そんなものはないと思うけど...
今時CRT使っててオーバースキャン表示でもやってるなら別かもしれんけどw

90 名前:デフォルトの名無しさん mailto:sage [2018/06/11(月) 22:37:51.73 ID:VLKc0T550.net]
フォームバーってタイトルバーのことかな
非クライアント領域もあるぞ



91 名前:前スレ976 mailto:sage [2018/06/12(火) 07:25:05.60 ID:qsxFIdydM.net]
どうにかイベントを発生させることができました。ここから5バイトの受信データを分解して処理を分岐したいんですが、どのような手法、便利な関数がありますでしょうか。
オペコード1バイト+データ4バイトという形式です。データは4バイトで表現する数値だったり、1ビットごとのフラグだったりします。
昔ながらのswich~caseで分岐って使うんでしょうか
オペコードが増えたり、データの予約ビットが変わると変更が大変そうです

92 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 08:46:58.51 ID:awfOgDQGa.net]
switchでいいよ
たかがイベント一個作るのに何日もかかるようなレベルで今どんな凝った設計しようが、結局後で全部やり直しになる
今は余計な手間をかけないこと、シンプルに保つこと、それだけ考えてりゃいい

93 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 08:51:11.88 ID:l+dIOx6V0.net]
デバイスドライバーみたいに処理をチェーンさせるってのもあり

94 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 09:12:16.14 ID:HMj9ZmCFM.net]
スクリプト言語のインタプリタなんかでも巨大switchが普通だぞ
断言するが、先を見通せない状況でヘタにコマンドパターンとか入れても、後で横断的な変更が多発して
すべてのコマンドクラスに手を入れて回るアホみたいな作業に追われることになるだけ

95 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 10:49:11.67 ID:Blmm4zE90.net]
コード増加はともかく予約を変更すんな・・・

96 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 11:04:17.10 ID:O2DKnY7ra.net]
>>90
どっちにしろ「便利な関数なんかないでしょうw
ちっとも汎用的じゃない処理をエレガントに書く方法なんか用意されてるはずがないw
泥臭い物は泥臭く書くしかないかと

オペコードがそれ以上分解できない前提で

(1) オペコードをenumにキャストしてswith、でも
(2) ジャンプテーブル(デリゲートの配列)を使う、でもお好みで

もし仮に受信するデータが常にこちらから要求したデータである、
つまり、どういうデータが送信されてくることをこちら側が期待しているか事前に分かっている場合は
別の方法論もあると思う

その場合はこちらがリクエストを出す段階で、期待する種類のデータだけを読解できるオブジェクトを
生成してタイムアウト付きで待機させればいい

97 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 12:12:37.91 ID:yJ6G/fgzM.net]
>>93
横断的な変更を最小限の労力でやるために最初にほんのすこしだけ投資する
これがシステム開発のコツな

98 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 14:41:16.06 ID:dH3jUIiRp.net]
それより、データの先頭を識別できるフォーマットにしたか?

99 名前:デフォルトの名無しさん mailto:sage [2018/06/12(火) 15:40:05.30 ID:wFgJsw9E0.net]
固定長なら先頭コード種類分のデリゲートを割り付けるってのもあるが、こればっかしは好みだな。

100 名前:前スレ976 mailto:sage [2018/06/12(火) 20:18:08.93 ID:qsxFIdydM.net]
ありがとうございます。
ベタベタに書いてみます。

1バイトが1ビットごとのフラグになっている場合はビットマスクで一つずつ抽出するのが一般的でしょうか?



101 名前:デフォルトの名無しさん [2018/06/13(水) 22:29:58.82 ID:T96Fk9Se0.net]
SQLについて質問ですが

INSERT INTO T_USER (
ID, PASSWORD
) VALUES (
@ID, @PASSWORD
);

のINSERT分を

INSERT INTO T_USER (
ID = @ID,
PASSWORD = @PASSWORD
);

のように書く場合はどのようにしたらよいでしょうか。

102 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 22:33:15.48 ID:8SXHgjst0.net]
スレチ

103 名前:デフォルトの名無しさん mailto:sage [2018/06/13(水) 22:40:13.78 ID:dwe0uTDh0.net]
そういうメソッド作ったらいいじゃん

setInsert(new dictionary略);

みたいなの

104 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 08:40:57.01 ID:tUkyOm+Z0.net]
クラスの構造体(ただint型のデータが複数個しかない)をXMLに変換したいのだが
XMLSerializer以外に何かないかな?
XMLSerializerは以前にバグを起こしたことがあって使いたくないんだ

105 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 09:14:05.32 ID:o3acK5Uh0.net]
>>100
UPDATEじゃないんだから・・・

106 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 09:54:39.43 ID:A8NrLUZ4M.net]
クラスの構造体…?

107 名前:デフォルトの名無しさん [2018/06/14(木) 11:31:35.89 ID:/+f4Bre90.net]
>>103
全手動

108 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 12:02:09.33 ID:cv0ACSdK0.net]
最終的に配列を書きだしたいのですが
それまでに色んなクラスのインスタンスからその配列の読み書きがされるのですが
どういうふうにクラスを作ればいいですか?
その配列はグローバルでstaticで宣言するか、インスタンス作るごとに参照を引き渡すのですか?

109 名前:デフォルトの名無しさん [2018/06/14(木) 13:20:39.46 ID:NMzxKZ+IM.net]
>>107
日本語でおk

110 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 14:19:07.38 ID:KBTpBKAkM.net]
>>107
グローバルなpublic staticでいい
良い悪いを問題にするのであれば、あちこちから共通の配列をいじくるという前提の時点で設計に問題があるので、正解なし、が答えになる



111 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 15:31:16.28 ID:fa4YRdZnp.net]
アクセス関数を作ってインスタンス取得用に一つスタティック関数を用意するだけ。
アクセス関数介さないと、排他処理とかいちいち入れるの面倒だぞ。

112 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 17:22:37.66 ID:Omv9hEYDd.net]
初歩的な質問なんだけど
プロパティ?(get;set;)ついてるやつと、ついていないやつの差がわからないから教えてほしい

プロパティつけててもprivateはアクセスできないみたいだから
結局、両方ともpublicになって何が違うん?ってなってる

113 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 17:40:33.14 ID:T0JMmz9y0.net]
>>111
プロパティにするとメソッドを組み込めたりgetとsetでアクセスレベル変えられたり
あと取りあえずこの辺とか
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/properties
特定のソースで何が変わるの?って言う話なら書いた人に聞かないと分からない

114 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 17:41:27.02 ID:im2Z0uooa.net]
クラスのメンバーでプロパティじゃない変数はフィールドと言う

フィールド (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/fields

プロパティ (C# プログラミング ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/classes-and-structs/properties

フィールドは代入も参照も同じ制限になる
プロパティは別々に設定できる
しかもgetだけ setだけというのも可能

フィールド (メンバ変数) とプロパティはここが違う
https://code.msdn.microsoft.com/windowsdesktop/5-5f82

115 名前:8cde []
[ここ壊れてます]

116 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 18:59:14.79 ID:UejGuppF0.net]
クラスのプロパティに「型」を変数みたいにおけますか?

外部から「型」をセットして、クラスの中でその型を使って new して実体を作って利用したいのです。

117 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 19:03:10.93 ID:UejGuppF0.net]
気持ちをコードで表すと

  public class Test
  {
    public <T> PersonClass;

    public void Unko()
    {
      var p = new PersonClass();
      p.unko();
    }
  }

ってな感じです。
※PersonClass にメソッド unko() がある前提

118 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 19:09:01.39 ID:Cyktia16d.net]
>>115
これ使えば?
https://msdn.microsoft.com/ja-jp/library/0hcyx2kd(v=vs.110).aspx

119 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 19:15:40.41 ID:5YiZsxt70.net]
>>115
unkoを定義するインターフェイス作って、
Tをwhereでそのインターフェイスとnew()で絞った上で、default(T)でインスタンス作って、呼べばよいのでは?

120 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 19:19:58.23 ID:w+8RUA83a.net]
>>114
賭けてもいい
初心者がこの手の処理が必要だと思う時、それは100%勘違いw



121 名前:デフォルトの名無しさん [2018/06/14(木) 19:26:49.09 ID:dsNhKni40.net]
>>99
enumにFlagsAttributeを付ける

[Flags]
enum Hoge : byte
{
Bit0 = 1 << 0,
Bit1 = 1 << 1,
Bit2 = 1 << 2,
Bit3 = 1 << 3,
Bit4 = 1 << 4,
Bit5 = 1 << 5,
Bit6 = 1 << 6,
Bit7 = 1 << 7,
}

var hoge = Hoge.Bit1 | Hoge.Bit4;
if ( hoge.HasFlag( Hoge.Bit3 ) )
{

122 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 23:44:33.25 ID:rYhQU2t8a.net]
>>119
そんな見てて痒くなる書き方しなくても今のC#は2進数リテラル使えるぞ

123 名前:デフォルトの名無しさん mailto:sage [2018/06/14(木) 23:56:40.66 ID:9S9/LeJo0.net]
1
2
4
8
16
32
64
128
でいいよ。

124 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 00:31:01.58 ID:UuMD2cf2a.net]
>>119みたいなのならHexで書くのが一番だろうねw
少なくとも俺ならそうする

125 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 01:23:47.16 ID:hh/0fz+KM.net]
10進よりマシだが一番ではない
2進があるならどう考えても2進が一番

126 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 01:34:20.89 ID:UuMD2cf2a.net]
書いてみりゃ分かるよw
単に一つのビットだけ立っている値を列挙するなら2進リテラルは冗長過ぎる。
そもそも何のためにHexなんかあると思ってるの

2進リテラルっていうのは、例えば組み込みで7セグのパターンのテーブルを定義する時とか、
bit5-bit7みたいにニブル単位じゃないビット範囲のビットマスクを定義する時とかに使う

127 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 02:40:57.81 ID:3RK99arqM.net]
君にとってはCが頭に染み付いてるからそうかもしれないけど、
現に>>119にとっては分かりにくいからわざわざこんな書き方をしてるんだろう
今時のプログラマはC経験ない人も多いんだから実情に合わせることも必要
そういう連中を見下すのもいいけど老害呼ばわりされないように気をつけてね

128 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 03:02:28.24 ID:UuMD2cf2a.net]
>>125
しょうもな
偉そうにするな!と偉そうに言うバカw

どこが偉そうにしてるのか。

そもそも俺は>>119を必ずしも否定してない。
少なくとも10進表記や2進数リテラルよりマシだ

129 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 03:07:31.98 ID:UuMD2cf2a.net]
どーでもいいけど、こういう自分を客観視できない単細胞な奴がネトウヨとかなるんだろうね

130 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 03:33:39.61 ID:/sL5C1h/0.net]
ネトウヨってつまりどういう定義なんですか
マンコ吸わせてくださいs



131 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 06:19:02.91 ID:9gOvrFZ50.net]
5分かけて最後に煽っていくというだけで
自分が嫌ってる

132 名前:ゴミと大差なくなっているというね []
[ここ壊れてます]

133 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 07:16:26.72 ID:Cd+XXhnVM.net]
今どきビット演算なんてしてるやつはゴミ

134 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 07:16:57.07 ID:Cd+XXhnVM.net]
これまで歩んだ人生がゴミ

135 名前:前スレ976 mailto:sage [2018/06/15(金) 07:27:20.01 ID:A2l2tHW6M.net]
>>119
ありがとうございます


bitarrayってのがあるらしいんですけど、これって共用体とかに一括で代入できないんですかね
3バイトデータの内の下位1バイトは1bitごとのフラグなのでbitarrayで分解できそうなんですが

136 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 09:16:33.32 ID:rymWY0Tx0.net]
そういえばちょっと疑問なんだけど、enum定義する時に>>119みたいにbyteとか指定するのは何か意味があるの?
指定したところでbyte型の変数に代入しようとしたらキャストしなきゃいけないし、やる意味がわからないんだけど

137 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 09:22:49.39 ID:BTgSia3a0.net]
>>133
え?キャスト?

138 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 09:45:21.99 ID:rymWY0Tx0.net]
>>134
え?

139 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 10:04:23.68 ID:BTgSia3a0.net]
ああ、enumで作った型なんだからenum型になってるだろ。
受ける変数も同じ型じゃないとダメなのは当たり前。

140 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 11:52:41.04 ID:jCp8kGwY0.net]
>>133
シリアライズとかネイティブとの相互運用目的



141 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 11:58:42.21 ID:6Dx/uRsOp.net]
動的にenumで作った型のsizeof求めりゃいいんだが、静的に解決しなきゃならない時は指定するしか無いって話だよな?

142 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 12:03:59.97 ID:AMC7cROI0.net]
>>116-117
コンパイル時点で型が定まらない(実行時に型が決まる)ものを new する手段という風ですよね?
使えそうです。ありがとうございました。

あとは、外部から「型」を受け取って new するまでの間、保管しておきたいのですが
型を変数(プロパティ)に格納するにはどうしたらいいんでしょ

143 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 12:20:55.24 ID:NFN3YtCpd.net]
>>139
117はジェネリクスなのでコンパイル時には一応定まってるハズ。
型を変数に入れたいならインスタンス.GetType()か、typeof(型)で、Type型の値が取れるけど…
本当にやりたい事と、実装の方法(型を受け取ってインスタンスを作ってそのメソッドを呼ぶ)がズレてないか心配。

144 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 12:25:49.54 ID:rymWY0Tx0.net]
>>137-138
なるほど、さんくす

145 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 12:48:48.68 ID:AMC7cROI0.net]
>>140
ありがとうございます。
「型」を格納する変数の型は System.Type なんですね!!
やりたいことが出来ました!!

System.Type t = typeof(××フォーム);  ← ここのところを公開して外部からセット

var f = (System.Windows.Forms.Form)System.Activator.CreateInstance(t);
f.ShowDialog();

146 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 12:57:15.01 ID:PdS4cleJa.net]
>>142
それさあ、キャストしてる時点で何の意味があるんだと思わなきゃw

147 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 13:10:18.30 ID:VuRl2MkoM.net]
>>143
Showなどのフォーム共通の操作をしたいんだろう
基底クラスにキャストする分には意味はある
設計として正しいかどうかは別問題であり今の情報だけでは何とも言えないが、
君は自分の個人的な好みを一般常識であるかのように主張して相手の事情を理解しようとせず人を一方的に批判する傾向があるようだね

148 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 13:16:34.24 ID:AMC7cROI0.net]
本当は自作インターフェースを持った「なにか」から派生するクラスなのですが
そこまで書くと行数が凄いことになるので、Form を例にさせてもらいました。

149 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 13:30:43.12 ID:/HLz/tc50.net]
>>145
本当は何がしたいの?

150 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 13:36:49.24 ID:PdS4cleJa.net]
>>144
そういうのはFafcoty Method的な方法でやればいい。

最初から質問者が何か勘違いしてるだけだと言ってるが、
>>114-115みたいな方法論を取る必要は何もない。

お前ごときに俺の何が分かるんだアホか
その批判、お前自身にちゃんと向けているか?

自己分析一つできない奴に限って安易に他人を批判したがるから笑える



151 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 14:16:21.09 ID:AMC7cROI0.net]
>>146
基底クラスから派生したクラスを動的に生成します。

142 みたいな方法が出来ることを知らなかったので
switch 〜 case でクラスの種類だけ new() やってたところをキレイにします。

152 名前:デフォルトの名無しさん mailto:sage [2018/06/15(金) 15:03:37.25 ID:NFN3YtCpd.net]
>>145
それは自作インターフェイスに「『自作インターフェイスをもった何かのインスタンス』を返す関数」を定義しておいて、
何かの方で「その関数」を実装して、
呼び出す側では普通に「その関数」を使えば良いのではなかろうか。
抽象クラスと静的関数の方がキレイかな。

「その関数」のリストが作りたいなら、そこでやっとリフレクションで取ったらいいし。
いきなりCreateInstanceは宜しくないというか危ないし、後々、各小クラスでコンストラクタがどうしようもない状況に陥ると思うよ。

153 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 00:47:26.32 ID:i9Db63x30.net]
Dynamicは黒歴史ですか

154 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 08:04:12.32 ID:axPFqDQY0.net]
いいえ

155 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 08:10:11.50 ID:YoGVHqI7d.net]
うんにゃ

156 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 08:34:15.67 ID:eKBdC14eM.net]
むしろ.NETのメインストリームがWebに移ってからはdynamic使われまくってる
JSONデータをたくさん扱ってるといちいち型付けてられない場面が多い

157 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 09:57:30.72 ID:fkqp7HMy0.net]
自作のインタプリタ作った時に
Dynamic使った記憶がある

意図は・・忘れたww

158 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 10:02:21.77 ID:v/kjTt9Bd.net]
>>153
jsonからクラスへの変換なんてVisualStudio使えば一瞬じゃない?

159 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 10:04:46.66 ID:ayiE9VmyM.net]
大規模プロジェクトなら連想配列禁止は納得できる

160 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 12:20:07.70 ID:omCaDuHT0.net]
教えてください。
戻り値が async Task のメソッドで await を使わないと↓のような警告が出ます。

> CS1998 この非同期メソッドには 'await' 演算子がないため、同期的に実行されます。
> 'await' 演算子を使用して非ブロッキング API 呼び出しを待機するか、'await Task.Run(...)' を
> 使用してバックグラウンドのスレッドに対して CPU 主体の処理を実行することを検討してください。

独立したメソッドなら、await が必要ないなら async Task をやめて void にすればいいのですが、
仮想呼び出しなどの関係で戻り値を変更したくない場合の解決策に悩んでいます。

とりあえず、

[1] 警告を抑制する
[2] async だけ外して Task.CompletedTask を返す

という二つの解決策を思いついたのですが、どちらも到底正しい方法とは思えません。
いいアイディアがあれば教えてもらえると嬉しいです。



161 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 12:52:10.42 ID:Ws4rvThPa.net]
>>157
2が正しい

162 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 12:56:37.78 ID:dmQidkOU0.net]
同期的に結果が分かるものを非同期にして結果が欲しいとか、コールバックでも仕込んで別処理で結果得ないと正しい結果なんて分からないだろうに。

163 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 13:16:07.05 ID:omCaDuHT0.net]
>>158
レスありがとうございます。やはり他に正しい方法はないのですね。
非同期が必要になるまでは同期

164 名前:実行できるのが async の効果だと思っていたので
非同期が全く必要ないときに async が使えないのは逆のような気がして
違和感が拭えないのですが、とりあえず [2] の方法でやっていこうと思います。

>>159
申し訳ないのですが、同期ついて理解不足で仰っていることが理解できないので
もう少し詳しく説明していただけないでしょうか。
[]
[ここ壊れてます]

165 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 13:59:46.72 ID:VCIrJNT80.net]
await Task.Run(()=>やりたいこと)
で済ますのはどうなんだろ。

166 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 14:16:04.53 ID:Ws4rvThPa.net]
>>161
無駄にスレッド消費するしマルチスレッドによる不要なトラブルを持ち込む可能性もある最低最悪の方法
awaitを外したくないなら await Task.CompletedTask の方がクリーン

167 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 14:42:27.67 ID:omCaDuHT0.net]
>>161
レスありがとうございます。せっかくなのですが、私もその方法はあまり良くないと思います。
ご存知でしたら失礼を許していただきたいのですが、以下の2つの効果は同じではないのです。
async Task X() => Thread.Sleep(1000);
async Task Y() => await Task.Run(() => Thread.Sleep(1000));

>>162
確かに await Task.CompletedTask をどこかに挟むだけなら
変な副作用もなさそうですね。
ただ、警告を抑制するためだけに意味のないコードを加えるのは正しくないように思います。
私がそんなコードを見たら、await Task.Yield() のような効果を期待しているのかなと
誤解してしまいそうです。
(もちろん、 await Task.CompletedTask を勧めてくださっているわけではなく、
 「await を外したくないなら」という無理のある前提に合わせて話してくださっていることは
 理解しています)

168 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 14:59:09.83 ID:ext5YZxs0.net]
これあえて警告出しっぱなしじゃ駄目なのかね
IDEがasyncメソッドをawait無しで実行しているから警告しているだけであって、意図的に同期実行するのならコメントとかで明示しておけば良いような気もするけど

169 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 15:23:38.22 ID:omCaDuHT0.net]
>>164
レスありがとうございます。
たかが警告を消すために実際のコードを書き換える必要があるのかという考えは
実にごもっともだと思います。
ただその場合、警告を抑制するだけでも意図は十分に伝わると思うのですが、
やはり警告はそのままにしてコメントなどで説明を行うべきなのでしょうか。

170 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 15:24:59.98 ID:gQX30pFpa.net]
#pragma warningディレクティブ使って警告を抑止するのが一番素直のような気がする。
知らんけど

っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...



171 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 15:35:00.89 ID:omCaDuHT0.net]
>>166
レスありがとうございます。やはり警告の抑制も選択肢になりますよね。
警告を抑制することに対する考え方は人それぞれということもあると思いますので、
その都度状況に応じた対処法を考えるのが一番でしょうか。

> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...

申し訳ありません。これについてよく意味が理解できませんでした。
詳しくご説明していただけないでしょうか。

172 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 15:46:13.12 ID:gQX30pFpa.net]
>>167
ごめん後者アホなこと言いましたw

よく考えてみたら、asyncが付くかどうかはただのメソッドの中の実装によって決まる話であって、
ベースクラスやインターフェイスによってそれが強制されることはないよねw

普段深く考えずに使ってることがばれちゃったw

173 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 16:13:25.34 ID:dmQidkOU0.net]
なぜ同期させているのかが根本的に分かって無いから、警告を解く事だけに注意が向いてるんだな。
同期が必要ならコードどころか構造を変えるくらいしないてならないだろうに。

174 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 17:10:20.97 ID:b9GFXH4k0.net]
状況把握しきれていないが
async()=>{}という形でラムダにasyncつけることで解決できるケースもあるんじゃね?

175 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 17:13:04.67 ID:omCaDuHT0.net]
>>167
ご説明ありがとうございます。 >>166 で仰っていた意味が理解できました。
async/await は糖衣構文なので確かにベースクラスなどで使用が強制されることはありませんが、
深く考えずに使えるところが糖衣構文のいいところですし、
async を使うメソッドに XxxAsync という名前をつけることが推奨されていることからも、
事実上 async/await を使うかどうかはベースクラスに依存していると言っていいと思います。
これを踏まえて、改めて >>166 にお返事したいと思います。

> っていうか、asyncなしで問題ない前提なら最初から何も悩む必要ないと思うんだけど...

文法上は async なしでも問題ありませんが、コードの一貫性を考えると async を意図した
メソッドのオーバーライドで async なしは問題だと思います。
それにもかかわらず、たまたま実装上 await を全く使わなかっただけで
async の使用をとがめるような警告が表示されてしまうので悩んでいるのです。


>>169
レスありがとうございます。他の方のご意見も聞かせていただいて、
やはりこの警告は不適切で、警告を解くことだけに注意を向ければいいように感じてきています。
それに対して異論を唱えてくださっているようなのですが、勉強不足で仰っていることが
よく理解できていないので、申し訳ないのですが詳しく説明していただけないでしょうか。

176 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 17:18:42.84 ID:omCaDuHT0.net]
>>170
レスどうもありがとうございます。
このような返しばかりで情けないのですが、理解力が足りず仰っていることがよくわかりませんでした。
申し訳ありませんが詳しいご説明をお願いできないでしょうか。

177 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 18:03:54.76 ID:AoXX/TDlp.net]
先ず、同期と非同期で何が違うのか、
同期は目的の処理を完了して戻って来る事が大前提で作られている。
非同期は目的の処理を行う指示だけをして戻って来る。
だから戻り値も自ずと意味が違って来るのが普通。
同期の戻り値は実行結果、非同期の戻り値は指示出来たかどうかで結果はまだ分からない。
そこを根本的に間違えているから、問題なんだよ。

178 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 18:08:04.04 ID:40YgBCHOM.net]
>>173
基底クラスやインターフェイスに合わせるためであったり、
後でDB使った実装に変更する予定で今はハードコードしておくみたいなときには普通にあるケースだよ
後で非同期に変えるのは影響が大きいからね

179 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 21:30:40.09 ID:omCaDuHT0.net]
>>173
レスどうもありがとうございます。
同期処理と非同期処理の違いは、一般論としてはおっしゃるとおりだと思うのですが、
それが >>174 でご指摘いただいているような目的を達成する上で障害になっていて、
そのような問題を解消するために async/await 構文が作られたのではないでしょうか。
だとすると、同期処理と非同期処理の違いを理由に await なしの async を
否定することは本末転倒のように感じてしまうのですがいかがでしょうか。

>>174
ご説明どうもありがとうございます。
具体例を含めてとてもわかりやすく感じたのでこのレスの前半で引用させていただきました。
私にはこれだけ要領よく説明することはできそうにないので助かりました。

180 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 21:44:52.43 ID:dmQidkOU0.net]
まあ、メイン処理止めていいなら待てばいいじゃない。
止めたく無いならポーリングやコールバックで終わったの知ればいいじゃない。
コーディングでワーニング出るから構造を弄るって手法そのものが間違いって言ってるの。



181 名前:デフォルトの名無しさん mailto:sage [2018/06/16(土) 22:10:42.86 ID:omCaDuHT0.net]
>>176
メイン処理を止めたくないならポーリングやコールバックを明示的に記述する以外に
選択肢がないというように読めてしまったのですが、この部分に間違いはないでしょうか。
もしそうなら async/await 構文についてあまりお詳しくないようにお見受けしますので、
よろしければ一度お触りになってみてください。
非同期処理の大変さをご存知であればこそ、便利さを実感できるのではないかと思います。

(ちなみに、今の問題は非同期処理を行うことも可能なメソッドをオーバーライドする際に
 非同期処理を全く使わないと警告が出てしまうということですので、
 何かに妥協してメイン処理を止めるというわけではありません)

182 名前:デフォルトの名無しさん mailto:sage [2018/06/17(日) 00:16:30.35 ID:hCSOxZ9X0.net]
そもそもasync修飾子そのものには、たんにawaitする目印としての意味しかないわけで
awaitしないメソッドをasyncにするのが根本的におかしいとしか思えんのだが






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

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

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