ふらっと 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/04(火) 19:42:09.30ID:lzeKWGAxM
>>703
昔はゲーム作ってました
今はunityでゲーム作ろうと思ってるんですけど、他のこともやってみようかな?って感じです
>>705
C#で書いてた人がかっこいいと思ったので…
2017/07/04(火) 19:47:44.39ID:lzeKWGAxM
>>706
自分でもわからないです
まだ触り始めたばっかだから色々作ることにします…
2017/07/04(火) 21:21:54.56ID:C0QCHaIba
難しいと感じるところもあるかもしれないけど
いいところもいっぱいあるでしょ?

もうプロパティがない言語触りたくない
2017/07/04(火) 22:05:02.40ID:sHaUSfW10
>>709
良いところもあるけど、色々作って試行錯誤します
2017/07/04(火) 22:05:31.08ID:sHaUSfW10
>>709
プロパティは確かに便利ですね
2017/07/04(火) 22:09:38.11ID:IVSy+wIs0
慣れてくるとあんまりプロパティ作らなくなるけどね
C#初心者はWinFormsとかの「お客さん向け」設計を真似してプロパティを大量に作りがち
次第に整合性を重視するようになると自然にプロパティは減っていく
2017/07/04(火) 22:20:04.96ID:2R49bdwT0
自然にプロパティが減ってく人でも皆無にはならない程度には便利だということ
2017/07/04(火) 22:22:09.64ID:g265ht6F0
>>712
良く分からん。
整合性を重視するってどういうこと。
2017/07/04(火) 22:27:37.54ID:AKPIjSm80
お客さん向け設計ってのもわかるようなわからんような。
2017/07/04(火) 22:37:51.95ID:vts0HE+ua
自分だけが気づいた何かがあると思いたいお年頃なんでしょう
ネットde真実の一種だねw
2017/07/04(火) 23:06:36.69ID:i4/Vnl6JM
>>707
たまに競技プログラミングやるけど、スラスラC++書ける人格好良いと思うなぁ。

格好良さはさておき、C#で難しいとこってなんだろ? デリゲート型とか?
2017/07/04(火) 23:22:54.20ID:IVSy+wIs0
>>714-715
プロパティを正しく公開するのって結構大変なんだよ
内部で生じた一時的な変な状態を外に見せないようにしたり、
常にプロパティの値が外から書き換えられることを考慮する必要があったり
不特定多数の人に便利に使ってもらうためのクラスならそこに手間をかける価値はあるけど、我々が作るクラスのほとんどはそうではない
2017/07/04(火) 23:28:02.70ID:vts0HE+ua
プロパティを使わない(フィールド直公開?メソッド?)ことで問題が回避されるんじゃなければ
何言ってるのか意味不明だね
2017/07/04(火) 23:28:07.57ID:WRdzRcYr0
公開されてるからいつでも触っていいのかと思ったら
initの前だけかよって?
2017/07/04(火) 23:29:50.21ID:WRdzRcYr0
なんの注意書きもないから1ミリ秒単位で更新してたら死にやがったよコイツ的な?
2017/07/04(火) 23:32:37.20ID:WRdzRcYr0
update()するたびに使用メモリが増えて行くのは仕様ですか?
2017/07/04(火) 23:32:49.21ID:IVSy+wIs0
>>719
プロパティに限らず、余計なメンバを公開しないほうが楽だと言ってるだけだよ
2017/07/04(火) 23:34:22.56ID:AKPIjSm80
アンカ付けたんなら「お客さん向け設計」の説明もしてくれよ。
2017/07/04(火) 23:36:17.05ID:vts0HE+ua
>>723
語るに落ちてるじゃんw

要するに、それは上手にカプセル化して安全で使いやすいブラックボックスを作りましょうってことであって、
プロパティに限った話じゃない
2017/07/04(火) 23:37:40.88ID:WRdzRcYr0
お客さんは開発者だろ?
マイクロソフトが開発者向けに用意したコントロールと
うちらが仕事で仕様を満たすために作るものとは手間やクオリティが全然違うってことだろ
2017/07/04(火) 23:39:13.52ID:IVSy+wIs0
>>725
その通り。
特にプロパティは初心者が不必要に公開してしまう傾向がある、ということね
2017/07/04(火) 23:40:18.13ID:WRdzRcYr0
じゃあ誰かに公開して誰かに使わせる予定あるのかよ?
って言ったらほとんどないんじゃん?的な?
感じで代弁してみた
2017/07/04(火) 23:54:47.56ID:U+lkwqtt0
>>725
そんな傾向あるかね?
自動プロパティ限定の話ならわかる気もするけど
2017/07/04(火) 23:55:16.97ID:vts0HE+ua
そういう話なら、初心者は何でもpublicにしがちだけど慣れてくると
適切なアクセス修飾子を使うようになる、とか言わなきゃ。

でもこれってそんな気張って言うような話じゃなくて、初歩の初歩の話だよねw
2017/07/04(火) 23:56:43.86ID:U+lkwqtt0
安価みすってた>>727
2017/07/05(水) 00:01:10.61ID:xlOAkI1j0
整合性を重視って妙な言い回しするから何かと思ったら…
2017/07/05(水) 00:40:08.75ID:AQhGA2i/M
初心者スレだよ
2017/07/05(水) 12:46:25.76ID:eFHntyyqM
初心者が質問するスレな
初心者がプロパティガーって知ったかするスレじゃない
2017/07/05(水) 17:00:46.07ID:IuExXpbW0
https://youtu.be/3MBQtuK2nZ8
これやってるんですけど乱数入れると2行目のレベルの数字がバグってしまいます
原因が全くわかりません
助けてください
2017/07/05(水) 17:25:23.39ID:JPPyl3nWa
そういう丸投げの質問にわざわざ回答してくれるお人よしがいるかもしれないと
思えるところが凄い
2017/07/05(水) 17:32:08.14ID:Y/w4lOMB0
>>735
動画主がソース公開してるみたいだから自分のと比較してみたら?
2017/07/05(水) 18:14:22.85ID:IuExXpbW0
お騒がせしました
公開されてるソースと比べたところ、違いは勇者の名前と勝手に追加したゴールドの乱数だけでした
結局String name ="";の行を弄ったらバグらず表示することができました
名前の文字数が5文字以下だと文字がバグりました
2017/07/05(水) 18:20:17.61ID:IuExXpbW0
5文字ではなく4文字以下で数字がバグるでした
740デフォルトの名無しさん (アウアウウー Sa25-kiAr)
垢版 |
2017/07/05(水) 21:34:50.46ID:z3CI8qH6a
それ動画主もクソやんか。
どこがどうクソなのか自分で理解出来るようにしなよ。
2017/07/05(水) 22:04:55.79ID:RvrPy5l3p
役立たずの口だけ番長は黙って死んでろゴミカス
てめえみたいな奴が初心者スレを腐らせんだよ
2017/07/05(水) 22:36:26.64ID:I3hQhyW7a
ササクッテロリって初めて見たww
どうでもいいけど
2017/07/05(水) 22:37:44.89ID:uTn2RlgN0
某所のクソコテがササクッテロルだからいつも見てるな
2017/07/06(木) 09:16:24.92ID:Wdgs4/ag0
>>738
いきなり中ボスに挑んだなw
2017/07/06(木) 09:19:32.16ID:9B2MU8kU0
webbrowserでダイアログボックスを開いて操作することってできるんでしょうか?
たとえば画像アップロードサイトでファイルをアップロードするために「ファイルを選択」ボタンを押すと
ファイル選択画面になりますが、ここにファイル名を自動で入力して自動で「開く」ボタンを押したいと。

外部のブラウザならウィンドウハンドルを取得してそこに投げてやればいいのはわかるのですが、
webbrowserでやろうとして失敗しました。
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に決まるからだろうけど、
実体は推論っていうより重複する型指定が省略できるってだけの話
■ このスレッドは過去ログ倉庫に格納されています