ふらっと C#,C♯,C#(初心者用) Part129 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/09(金) 18:36:01.72ID:lNiKtgPwM

「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

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

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

■前スレ
ふらっと C#,C♯,C#(初心者用) Part128
http://mevius.2ch.net/test/read.cgi/tech/1493730340/

■関連スレ
C#, C♯, C#相談室 Part94 [無断転載禁止]©2ch.net
http://echo.2ch.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/07/06(木) 09:36:10.51ID:SJTPfom00
>>745
webのやり取りは普通は[POST]と言う命令をサーバーに送るだけなので、C#で制御するにはそのページがデータを送る仕組みを解析して
同じようにデータを送る方法があります
そのページで何をやっているのか知るために、htmlとjavascriptの基本は抑えておいたほうが良いよ
2017/07/06(木) 15:47:39.70ID:R3A9km6A0
今更 var に感動してるんだけど、foreach の中じゃ無理なん?

System.Web.UI.WebControls.CheckBoxList checkboxlist;
foreach(var list in checkboxlist.Items)
{
  list.・・・
}

System.Web.UI.WebControls.ListControl 型を類推してほしいのだが、object になってしまう。。。
2017/07/06(木) 15:50:14.08ID:R3A9km6A0
× System.Web.UI.WebControls.ListControl 型を類推してほしいのだが
○ System.Web.UI.WebControls.ListItem 型を類推してほしいのだが
2017/07/06(木) 15:54:53.37ID:j+3WJv+ZM
そのプロパティが返す型がobject型なんでしょ。キャストすればいい
2017/07/06(木) 16:07:03.45ID:qhsH+LBBM
ジェネリックは.NET 2.0から
System.Web.UI.WebControlsみたいな.NET 1.xからあるものはIEnumerableしか実装してない
IEnumerator.Currentがobjectなのでvarは常にobjectとしか扱えない
2017/07/06(木) 16:10:25.20ID:j+3WJv+ZM
msdnみた。
itemsはlistcollectionという型を返すらしい。
それはenumrableを継承した型でジェネリックによる型推論が効かない。
キャストでEnumrable〈型〉を指定すればいけるんじゃないかな。
2017/07/06(木) 16:36:28.81ID:M4nTNHGha
どうでもいいけど類推って言葉の使い方間違ってますよw
2017/07/06(木) 17:09:22.66ID:Wdgs4/ag0
>>747
デキモシナイコードカイテンジャネー
( ‘д‘⊂彡☆))Д´) パーン
( ‘д‘⊂彡☆))Д´) パーン
( ‘д‘⊂彡☆))Д´) パーン
2017/07/06(木) 19:25:03.65ID:9B2MU8kU0
>>746
そのやり方自体はテキストベースではやったことがあるので使い方はわかりますが、ファイルを添付したい場合にどうしたらいいか
知らなかったのでウィンドウ操作のほうでやってみました。
ウィンドウ操作の方法もご存知でしたら教えてください。
2017/07/06(木) 23:14:22.57ID:rKvRSNC9M
var [ ] 配列
こーゆうふうにvarじゃ配列組めないの?
2017/07/06(木) 23:17:58.00ID:e4P8WO3j0
>>755
var (C# リファレンス)
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/var
varによる変数宣言とコレクション初期化子
varが使用できる場面
http://www.atmarkit.co.jp/fdotnet/csharp30/csharp30_03/csharp30_03_03.html
2017/07/06(木) 23:52:16.07ID:M4nTNHGha
こういう風ってどういう風だよww
2017/07/07(金) 00:03:47.18ID:uaUrbh0r0
>>755
それじゃ型を推論出来ない。
var piyo = new [] { 1, 2, 3 };
みたいに初期化子込みなら型を省略出来る。
2017/07/07(金) 00:28:42.12ID:5tYOHdE20
>>754
スレッドを起動する
windowを監視してファイル選択ダイアログを見つける
ダイアログを操作する
2017/07/07(金) 01:41:04.05ID:G2hd19q10
ai仕込んで、そろそろ型を推測するようにして欲しい。
ここで数字型の配列使いそうとか
2017/07/07(金) 01:56:18.71ID:VVUNYRiAa
それはAIじゃなくてESPだと思う
762デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 06:06:54.85ID:1OiH67XQa
>>760
CPUの分岐予測みたいに予測間違ったらストールして待って今予測し直すからって失敗時に待たされるんですね分かります。
思い通りのコードが出るまで何度も予測させるってなるとFacebookみたいに色んな感情選べるgoodボタン要るね。
2017/07/07(金) 07:16:00.55ID:Vo0hmpPS0
型を定義できないって不便だと思うがな
2017/07/07(金) 08:13:32.94ID:gXsXTAypr
>>520
C#だとぬるりかあぬるだな
あぬるなんて書いたらガッでなく
アッーって書かれるのか
2017/07/07(金) 08:23:25.36ID:URSZRmHsM
型を定義してないと思ってる>>763が不憫だと思うがな
2017/07/07(金) 08:27:59.78ID:9lQTb6dz0
var a = new ・・・
は、意図どおりに型定義されるからいいけど、
var a = 1;
は何か嫌だなぁ

int32? int16? 
どっちに判断したんだろって思ってしまう

var a = 1;
while(a < 100000000000)
{
 // 処理
a++;
{

みたいにすると、勝手にint64に判定してくれるの?
2017/07/07(金) 08:31:13.22ID:Vo0hmpPS0
int16のラップアラウンドを狙ってる俺のプログラムが動かないわけだ
768デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 08:31:31.51ID:3s7e5LVua
文脈から判断出来るならしてくれるはずだが。
気持ち悪いって。。。
むしろそこが目指すところじゃん。
2017/07/07(金) 08:58:12.84ID:G2hd19q10
コンパイラに何を望んでるの?
何が言いたいの?

勝手に型推論されると困る箇所は、明示的に定義するで済む話じゃない?

それとも、宣言より、後で出てきた命令も、
型推論の対象にしろと言っているの?

論点は何?
2017/07/07(金) 09:05:15.42ID:Vo0hmpPS0
バグが増えるの目に見えてんだよ
しかも組み手が面倒だからって理由だろ?
いらね

この程度で工数が縮まるわけじゃないし
品質は悪くはなるけど良くはならないよね?
って理由
2017/07/07(金) 09:19:40.74ID:SZgf6Ov20
>>770
何回目だよこの話
面白くねえんだよこのブタ野郎
今すぐ死ね
2017/07/07(金) 09:20:57.77ID:PTSkr6xOd
>>770
使い方が悪ければそりゃバグも増える
2017/07/07(金) 09:56:03.26ID:9lQTb6dz0
うん、だから自分は

System.Collection.Generic.List<string> a = new System.Collection.Generic.List<string>();

var a = new System.Collection.Generic.List<string>();

という時にしか使ってないな。
2017/07/07(金) 10:22:52.10ID:Vo0hmpPS0
>>771
とうとう会社で持論を展開してとっちめられちゃったの?
だから2ちゃんねるの常識をリアルに持ってっちゃ駄目って言ったのに
2017/07/07(金) 10:34:17.30ID:k3/HVzL10
var化
2017/07/07(金) 10:38:41.22ID:cHmqbnKr0
varはコードレビューを紙でやってるような会社だとまず無理なんだろうな
777デフォルトの名無しさん (アウアウエー Sadf-X9Wr)
垢版 |
2017/07/07(金) 10:51:37.63ID:NO/da/cwa
>>769
出来ないん?
型が確定するまでだから、そんな深くまで見なくて良いと思うんだが。
関数型言語の真似って手続き型言語だとそんな難しいんか。
2017/07/07(金) 12:10:35.47ID:SENaJwbTM
使う側としては型を意識したくない
作る側としては型を意識したい

もやもやする
2017/07/07(金) 12:21:38.99ID:XSZI/EScM
>>766
> var a = 1;
> は何か嫌だなぁ
> int32? int16? 
> どっちに判断したんだろって思ってしまう
数値リテラルの型を理解してないのか?
long (符号つき64bit) としたいなら
var a = 1L;
って書きなさいよ
2017/07/07(金) 12:24:56.38ID:XSZI/EScM
>>770
そりゃバカが使えばどんな機能でもバグは増えるわな w
C# についていけないなら止めたら?
2017/07/07(金) 12:26:56.17ID:Q2kSZF88M
数値リテラルが書かれた後にpythonの話どうぞ↓
2017/07/07(金) 12:41:52.18ID:SENaJwbTM
>>781
ようこそ!
ここは C# のスレです。
2017/07/07(金) 13:00:31.32ID:oeznL6ez0
>>774
はあ?死ねって言ったんだよ?
意味分かりますか?
さっさと中央線に飛び込めクソカス
2017/07/07(金) 13:06:55.37ID:1gWkujGM0
>>759
ありがとうございます。
やってみます
2017/07/07(金) 13:14:51.13ID:4tey7BLBd
>>783
通報しますた
2017/07/07(金) 14:00:45.31ID:SiIRctva0
>>777
varで宣言した変数に

数値と文字列を代入してたら
あるいは、実数と整数を代入してたら
ベースクラスと派生クラスと代入してたら

どっちが正しいのかどうやって判断するの?

結局どうやって判断しても、それがコードの品質にも
生産性にも寄与しないって判断なんじゃないの
2017/07/07(金) 14:14:59.32ID:9lQTb6dz0
>>786
この話題の言い出しっぺで恐縮だが
var と VB の Variant 型と混同してないか?
宣言だけじゃコンパイル通らないよ
定義した行で型が決定される

var a;   ←コンパイルエラー

var a = 1;  // OK
var a = "1";  // OK

var a = new ペースクラス();  // OK
var a = new 派生クラス();   // OK


>>766 な俺が言うのもナンだが
var a; だけで通ると思い込んでいての発言としか思えない。
2017/07/07(金) 14:35:08.74ID:N5kyklD6a
ほんとにお前が言うのかだなww

>>766で宣言以外の場所から型推論すると思い込んでいる誰かさんがいると思って
>>786はそれはできないしできても混乱のもとだと説明してあげてるんだろ
2017/07/07(金) 14:50:40.06ID:9lQTb6dz0
var a = 1L; と書かない俺が悪かっただけと理解したので、その件はクリアした。
2017/07/07(金) 16:13:39.09ID:Vo0hmpPS0
var a=1;だとバグって
var a=1L;だと正常に動く言語ってもはやわかりにくいだけじゃない?
2017/07/07(金) 16:26:40.00ID:9lQTb6dz0
制限時は小さい値だけど、実際にはLongまで使っちゃうよ、って場合に
バグの原因になると思うけど、c++ でも int に毛嫌い感じていた自分としては
全く受け入れられないほどでもない。

まぁ最初に書いたように、var を積極的に使うのはクラス生成時くらいだが
2017/07/07(金) 16:46:34.06ID:SiIRctva0
varを使う最大の理由は、それしか匿名型を宣言できないから

LINQなんかで匿名型使うときに使えって話で
LINQテクノロジ入門で著者の赤間氏は
自動型推定機能だけを取り出して、「コーディングの手抜きをするための機能」として使うのは大きな誤りである
と言いきってるぞ
2017/07/07(金) 17:07:33.31ID:9lQTb6dz0
自分はVBもやってるけど
C# に var がなかった時代に

System.Collection.Generic.List<String> a = new System.Collection.Generic.List<String>();

はさすがにありえんだろ、と思ったぞ
みんなが悪口を叩くVBですら

Dim a As New System.Collection.Generic.List(Of String)();

ってシンプルに定義&宣言できたわけで
2017/07/07(金) 17:08:50.09ID:Vo0hmpPS0
>>793
別にnewじゃないときもあるし
2017/07/07(金) 17:14:05.56ID:9lQTb6dz0
System.Collection.Generic.List<String> a;

a = new();

みたいな記述を未来のC#が許してくれると便利なんだがな
2017/07/07(金) 17:18:03.95ID:PTSkr6xOd
>>786
var知らんだろお前
2017/07/07(金) 18:10:03.94ID:uxSF98L50
スカイプを使っていますが、
送ったメッセージが時間しか表示されません。

2017年7月7日 18:10

みたいなここまで時間を表示させたいのですが
何か方法はありますか?
2017/07/07(金) 18:13:24.15ID:/0QWkrJMF
>>797
それはc#とどのような関係がありますか?
2017/07/07(金) 18:25:55.79ID:RHxA7IUxa
>>795
それは採用されないと思うわ
2017/07/07(金) 18:43:43.61ID:uxSF98L50
>>798
関係を見つけるのがあなたの宿題です。
2017/07/07(金) 18:59:17.65ID:WzcYN8gwM
>>795
右辺か左辺かどちらかでよい。
だから、左辺での推論は不要。
2017/07/07(金) 19:08:02.66ID:SENaJwbTM
>>800
そうか
関係ないと結論づけたがらもう来るなよ
2017/07/07(金) 19:25:06.02ID:WzcYN8gwM
c# asp.net mvc でアプリを作っていますが、
アプリケーションのバージョンってどこに持たせますか?

gitのブランチ名と同期?というか、バージョン名のうまい運用方法などあったら教えて頂きたいです。
2017/07/07(金) 20:05:53.11ID:cfjlOUj60
>>766
個人的には組み込み型はintとかって書く派ではあるけど、varの推論はオーバーロード解決と同じなので理解しておかないとまずい。
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/int
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/byte
にあるように、intで表せればint。無理ならuint,long,ulongの順に優先される。
ただし、右辺値がintより小さいとリテラルの場合は暗黙的に型変換される。

>>777
どこまで推論するかにもよるけど、実際にはかなり時間がかかる状況があるらしい。
コンパイラならまだしも、C#ではリアルタイムに正確なインテリセスが出せないといけない都合上、高度な型推論は無理みたいだね。

ここらにまとまってた。ついでに>>795の左辺値による型推論についてもちょうど乗ってるな。
Roslynのissueがあるのかと思って探したけど、数が多すぎて見つからん
http://ufcpp.net/study/csharp/sp3_var.html?p=2#rhs-inference
2017/07/07(金) 20:28:27.40ID:ZSQ0qsfGM
>>803
CIやれば?
ツールは何でもいいけど、要はgitから特定のコミット取得→ビルド→デプロイ→どっかの構成情報にコミットIDを書き込む
までを自動化してやればいいわけでしょ
そんなに難しいことではないと思うけど
2017/07/07(金) 20:49:06.51ID:591C1YpBa
いい加減アルツハイマーの繰り言みたいなvarの話に乗りたくないけど、
なんか「推論」って言葉の語感に騙されてる人が何人かいるねw

あえて推論という言葉を使ってるのは、例えば

class Hoge:IHoge
{
}

var x = new Hoge();

においてxの型がIHogeやObjectでも矛盾が起こらないのに
矛盾が起こらない一番狭い型Hogeに決まるからだろうけど、
実体は推論っていうより重複する型指定が省略できるってだけの話
2017/07/07(金) 21:19:06.08ID:WzcYN8gwM
>>792
適切に処理を組めばスコープを短くできる。
その短いスコープでわざわざ型をご丁寧に指定することもないと思うけど。
2017/07/07(金) 22:10:15.14ID:hIjTIVzv0
>>803
GitVersionとCakeの組み合わせが最強
2017/07/07(金) 23:11:26.49ID:SiIRctva0
>>807
まあそれはその通りだ
あの本はLINQのための本だから、多少言いすぎ感はある

ただ、匿名型の宣言はvarでしかできないってのと
やりすぎるとプログラムの見通しが悪くなる
って点はまあ気に留めといて良いんじゃね
2017/07/08(土) 10:53:59.63ID:H/yQ/C3x0
>>806
> 矛盾が起こらない一番狭い型Hogeに決まるからだろうけど、
矛盾?
お前が推論と言う言葉の語感に騙されてるんじゃね?
単に new Hoge() の戻り値の型にしてるだけだぞ
2017/07/08(土) 10:58:59.78ID:KLTA7RLdM
var unk=GetUnko();
型は?
ハイ、論破
ってレスしたら前スレ潰れた
2017/07/08(土) 11:32:42.29ID:DYgwIkoI0
またvarの話してるw
2017/07/08(土) 13:17:11.47ID:iUWc0Lt60
頭が var code
2017/07/08(土) 17:40:02.88ID:+dVEYhio0
var code = hage;
2017/07/08(土) 17:50:02.15ID:P6T2V/+uM
nullはバグの元
2017/07/08(土) 21:19:54.26ID:yyvtXfzAM
var moukon = null
817デフォルトの名無しさん (ワッチョイ ffa2-rvkC)
垢版 |
2017/07/08(土) 21:41:27.81ID:+Y6XHfRP0
var便利!型なんて気にしなくていいじゃん!いっぱい使お
2017/07/08(土) 22:00:35.68ID:Rp+AsbLLa
違うだろ、違うだろ〜っ
2017/07/08(土) 22:02:16.36ID:n52tISe+0
型を気にするか気にしないかで言えばJavaScriptでもPHPでも気にするし・・・
2017/07/08(土) 22:16:42.84ID:VrqbZITR0
動的型付けはunko
静的型付けこそ至高
2017/07/08(土) 22:32:13.97ID:DL1526nj0
C#を勉強していて、1年くらい前に少しだけPythonもかじってみた素人だけど
Pythonの型のほうに違和感をおぼえた・・・
たとえばメソッドに想定外の型を渡そうとしたら、C#だとコンパイルエラーになるし
Pythonも実行時にたいていエラーになるんだろうけど
Pythonで、型が違うけどたまたまエラーにはならず、でも想定外の挙動をしているって場合は
面倒なことになるんじゃないかなと思った

ちょっと勉強してPythonはやめてしまったので、自分が知らないだけでたぶん型の間違いを
防ぐ方法はあるんだろうし、C#も勉強を中断中だからいろいろ的を得てないかもしれないけど・・・
2017/07/08(土) 22:35:52.31ID:OfhYt3zE0
動的型付けと静的型付けって言葉を知ってるかい
2017/07/08(土) 23:00:17.81ID:8YhBgLjXM
コンパイラのフィードバックを得られればおk
人間が型を把握しきるメリットはない
2017/07/08(土) 23:00:56.87ID:n52tISe+0
JavaScriptで関数を定義したとき仮引数は本来何でもOKなのだが
実際には99.9%その仮引数に特定の種類の値を想定するわけで
VSCodeでインテリセンスに頼ろうと思うと結局JSDocコメントつけて静的型付け同然にしちゃう
2017/07/08(土) 23:20:47.10ID:tYGsw7Ad0
>>821
タプル地獄にしてやれる自信が俺にはある
2017/07/09(日) 01:54:35.14ID:pwRHbkyi0
Eclipse でコンソールの入力が受けられなくて悩むあるある

Python
タプルだ、ちゃんとキャストしなさい
c++
gdbとか色々絡んでパイプがつまるのか?よくわからん
2017/07/09(日) 22:42:35.74ID:H6/RuZ0J0
{"price":{"apple":"100","orange":"50","grape":"80"}}
こういう形式のjsonをC#でデシリアライズしたいんですが、コントラクトはどう書けばいいんでしょうか?
果物の数と名前は不特定です。
2017/07/09(日) 22:59:54.75ID:MzxM8ASX0
>>827
JSON扱うならJSON.NETをMSも推奨してるよ
単にDictionary<string, string>型のpriceプロパティにするだけ
2017/07/09(日) 23:16:12.83ID:H6/RuZ0J0
>>828
あっさりできました!ありがとうございます
2017/07/10(月) 18:47:09.19ID:w+1H0LRc0
C#でテトリスを作っているのですがブロックによっては回転させるとおかしくなったり、また端っこまで寄せてそれ以上移動させようとすると変形したり散々です
ブロックを回転させるときにx座標にyを、y座標に-xを入れればいいと書いてあったのですが違うのですか?

http://ideone.com/35p7Ko
2017/07/10(月) 19:06:29.55ID:QQHtP4rc0
既にあるのに


C#でテトリスなんて作る必要ある?
2017/07/10(月) 19:34:24.67ID:O/cYMYfea
>>830
自分で紙にでも書いてみりゃわかるが単にx=y,y=-xにしても望む回転はしないよね?
それはx=0,y=0を軸とした回転であって動いてるブロックの中心を軸とした回転じゃない
ブロックの中心軸回転したいなら中心座標からのオフセットを回転させる的なことしないとダメ
詳しくは調べりゃ絶対出てくる
2017/07/10(月) 19:55:43.44ID:Ypzg3NP6M
せっかくならボンブリス作成に精を出してもらいたい
2017/07/10(月) 20:12:20.59ID:qOKFO2KrM
>>830
テトリスを作るのが凄いんじゃなくて、最初に発想した人が凄い
2017/07/10(月) 20:16:20.81ID:9oiksQC/0
>>831
つまらない人生送ってるでしょ君
2017/07/10(月) 22:23:10.72ID:6R2l0O8O0
WebBrowserのプロキシ設定をやりたいのですが、InternetSetOption使うとIEの設定まで変わっちゃいますよね?
アプリはプロキシ通してIEはプロキシ通さない方法ってないですかね?
2017/07/11(火) 00:44:10.74ID:9LvcNct10
すいません、自己解決しました。
IEの設定を書き換えるコード消さずにInternetSetOptionしてたらそりゃIEも設定されますわ・・・
何やってんだろ俺
2017/07/11(火) 02:45:03.56ID:awT4MGi50
お前がテトリス作っても誰も遊ばねーよ
2017/07/11(火) 03:12:45.75ID:7rDHAaRU0
初心者が練習で作るなら何でも良いだろうに。
Hellow world作るなと難癖付けてるのと同じ位無意味。
テトリスならプログラミング的には割と単純だし、練習の題材としては悪くないだろう。
2017/07/11(火) 07:40:44.76ID:R2QBTC310
いやテトリスは無い
オリジナルの機能も付けないんだろ?
2017/07/11(火) 08:07:41.32ID:4tLCxKGnM
誰が何を作ってもそんなの各々の勝手だし。
2017/07/11(火) 08:19:02.76ID:Uezk8qzjM
最近になってようやく拡張メソッドってすげーなって感じた
2017/07/11(火) 11:14:07.06ID:HR/3NLpFp
>>842
実際は単なるstaticメソッドの構文糖だけどな
2017/07/11(火) 12:10:09.14ID:7obiTgu70
拡張プロパティが欲しくなる
2017/07/11(火) 12:11:43.17ID:7obiTgu70
SetXX、GetXX って拡張メソッドが美しくないもん。。
多重継承ができないから、どうしても拡張メソッドでカバーせざるを得ない場面が多い
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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