ふらっと C#,C♯,C#(初心者用) Part120 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2016/04/07(木) 23:50:53.69ID:qhI2bqCd他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part119 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1454169140/
■関連スレ
C#, C♯, C#相談室 Part90 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1455160063/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
0232デフォルトの名無しさん
2016/04/26(火) 09:19:51.43ID:2zUAWFoa他の教本のサンプル読んで自己解決しました
クラシックディスクトップの中にありました
0233デフォルトの名無しさん
2016/04/26(火) 12:12:53.06ID:lzhld+yA0234デフォルトの名無しさん
2016/04/26(火) 17:06:04.60ID:SU38uK/80235デフォルトの名無しさん
2016/04/26(火) 19:41:00.70ID:x4xkNVQ3async awaitで書けないんですか?
1000個ファイル作ってく進捗をn件みたいな感じで出すなんてよくあるパターンだとおまうんですが
0236デフォルトの名無しさん
2016/04/26(火) 19:46:37.65ID:6sXX5nQBあなたの能力が足りないなら無理でしょうけど?
0237デフォルトの名無しさん
2016/04/26(火) 20:35:36.27ID:0j8xrCyf0238デフォルトの名無しさん
2016/04/26(火) 21:33:06.44ID:vOcY6jqZ0239デフォルトの名無しさん
2016/04/27(水) 00:37:00.23ID:Zxi3ItRPobject[]に変換して取得する便利なメソッドなどは.NETで定義されているでしょうか
System.Reflection.MethodBase.CurrentMethod()はTypeの類としてのMethod情報は取得できるのですが
Runtimeな情報を持っていないようです。。。
0240デフォルトの名無しさん
2016/04/27(水) 00:40:15.83ID:Pvz0UkFG0241デフォルトの名無しさん
2016/04/27(水) 03:10:47.69ID:zeKGUe5Fそれ、paramsと何も変わらんでしょ
0242デフォルトの名無しさん
2016/04/27(水) 07:54:52.10ID:ZeWhf8Z3インライン展開もあるし
0243デフォルトの名無しさん
2016/04/27(水) 09:38:00.13ID:n1S/lS7j0244デフォルトの名無しさん
2016/04/27(水) 09:40:19.30ID:Q4nmbzLI0245デフォルトの名無しさん
2016/04/27(水) 11:07:02.81ID:j2/jLmeH言いたいことは分かるが逆の意味にしか見えない
0246デフォルトの名無しさん
2016/04/27(水) 11:29:24.29ID:Q4nmbzLI入れちゃいかん→入れにゃいかん
だった
0247デフォルトの名無しさん
2016/04/27(水) 18:28:00.81ID:Qfg6RrFcみんなが気持ちよく使えるように柔軟なobjectを使うべき
これが社会人の気配りだよ
0248デフォルトの名無しさん
2016/04/27(水) 18:40:52.55ID:H7sHgUMeどうせ型をobjectにしてるだけでそこに意図しないもんぶち込んだら動かない物になるだろうから迷惑だ
0249239
2016/04/28(木) 00:45:39.20ID:Wd++AcfF0250デフォルトの名無しさん
2016/04/28(木) 00:56:39.37ID:1iNMguiohttp://www.ne.jp/asahi/nami/mei/cstips/methodlog.html
こういうのやりたいの?
0251デフォルトの名無しさん
2016/04/28(木) 01:11:13.46ID:5qqXmSTaうちの会社じゃ現役レベルだけど・・・
0252デフォルトの名無しさん
2016/04/28(木) 04:45:15.76ID:gCHyBdgz0253デフォルトの名無しさん
2016/04/28(木) 07:16:30.07ID:8v/mHBGd便利も何もこれだけじゃん。
可変長で引数受け取って、そのまま返すとかあるじゃん。
脳みそ死んでんのか?
0254デフォルトの名無しさん
2016/04/28(木) 15:21:22.85ID:+8Cbdz2TArrayListも使ってる?
0255デフォルトの名無しさん
2016/04/28(木) 15:37:42.93ID:mT51gl12Parallel.Forで並列をしてるんですが大量に出力を追加してると
固まってしまいましてこれってどうすれば固まらなくなるのでしょうか?
開始してすぐにアプリが動かなくなるようです。。
再現できるソースを添付しますのでよろしくお願いします。。
int 開始 1000000000;
int n=0;
var task = Task.Factory.StartNew(() =>
{
Parallel.For(開始,終了 , o, (L) =>
{
n++;
this.Invoke(new Action(() =>
{
追加.Text = n.ToString(
0256デフォルトの名無しさん
2016/04/28(木) 15:40:35.01ID:mT51gl12すいません・・間違えました。
int 終了 1000000000;
int 開始 0;
int n=0;
var task = Task.Factory.StartNew(() =>
{
Parallel.For(開始,終了 , o, (L) =>
{
n++;
this.Invoke(new Action(() =>
{
追加.Text = n.ToString("");
}));
}));
}));
0257デフォルトの名無しさん
2016/04/28(木) 16:44:42.26ID:xvzDSrFYTaskで別スレッドにしようとも逐一UIスレッドInvokeしてたらビジー状態になります
各処理がそれなりに時間の掛かる処理ならまだしも、インクリメントだけでは。
一定の時間や処理数、あるいは最後に纏めるとか…でもまず手段より目的を書きましょう
ちなみにParallel処理をCPUでパフォーマンスを出すには工夫が要ります、大抵はGPU向き
0258デフォルトの名無しさん
2016/04/28(木) 17:01:21.21ID:k1aARqjb0259デフォルトの名無しさん
2016/04/28(木) 17:54:42.68ID:mT51gl12レスありがとうございます。
最後にまとめると確かに問題ないのですが状況を知りたいということもあって
できればループ中にヒット数を知りたいということがあります;;
それ以外にもThread.Sleepを追加してやるとスレッドがUI側に渡るのか動くようになる
みたいなんですが速度が変わってしまいました;;
目的なんですが配列に固めた数値をParallelで回して
別のメソッドにその配列を渡してforループし条件に
ヒットしたらその配列の数値を出力
してヒット数追加ということをやってます。
候補数が少なければいいのですが多い場合に仰るとおり
ビジー状態になってしまうようで困り果ててました;;
0260デフォルトの名無しさん
2016/04/28(木) 18:08:26.61ID:QO5R0H3G表示更新は別にやっとく
0261デフォルトの名無しさん
2016/04/28(木) 18:13:46.51ID:k1aARqjb* 並列度をコア数よりやや少ない程度にする
* RxのSampleを使って1秒に1回しかInvokeしないようにする
0262デフォルトの名無しさん
2016/04/28(木) 18:17:16.27ID:k1aARqjb○Invoke内の処理をしないようにする
Sample後のスレッドをUIスレッドに設定しておけばInvokeは要らんね
0263デフォルトの名無しさん
2016/04/28(木) 18:45:24.52ID:mT51gl12レスありがとうございます。
表示更新は別というはどういうことでしょうか?
スレッドを立ててそこに表示処理を任せるとかかな・・・
それとも最後にまとめた変数を一気に表示ということでしょうか?
>>261-262
レスありがとうございます。
RxのSampleは初めて聞きました!!
これって別に秒数を取得できるんですね。
少し勉強してみます。
0264デフォルトの名無しさん
2016/04/28(木) 20:22:10.53ID:mT51gl12試してみました。固まらず圧倒的なパーフォマンスが出せるようになりまして
すごく満足しました。 ありがとうございました。
0265デフォルトの名無しさん
2016/04/29(金) 02:31:10.78ID:4zpSkGz3Parallel.Forで回す処理ってスレッドセーフじゃなくても良いのか?
0266デフォルトの名無しさん
2016/04/29(金) 02:39:36.31ID:KTo4+e4h0267デフォルトの名無しさん
2016/04/29(金) 19:16:56.91ID:291NvS8MPCにもwifiがついていますが同じようにできるんでしょうか?
windowsのパソコンに付属の何かをつけないと無理かな。
チャットを作ってみたい
言語はC#でつくるのかjavaかも気になります
0268デフォルトの名無しさん
2016/04/29(金) 19:39:52.63ID:oh8iFBx2チャットなんかクラウド経由でいいじゃん
WifiDirectなんかメリットないよ
0269デフォルトの名無しさん
2016/04/29(金) 19:49:19.51ID:291NvS8Mネットを介さないで直接チャットとかしたい。LAN繋いでできるってのでもいいです。
IPメッセンジャーとかそれかな
0270デフォルトの名無しさん
2016/04/29(金) 20:10:19.43ID:x1MzXwKq同じAPに繋がってるなら普通にTCPのクラサバ型でいけるよ
0271270
2016/04/29(金) 20:17:49.07ID:x1MzXwKqTCPでやるならASP.NET MVCでチャットアプリ(というかWebサイト)作ってどれか一台で動かし、
他はそれにWebブラウザでアクセスするのがいいんじゃないかな
今更クラサバの作り方なんか勉強するよりよっぽど役に立つし
0272デフォルトの名無しさん
2016/04/30(土) 07:46:23.25ID:F0T7cXa9{
public int sum(int x, int y)
{
return x + y;
}
}
class ClassB
{
public double sum(double x, double y)
{
return x + y;
}
}
こういうふうに、二つのクラスに同じような関数が有る場合、
C++だと例えばテンプレートを使ったクラスを一つ作っておいて、
型を指定してインスタンスを作成すれば、intやdoubleの引数に対してそれぞれ計算ができますよね。
C#ではこういうよく似たクラスを1つにまとめるにはどうすれば良いですか?
0273デフォルトの名無しさん
2016/04/30(土) 07:49:26.05ID:WMIrR8lOttps://msdn.microsoft.com/ja-jp/library/twcad0zb.aspx
0274デフォルトの名無しさん
2016/04/30(土) 08:16:37.21ID:F0T7cXa9さっそく試してみたのですがジェネリックというやつだと、
public T sum(T x, T y)
{
return x + y;
}
のようにすると足し算の所でエラーが出ました。
解決方法ありますか?
0275デフォルトの名無しさん
2016/04/30(土) 08:34:31.00ID:WMIrR8lOttps://social.msdn.microsoft.com/Forums/vstudio/ja-JP/35465afc-e85d-4b18-8473-6f9d2a1f76be/generics-?forum=csharpgeneralja
0276デフォルトの名無しさん
2016/04/30(土) 09:02:58.06ID:F0T7cXa9情報ありがとうございました。
でも私には難しくて良く理解できません。
困りました。
0277デフォルトの名無しさん
2016/04/30(土) 09:24:32.26ID:9crtSSeOフォーム右上付近に、親フォームに戻るための「戻る」ボタンを配置してるのですが、
子フォームを最大化で呼び出して開いたときにそのボタンが消えてしまいます
ボタンが見えずに戻れなくなるのですが、一度最大化を解除してあげれば
設計時に配置した位置に表示され、それ以降最大化してもちゃんと表示されます
ちなみにボタンのAnchorはTopとRightに設定しています
どうも初回のフォーム表示時(WindowState=Maximied)にだけ見えなくなるようなのですが、
なにか考えられる原因はありますでしょうか
0278デフォルトの名無しさん
2016/04/30(土) 09:33:27.53ID:UynIvCxeありがとうございます難しい
0279デフォルトの名無しさん
2016/04/30(土) 10:32:12.27ID:JvmktRtU遅くなるから乱用は禁物だぞ
static void Main(string[] args)
{
Console.WriteLine("int = " + func(1, 2));
Console.WriteLine("double = " + func(1.0, 2.0));
}
static T func<T>(T a, T b)
{
return (T)((dynamic)a + (dynamic)b);
}
0280デフォルトの名無しさん
2016/04/30(土) 10:57:52.86ID:cHcfbDPSジェネリックの制約に静的要素も追加されればいいのにね
0281デフォルトの名無しさん
2016/04/30(土) 11:09:27.32ID:TLHkn7smpublic static readonly NumericOperations<T> Default = Tに応じて派生クラスのインスタンスを作成();
public abstract T Add(T x, T y);
public abstract T Subtract(T x, T y);
以下略
}
みたいなヘルパーを用意すればいいよ
実装はExpressionで自動生成もできるけど、どうせintとdoubleくらいなんだから手書きでいい
っていうかそもそもdoubleだけでいいと思うけどね俺は
0282デフォルトの名無しさん
2016/04/30(土) 12:49:56.62ID:n7hI6rwd特殊化の実装はよ
0283デフォルトの名無しさん
2016/04/30(土) 12:50:04.21ID:F0T7cXa9>>279
うまくいきました。
>>281
>どうせintとdoubleくらいなんだから手書きでいい
本当は、int, doubleではなくて、
別に二つのクラスがあり、それらを与えたいのです。
少し試してみましたが、こういうジェネリックの手法ではコンストラクタに引数を与えることが出来ないようですね。
C++のようには行かないのですね。
0284デフォルトの名無しさん
2016/04/30(土) 12:54:02.50ID:wAp13XKy0285デフォルトの名無しさん
2016/04/30(土) 13:53:12.40ID:uVz81x78みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
1
0286デフォルトの名無しさん
2016/04/30(土) 14:07:23.28ID:rWvqva/J独自のクラスで演算子オーバーロードしてんの?
数学チックなことやってたりしないなら普通にメソッドで書いたほうがいい
メソッドで書いたらdynamic使うとかアホみたいなことしなくて済むし
0287デフォルトの名無しさん
2016/04/30(土) 14:19:54.60ID:F0T7cXa9演算子はあまり関係有りません。
272の例では演算子が出て来ましたが。
本当の状況はClassAやClassB中に似たようなメソッドがたくさんあります。
それらは
ClassAはClassAAを使って書かれていて、ClassBはClassBBを使って書かれていて、文字AAをBBに入れ替えれば全く同じメソッドになります。
そう言うのをスッキリ書きたいんですが。
0288デフォルトの名無しさん
2016/04/30(土) 15:13:16.39ID:ayXNqxnF馬鹿は死ね
0289デフォルトの名無しさん
2016/04/30(土) 20:58:53.70ID:WhJaImcQこれって読み込み先では使えないですよね?
イマイチ意味を理解できていません
0290デフォルトの名無しさん
2016/04/30(土) 21:00:41.32ID:nHwI9s9gこの板の行数はそれを書くには狭すぎるって風でもないし?
コード書く手間の方が多かったように思う
0291デフォルトの名無しさん
2016/04/30(土) 21:02:23.93ID:53v3uYu30292デフォルトの名無しさん
2016/04/30(土) 21:03:08.54ID:nHwI9s9g使えるよ
Stringもpublic sealedクラスだ
詳しくはここ
https://msdn.microsoft.com/en-us/library/6tcf2h8w.aspx
0293デフォルトの名無しさん
2016/04/30(土) 21:04:28.47ID:53v3uYu3コードが似てるからまとめたソースを書く奴は雑魚
一生かけても俺に追いつけない(確定)
0294デフォルトの名無しさん
2016/04/30(土) 21:12:23.98ID:n7hI6rwdsealedは自動でメモリバリアを張ってくれるようになるキーワードの事だよ
よく使うから覚えておいて
0295デフォルトの名無しさん
2016/04/30(土) 21:24:08.80ID:53v3uYu3他人に質問しなきゃわからんようなコードで「すっきり」書くのは構わんけどさ
他の人間に対する思いやりとか優しさとか全部ゴミ箱にぶち込むようなことしてっと
いつか痛い目見るぜ
掲示版での質問の仕方もそういうとこ出てる
0296デフォルトの名無しさん
2016/04/30(土) 21:40:22.88ID:cmpbEuEGさすがにそれは共通部分を括り出したりインターフェースを使ったりして抜本的に設計し直せとしか答えようがない
通常の方法でうまくやれないならそもそもやろうとしていることが間違っているのではないかと疑う癖を付けたほうがいい
0297デフォルトの名無しさん
2016/04/30(土) 22:27:42.03ID:cHcfbDPSC#は文字列の扱い簡単なんだし、さくっとコード生成プログラムを書けばいいじゃん
0298デフォルトの名無しさん
2016/04/30(土) 23:32:53.00ID:AJmJIQ8j>sealedは自動でメモリバリア
参考になるURL教えれ
0299デフォルトの名無しさん
2016/04/30(土) 23:39:30.68ID:D8eH/sC30300デフォルトの名無しさん
2016/04/30(土) 23:58:51.35ID:rWvqva/J0301デフォルトの名無しさん
2016/05/02(月) 10:53:44.18ID:FDPPvimu/**/
形式のコメントを書くと勝手に
/*
*
*
*/
のように自動的にアストリスクが入るのを禁止出来ますか?
0302デフォルトの名無しさん
2016/05/02(月) 11:44:36.87ID:nFOHZVjF0303デフォルトの名無しさん
2016/05/02(月) 11:47:37.27ID:FDPPvimuそれで良いのでやり方教えて
0304デフォルトの名無しさん
2016/05/02(月) 11:51:13.04ID:nFOHZVjF0305デフォルトの名無しさん
2016/05/02(月) 11:52:21.62ID:FDPPvimuさっそく試してみます。ありがとうございました。
0306デフォルトの名無しさん
2016/05/03(火) 19:32:06.86ID:G9XEXQGeBitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中)
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)>
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
4
0307デフォルトの名無しさん
2016/05/03(火) 19:35:17.17ID:PQ3d4MP7死ね
0308デフォルトの名無しさん
2016/05/03(火) 20:04:59.57ID:Ga2JkeKtc++なら簡単だがc#だと難しい。出来なくはないが。
0309デフォルトの名無しさん
2016/05/04(水) 03:28:30.74ID:blim022Lを
var dict = new Dictionary<string, string>()
{
{ "りんご", "100円" },
{ "バナナ", "200円" },
{ "みかん", "300円" }
};
こんなふうにしたいのですがやり方が分かりません。
LINQで出来ると思うのですが、誰か教えて下さい。
0310デフォルトの名無しさん
2016/05/04(水) 03:36:29.74ID:1XkW7VLg正規表現で(.+)\((\d+円)\)でMatchを見るとかじゃない?
0311デフォルトの名無しさん
2016/05/04(水) 07:28:46.87ID:0yOS8YjHvar list = new List<string>() {
0312デフォルトの名無しさん
2016/05/04(水) 07:41:12.50ID:blim022L勘です
0313デフォルトの名無しさん
2016/05/04(水) 07:49:31.55ID:IRRLVIf20314デフォルトの名無しさん
2016/05/04(水) 07:50:54.49ID:tqRiG+el>>310はstringの値段を数値として切り出すようなこと言ってるし、
>>309はLINQとか言ってるし、
「こんなふうにしたい」って言われても俺アスペだから何したいのか分からね
0315デフォルトの名無しさん
2016/05/04(水) 09:04:18.64ID:c7vIrIvG0316デフォルトの名無しさん
2016/05/04(水) 09:18:02.12ID:Z89K0usy0317デフォルトの名無しさん
2016/05/04(水) 09:32:21.97ID:N/RwPJUBほれ
var dict = new Dictionary<string, string>();
var list = new List<string>() { "りんご(100円)", "バナナ(200円)", "みかん(300円)" }.Select( x => new { row = x.Split( new char[] { '(', ')' } ) } );
foreach( var item in list )
{
if( item.row.Length > 1 )
dict.Add( item.row[0], item.row[1] );
}
foreach( var kv in dict )
Console.WriteLine( kv );
0318デフォルトの名無しさん
2016/05/04(水) 09:53:31.88ID:blim022Lありがとうございました。
.Select( x => new { row = x.Split
こういうテクニックがなかなか思いつきません。勉強になりました。
0319デフォルトの名無しさん
2016/05/04(水) 09:57:53.20ID:/hVZH15i0320デフォルトの名無しさん
2016/05/04(水) 10:11:49.11ID:Mk4V6hyN0321デフォルトの名無しさん
2016/05/04(水) 10:23:24.55ID:foGbZYeo0322デフォルトの名無しさん
2016/05/04(水) 10:43:51.05ID:Mk4V6hyN「それでもLINQなら…LINQならきっと何とかしてくれる…」
みたいな間違った期待は禁止したくはなるな
LINQ使えばかっこいい、と思っているのならそれも勘違いで
回答者が納得した >>317 も、(書いた人はわざとかもしれないが)
ToDictionary 使えばLINQ一発ですむところを foreach 入れたりして
かえってダサくなってる
結局 foreach 使うなら Split も foreach 内でいいだろ、という
0323デフォルトの名無しさん
2016/05/04(水) 10:46:52.46ID:c7vIrIvG0324デフォルトの名無しさん
2016/05/04(水) 10:51:15.29ID:Mk4V6hyN×回答者 →○質問者
だった… 俺も十分ダサいなw
0325デフォルトの名無しさん
2016/05/04(水) 11:23:51.23ID:N/RwPJUBlistの中に何が入ってくるか分からないなら
var list = new List<string>() { "りんご(100円)", "バナナ(200円)", null, "みかん(300円)", "" };
var dict = list.Where( x => x != null ).Select( x => new { row = x.Split( new char[] { '(', ')' } ) } )
.Where( x => x.row.Length > 1 ).ToDictionary( key => key.row[0].Trim(), value => value.row[1].Trim() );
foreach( var kv in dict )
Console.WriteLine( kv );
だな
0326デフォルトの名無しさん
2016/05/04(水) 12:15:55.65ID:IHDYpsAXlist.ToDictionary($0.foo , $0.bar)
みたいな構文導入されねえかな
あと識別子の前方一致ルックアップ
li.ToDict($0.f , $0.b)
この辺c#は頭固い
0327デフォルトの名無しさん
2016/05/04(水) 12:23:13.86ID:c7vIrIvG0328デフォルトの名無しさん
2016/05/04(水) 12:33:04.49ID:IHDYpsAX0329デフォルトの名無しさん
2016/05/04(水) 13:22:02.38ID:Z+vBdcSH0330デフォルトの名無しさん
2016/05/04(水) 14:37:09.05ID:Z89K0usy0331デフォルトの名無しさん
2016/05/04(水) 20:41:04.06ID:1Z9f5mj5実現方法思いつかんけど
■ このスレッドは過去ログ倉庫に格納されています