ふらっと 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/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 って拡張メソッドが美しくないもん。。
多重継承ができないから、どうしても拡張メソッドでカバーせざるを得ない場面が多い
2017/07/11(火) 12:21:38.98ID:w51PVrvpM
それはクラスに手を入れなよ
2017/07/11(火) 12:32:43.48ID:7obiTgu70
分かりやすく既成品で言うと
TextBoxとLabelに共通する機能を追加したいとき、
共通機能を MyClass に書いて

class MyTextBox : TextBox, MyClass
class MyLabel : Label, MyClass

って風にしたオリジナルクラスを作りたいのだが、それが出来ない。
Interface定義するにせよ、中身はそれぞれに書かないといけない

拡張メソッドで
public static MyMethod(this System.Web.Ui.WebControl Control, ・・・)
って風に共通化させざるを得ない
2017/07/11(火) 12:39:25.35ID:w51PVrvpM
>>843も言ってくれてるけど拡張メソッドは所詮ただのstaticメソッド
同じような感じでプロパティってなるとどこからでも参照できる単一の状態となる

プロパティの存在意義を考えたらstaticな状態はとっても危険
2017/07/11(火) 12:46:19.28ID:t4lUkhAUa
第一引数にthisを取ってるんですがw
何が危険なんだw
意味が分からん
2017/07/11(火) 13:02:42.77ID:BFcSVt3FM
>>847
エヴァンジェリストなんかは「実装の継承は悪」て言ってるけど。
2017/07/11(火) 13:18:32.42ID:EEzJWlBea
プロパティはオブジェクトの状態を表すわけであって
既に閉じたクラスに対して状態を外から付け加えたいって場面はそうないだろ
2017/07/11(火) 13:43:38.38ID:t4lUkhAUa
Rectangleに右下の座標をPointで返すプロパティが欲しいとか、
配列の最後の要素のインデックスを頻繁に使うからa.Length - 1じゃなくてa.LastItemIndexって書きたいとか、
要するにプロパティを追加したいケースなんて普通にコード書いてれば山ほどあるよ。

例に挙げたのはゲッターだけだけどセッター込みで欲しいケースもね。
2017/07/11(火) 14:23:28.23ID:yF5c0Q2u0
内容がダセェ
金にならない些末なことはテキトーにやっとけよ
誰も突っ込まねーから
2017/07/11(火) 14:28:40.11ID:awT4MGi50
テトリスなんて作ってどーするんだよ。
2017/07/11(火) 14:34:06.59ID:yF5c0Q2u0
次は倉庫番だ
2017/07/11(火) 19:40:01.52ID:4tLCxKGnM
>>853
お前うぜぇよ、どっか行け。
2017/07/11(火) 19:46:36.47ID:yF5c0Q2u0
>>856
(*゚∀゚)はぁ?
2017/07/11(火) 19:59:58.44ID:w51PVrvpM
>>856
こんな匿名掲示板で指摘されたくらいでカッカすんなって
ここしか居場所がないのだったら仕方ないけどさ
2017/07/11(火) 21:35:17.36ID:av7+DLXh0
インベーダーでもパックマンでもブロック崩しでも
なんでも好きなの作ればいい
2017/07/11(火) 22:24:42.60ID:awT4MGi50
vpn gateを使っていると2chに書込みが出来ません。

その場合、なんで2chはvpn gate 使ってるのがわかるのでしょうか?
2017/07/11(火) 22:35:07.26ID:yF5c0Q2u0
vpn gateのグローバルipアドレスが固定なんだろ?
っていうかBot荒らしが多いから全部アク禁になってんじゃねーの?
2017/07/11(火) 23:24:35.69ID:awT4MGi50
>>861
いや、IPは全部バラバラ


なのでどうやってはじいているのかわからない。
2017/07/11(火) 23:37:08.42ID:yF5c0Q2u0
>>862
バラバラじゃないだろ
VPNサーバーのに変わるって書いてあるじゃん
2017/07/12(水) 00:47:55.19ID:FFWGyTUP0
ワシの股間の拡張メソッドを
喪前らのライブラリに公開してやろうか!?!!



(´・ω・`)b
2017/07/12(水) 07:02:36.50ID:lpNw3V5Vd
>>864
インポートエラーでるぞおい
2017/07/12(水) 11:11:16.31ID:gJCzfoEB0
>>864
使えない…

いや、一生使うことがないライブラリだな
2017/07/12(水) 11:27:05.53ID:SKU2xR2g0
なんかリークしてるぽいし
2017/07/12(水) 11:33:18.78ID:uz/DDJspM
>>864
くわえても何もできないからしまってて下さい
2017/07/12(水) 11:53:08.34ID:YWvoGq9a0
>>759
返事遅くなりましたが、やってみたらあっさりできました。
ありがとうございました。
2017/07/12(水) 15:53:27.29ID:gcxNWTIE0
>>863
2chはvpnのサーバのIPアドレスを逐一クロールして補足してるのかな?
2017/07/12(水) 19:46:28.80ID:mMMvRD100
C#の話じゃねえ
質問者と相手してる奴は死ね
2017/07/14(金) 02:55:50.32ID:i27thCjZd
Javaを勉強していてC♯にも興味を持っています
C♯とJavaの似ている点、異なる点を教えていただけないでしょうか?
2017/07/14(金) 04:59:45.06ID:+GVaW66DM
C#はだいたいJavaの上位互換
Javaにある機能はだいたいC#にもあり、C#の方がずっと機能が多く複雑な言語
周辺技術は圧倒的にJavaの方が充実してる
C#はその点MS技術の枠内でわりとコンパクトに完結するので比較的わかりやすい
2017/07/14(金) 06:41:36.15ID:FOyXX5hRM
Javaのinterfaceデフォルト実装はC#に存在しない
2017/07/14(金) 07:05:21.07ID:nFfk1BV8M
>>872
Visual Studioが使える
2017/07/14(金) 07:20:35.60ID:PnYwerQL0
僕はC#もといプログラミング初心者でふ(^^
まだ関数の有用性がわからないのでふ(^^
優しく関数の使い道や例を紹介してるサイトはありまふか?(^^
2017/07/14(金) 07:22:13.60ID:FOyXX5hRM
>>876
日本語でおk
2017/07/14(金) 07:28:46.03ID:PnYwerQL0
僕はまだなぜ関数が便利なのかよく分かってまふぇん(^^
なので関数をコピペ以外で使ったことがないのでふよ(^^
関数を使うとなぜ便利なのかを解説してるサイトを教えてくらふぁい(^^
ボッキング!(^^
2017/07/14(金) 08:59:32.10ID:NzZdCYLZ0
fuck
2017/07/14(金) 10:02:07.24ID:ak+4FQ9QH
大規模のプログラムで
アチコチに同じような処理が実装されてると憂鬱になるだろ
つまりそういうことだ
2017/07/14(金) 10:03:41.84ID:poHR6O80M
>>880
つまり、どう言うことだってばよ?
2017/07/14(金) 10:13:35.24ID:Lg3YjH2aM
>>878
テトリスでも作ってみろ
2017/07/14(金) 10:23:02.18ID:D7n96xFVa
関数には大事な機能がいくつもある
処理の一般化
処理の抽象化
コールバック関数
再帰を利用できるようになる
スコープの局所化
他にもいろいろある


でも最初は同じ処理をなんども書かなくていいぐらいでいいんだな
2017/07/14(金) 13:01:26.15ID:Kku2Hunh0
保守
2017/07/14(金) 14:34:00.53ID:Ryu4JgnUM
>>881
1000行のコードが100行で済む
2017/07/14(金) 14:41:07.20ID:LqMz4TjHM
>>885
主語を明記して欲しい
2017/07/14(金) 16:17:33.09ID:PnYwerQL0
遅くなりまひたがありがとうございまふ(^^
ボッキング!(^^
2017/07/14(金) 21:11:39.26ID:TBQIVSbVM
>>878
「関数って何ですか?」って質問を関数って単語を使わずに書き直してみてみな
関数のありがたさがわかる
2017/07/14(金) 23:16:31.20ID:IdRI9jY90
しかし、C#には関数なるものは存在しない・・・
2017/07/15(土) 06:38:14.05ID:TwERH/ly0
メソッドっていうんだぜ
2017/07/15(土) 07:49:42.88ID:tXCHrVaZ0
どうもinterfaceがよくわかりません。
調べていくうち↓のサイトがありました。
http://garicchi.hatenablog.jp/entry/2014/09/11/181456

クラス設計する際、hasかasかの考え方があります。
メンバとして別なクラスを持たせるのか、継承するかですが。
ここに出てくるTVクラスとISwitchインターフェースは、

public class TV:ISwitch

となってて、TVクラスがISWitchから派生した子供のクラスのように見えてすごく違和感があります。
TVはISWitchを継承するんじゃなくISWitchをhasしてる方がはるかに考えやすいんですが。
そもそも、インターフェースってのは継承するものじゃなく、具備してるものでやっぱhasだと思うんですが、
どう考えたらいいんですかね?
2017/07/15(土) 08:06:44.71ID:tXCHrVaZ0
あと上のサイトでTVのメンバ変数channelがprivateなので、触れないとか書かれてますが、
class TVそのものにChangeChannelメンバ関数を追加改変するならISwitchがあろうが無かろうが関係なく
channelを自由にいじくれるんですけど。
2017/07/15(土) 08:54:29.21ID:0zGsqKYGM
テレビそのものに書くって事は人はチャンネルを変えらんない
もしくは変えるために直接テレビを触らねばならない
そうしたときにラジオが出てきたらめんどくさいことになる

interfaceは受付窓口と同じ
駅、遊園地、ライブは内部でどんな処理をしてるかそれぞれ異なったとしても利用側はどこでも受付ってinterfaceに切符を渡せば望む結果を得られる

c#は実装側の書き方がabstractとinterfaceでほぼ同じなので慣れるしかないよ
それかここだけjavaで勉強するってのもあり
■ このスレッドは過去ログ倉庫に格納されています