トップページ⇒tech
1002コメント324KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2016/04/07(木) 23:50:53.69ID:qhI2bqCd
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

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

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

なお、テンプレが読めない回答者は邪魔なので後述の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
>>231
他の教本のサンプル読んで自己解決しました
クラシックディスクトップの中にありました
0233デフォルトの名無しさん2016/04/26(火) 12:12:53.06ID:lzhld+yA
ディスクトップ
0234デフォルトの名無しさん2016/04/26(火) 17:06:04.60ID:SU38uK/8
むしろ解決方法が謎だw
0235デフォルトの名無しさん2016/04/26(火) 19:41:00.70ID:x4xkNVQ3
winformで非同期処理の進捗を都度ラベルに表示するようなのを
async awaitで書けないんですか?

1000個ファイル作ってく進捗をn件みたいな感じで出すなんてよくあるパターンだとおまうんですが
0236デフォルトの名無しさん2016/04/26(火) 19:46:37.65ID:6sXX5nQB
書けますよ
あなたの能力が足りないなら無理でしょうけど?
0237デフォルトの名無しさん2016/04/26(火) 20:35:36.27ID:0j8xrCyf
大人しくBackgroundWorker使ってなよ
0238デフォルトの名無しさん2016/04/26(火) 21:33:06.44ID:vOcY6jqZ
awaitを1000回ループ
0239デフォルトの名無しさん2016/04/27(水) 00:37:00.23ID:Zxi3ItRP
メソッドの引数(string a, string b) を自動的に
object[]に変換して取得する便利なメソッドなどは.NETで定義されているでしょうか
System.Reflection.MethodBase.CurrentMethod()はTypeの類としてのMethod情報は取得できるのですが
Runtimeな情報を持っていないようです。。。
0240デフォルトの名無しさん2016/04/27(水) 00:40:15.83ID:Pvz0UkFG
隠しキーワードの __arglist を使うとか
0241デフォルトの名無しさん2016/04/27(水) 03:10:47.69ID:zeKGUe5F
>>240
それ、paramsと何も変わらんでしょ
0242デフォルトの名無しさん2016/04/27(水) 07:54:52.10ID:ZeWhf8Z3
無理
インライン展開もあるし
0243デフォルトの名無しさん2016/04/27(水) 09:38:00.13ID:n1S/lS7j
VBer の次は JSer かよw
0244デフォルトの名無しさん2016/04/27(水) 09:40:19.30ID:Q4nmbzLI
なんでstringってわかっている物をわざわざobjectに入れちゃいかんのだ
0245デフォルトの名無しさん2016/04/27(水) 11:07:02.81ID:j2/jLmeH
>>244
言いたいことは分かるが逆の意味にしか見えない
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にしてるだけでそこに意図しないもんぶち込んだら動かない物になるだろうから迷惑だ
02492392016/04/28(木) 00:45:39.20ID:Wd++AcfF
例として string a, string bと書きましたが、 あるクラスのpublicなメソッド全部で汎用的に利用する為に object[]で取得したいのです。MethodBase.MethodInfo.Prametersのindexとobject[]のindexから型情報をマッピングしてうにゃうにゃってことをやりたいんですよねー
0250デフォルトの名無しさん2016/04/28(木) 00:56:39.37ID:1iNMguio
>>249
http://www.ne.jp/asahi/nami/mei/cstips/methodlog.html
こういうのやりたいの?
0251デフォルトの名無しさん2016/04/28(木) 01:11:13.46ID:5qqXmSTa
さすが10年以上も前だけあって時代を感じるソースだな
うちの会社じゃ現役レベルだけど・・・
0252デフォルトの名無しさん2016/04/28(木) 04:45:15.76ID:gCHyBdgz
今風ならどう書く?
0253デフォルトの名無しさん2016/04/28(木) 07:16:30.07ID:8v/mHBGd
new string[]{ a,b}
便利も何もこれだけじゃん。
可変長で引数受け取って、そのまま返すとかあるじゃん。

脳みそ死んでんのか?
0254デフォルトの名無しさん2016/04/28(木) 15:21:22.85ID:+8Cbdz2T
>>249
ArrayListも使ってる?
0255デフォルトの名無しさん2016/04/28(木) 15:37:42.93ID:mT51gl12
すいません・・
Parallel.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
>>255です。
すいません・・間違えました。
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:xvzDSrFY
>>255-256
Taskで別スレッドにしようとも逐一UIスレッドInvokeしてたらビジー状態になります
各処理がそれなりに時間の掛かる処理ならまだしも、インクリメントだけでは。
一定の時間や処理数、あるいは最後に纏めるとか…でもまず手段より目的を書きましょう
ちなみにParallel処理をCPUでパフォーマンスを出すには工夫が要ります、大抵はGPU向き
0258デフォルトの名無しさん2016/04/28(木) 17:01:21.21ID:k1aARqjb
あと、デフォルトだと並列度が無制限なのはもう少し周知を試みてもいいよね(MSが)
0259デフォルトの名無しさん2016/04/28(木) 17:54:42.68ID:mT51gl12
>>257

レスありがとうございます。
最後にまとめると確かに問題ないのですが状況を知りたいということもあって
できればループ中にヒット数を知りたいということがあります;;
それ以外にもThread.Sleepを追加してやるとスレッドがUI側に渡るのか動くようになる
みたいなんですが速度が変わってしまいました;;

目的なんですが配列に固めた数値をParallelで回して
別のメソッドにその配列を渡してforループし条件に
ヒットしたらその配列の数値を出力
してヒット数追加ということをやってます。

候補数が少なければいいのですが多い場合に仰るとおり
ビジー状態になってしまうようで困り果ててました;;
0260デフォルトの名無しさん2016/04/28(木) 18:08:26.61ID:QO5R0H3G
Parallel.Forの中はinvoke使わずにどっかの変数に値をどんどんぶちこむだけにすればいいだけでしょ
表示更新は別にやっとく
0261デフォルトの名無しさん2016/04/28(木) 18:13:46.51ID:k1aARqjb
俺だったら
* 並列度をコア数よりやや少ない程度にする
* RxのSampleを使って1秒に1回しかInvokeしないようにする
0262デフォルトの名無しさん2016/04/28(木) 18:17:16.27ID:k1aARqjb
×Invokeしないようにする
○Invoke内の処理をしないようにする

Sample後のスレッドをUIスレッドに設定しておけばInvokeは要らんね
0263デフォルトの名無しさん2016/04/28(木) 18:45:24.52ID:mT51gl12
>>260
レスありがとうございます。
表示更新は別というはどういうことでしょうか?
スレッドを立ててそこに表示処理を任せるとかかな・・・
それとも最後にまとめた変数を一気に表示ということでしょうか?



>>261-262


レスありがとうございます。
RxのSampleは初めて聞きました!!
これって別に秒数を取得できるんですね。
少し勉強してみます。
0264デフォルトの名無しさん2016/04/28(木) 20:22:10.53ID:mT51gl12
>>262さん

試してみました。固まらず圧倒的なパーフォマンスが出せるようになりまして
すごく満足しました。 ありがとうございました。
0265デフォルトの名無しさん2016/04/29(金) 02:31:10.78ID:4zpSkGz3
++はスレッドセーフじゃなかったはずだが
Parallel.Forで回す処理ってスレッドセーフじゃなくても良いのか?
0266デフォルトの名無しさん2016/04/29(金) 02:39:36.31ID:KTo4+e4h
ロックフリーのInterlocked.CompareExchangeを使うとかね
0267デフォルトの名無しさん2016/04/29(金) 19:16:56.91ID:291NvS8M
android同士はwifi通信でデータ通信ができます。
PCにもwifiがついていますが同じようにできるんでしょうか?

windowsのパソコンに付属の何かをつけないと無理かな。
チャットを作ってみたい
言語はC#でつくるのかjavaかも気になります
0268デフォルトの名無しさん2016/04/29(金) 19:39:52.63ID:oh8iFBx2
WifiDirectはWin8以降のModern Appでないと使えないよ
チャットなんかクラウド経由でいいじゃん
WifiDirectなんかメリットないよ
0269デフォルトの名無しさん2016/04/29(金) 19:49:19.51ID:291NvS8M
>>268
ネットを介さないで直接チャットとかしたい。LAN繋いでできるってのでもいいです。
IPメッセンジャーとかそれかな
0270デフォルトの名無しさん2016/04/29(金) 20:10:19.43ID:x1MzXwKq
>>269
同じAPに繋がってるなら普通にTCPのクラサバ型でいけるよ
02712702016/04/29(金) 20:17:49.07ID:x1MzXwKq
補足
TCPでやるならASP.NET MVCでチャットアプリ(というかWebサイト)作ってどれか一台で動かし、
他はそれにWebブラウザでアクセスするのがいいんじゃないかな
今更クラサバの作り方なんか勉強するよりよっぽど役に立つし
0272デフォルトの名無しさん2016/04/30(土) 07:46:23.25ID:F0T7cXa9
class ClassA
{
  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:WMIrR8lO
>>272
ttps://msdn.microsoft.com/ja-jp/library/twcad0zb.aspx
0274デフォルトの名無しさん2016/04/30(土) 08:16:37.21ID:F0T7cXa9
>>273
さっそく試してみたのですがジェネリックというやつだと、
public T sum(T x, T y)
{
  return x + y;
}
のようにすると足し算の所でエラーが出ました。
解決方法ありますか?
0275デフォルトの名無しさん2016/04/30(土) 08:34:31.00ID:WMIrR8lO
>>274
ttps://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
>>275
情報ありがとうございました。
でも私には難しくて良く理解できません。
困りました。
0277デフォルトの名無しさん2016/04/30(土) 09:24:32.26ID:9crtSSeO
原因がさっぱりなので、お伺いします
フォーム右上付近に、親フォームに戻るための「戻る」ボタンを配置してるのですが、
子フォームを最大化で呼び出して開いたときにそのボタンが消えてしまいます
ボタンが見えずに戻れなくなるのですが、一度最大化を解除してあげれば
設計時に配置した位置に表示され、それ以降最大化してもちゃんと表示されます
ちなみにボタンのAnchorはTopとRightに設定しています

どうも初回のフォーム表示時(WindowState=Maximied)にだけ見えなくなるようなのですが、
なにか考えられる原因はありますでしょうか
0278デフォルトの名無しさん2016/04/30(土) 09:33:27.53ID:UynIvCxe
>>270
ありがとうございます難しい
0279デフォルトの名無しさん2016/04/30(土) 10:32:12.27ID:JvmktRtU
>>274
遅くなるから乱用は禁物だぞ

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
値型の利点がwwwww
ジェネリックの制約に静的要素も追加されればいいのにね
0281デフォルトの名無しさん2016/04/30(土) 11:09:27.32ID:TLHkn7sm
abstract class NumericOperations<T> {
public 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
こういう時はc++が羨ましくなるな
特殊化の実装はよ
0283デフォルトの名無しさん2016/04/30(土) 12:50:04.21ID:F0T7cXa9
皆さんありがとうございます。
>>279
うまくいきました。
>>281
>どうせintとdoubleくらいなんだから手書きでいい
本当は、int, doubleではなくて、
別に二つのクラスがあり、それらを与えたいのです。
少し試してみましたが、こういうジェネリックの手法ではコンストラクタに引数を与えることが出来ないようですね。
C++のようには行かないのですね。
0284デフォルトの名無しさん2016/04/30(土) 12:54:02.50ID:wAp13XKy
今時は2次元配列とかより、ListListが主流?
0285デフォルトの名無しさん2016/04/30(土) 13:53:12.40ID:uVz81x78
GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
1
0286デフォルトの名無しさん2016/04/30(土) 14:07:23.28ID:rWvqva/J
>>283
独自のクラスで演算子オーバーロードしてんの?
数学チックなことやってたりしないなら普通にメソッドで書いたほうがいい
メソッドで書いたらdynamic使うとかアホみたいなことしなくて済むし
0287デフォルトの名無しさん2016/04/30(土) 14:19:54.60ID:F0T7cXa9
>>286
演算子はあまり関係有りません。
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
読み込むdllの中にpublic sealed classって書いてあるんだけど
これって読み込み先では使えないですよね?
イマイチ意味を理解できていません
0290デフォルトの名無しさん2016/04/30(土) 21:00:41.32ID:nHwI9s9g
なんで最初から本当の状況が書けないんだろ
この板の行数はそれを書くには狭すぎるって風でもないし?
コード書く手間の方が多かったように思う
0291デフォルトの名無しさん2016/04/30(土) 21:02:23.93ID:53v3uYu3
ぶっちゃけそのコード読まされる側にとってなんのメリットもないよね
0292デフォルトの名無しさん2016/04/30(土) 21:03:08.54ID:nHwI9s9g
>>289
使えるよ
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:n7hI6rwd
>>289
sealedは自動でメモリバリアを張ってくれるようになるキーワードの事だよ
よく使うから覚えておいて
0295デフォルトの名無しさん2016/04/30(土) 21:24:08.80ID:53v3uYu3
>>287
他人に質問しなきゃわからんようなコードで「すっきり」書くのは構わんけどさ
他の人間に対する思いやりとか優しさとか全部ゴミ箱にぶち込むようなことしてっと
いつか痛い目見るぜ
掲示版での質問の仕方もそういうとこ出てる
0296デフォルトの名無しさん2016/04/30(土) 21:40:22.88ID:cmpbEuEG
>>287
さすがにそれは共通部分を括り出したりインターフェースを使ったりして抜本的に設計し直せとしか答えようがない
通常の方法でうまくやれないならそもそもやろうとしていることが間違っているのではないかと疑う癖を付けたほうがいい
0297デフォルトの名無しさん2016/04/30(土) 22:27:42.03ID:cHcfbDPS
まあ似ているだけで共通化すると後々破綻したりするからな
C#は文字列の扱い簡単なんだし、さくっとコード生成プログラムを書けばいいじゃん
0298デフォルトの名無しさん2016/04/30(土) 23:32:53.00ID:AJmJIQ8j
>>294
>sealedは自動でメモリバリア
参考になるURL教えれ
0299デフォルトの名無しさん2016/04/30(土) 23:39:30.68ID:D8eH/sC3
真に受けるなよ
0300デフォルトの名無しさん2016/04/30(土) 23:58:51.35ID:rWvqva/J
stringとかsealedだよ
0301デフォルトの名無しさん2016/05/02(月) 10:53:44.18ID:FDPPvimu
エディタの画面で
/**/
形式のコメントを書くと勝手に
/*
*
*
*/
のように自動的にアストリスクが入るのを禁止出来ますか?
0302デフォルトの名無しさん2016/05/02(月) 11:44:36.87ID:nFOHZVjF
/// を打った時の機能を殺して良ければ
0303デフォルトの名無しさん2016/05/02(月) 11:47:37.27ID:FDPPvimu
>>302
それで良いのでやり方教えて
0304デフォルトの名無しさん2016/05/02(月) 11:51:13.04ID:nFOHZVjF
オプションの テキストエディタの C#の 詳細の  ///に対するなんちゃら
0305デフォルトの名無しさん2016/05/02(月) 11:52:21.62ID:FDPPvimu
>>304
さっそく試してみます。ありがとうございました。
0306デフォルトの名無しさん2016/05/03(火) 19:32:06.86ID:G9XEXQGe
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrent(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
>>306
死ね
0308デフォルトの名無しさん2016/05/03(火) 20:04:59.57ID:Ga2JkeKt
>>287
c++なら簡単だがc#だと難しい。出来なくはないが。
0309デフォルトの名無しさん2016/05/04(水) 03:28:30.74ID:blim022L
var list = new List<string>() { "りんご(100円)", "バナナ(200円)", "みかん(300円)" };
を
var dict = new Dictionary<string, string>()
{
  { "りんご", "100円" },
  { "バナナ", "200円" },
  { "みかん", "300円" }
};
こんなふうにしたいのですがやり方が分かりません。
LINQで出来ると思うのですが、誰か教えて下さい。
0310デフォルトの名無しさん2016/05/04(水) 03:36:29.74ID:1XkW7VLg
>>309
正規表現で(.+)\((\d+円)\)でMatchを見るとかじゃない?
0311デフォルトの名無しさん2016/05/04(水) 07:28:46.87ID:0yOS8YjH
なぜ「LINQで出来る」と思ったのか

var list = new List<string>() {
0312デフォルトの名無しさん2016/05/04(水) 07:41:12.50ID:blim022L
>>311
勘です
0313デフォルトの名無しさん2016/05/04(水) 07:49:31.55ID:IRRLVIf2
LINQなら>>310の正規表現とSelectとToDictionaryを組み合わせる
0314デフォルトの名無しさん2016/05/04(水) 07:50:54.49ID:tqRiG+el
List<>に2つの値入れたいなら2値代入できるclassでも作ったら?
>>310はstringの値段を数値として切り出すようなこと言ってるし、
>>309はLINQとか言ってるし、
「こんなふうにしたい」って言われても俺アスペだから何したいのか分からね
0315デフォルトの名無しさん2016/05/04(水) 09:04:18.64ID:c7vIrIvG
もうLINQでOSも作れよ(適当)
0316デフォルトの名無しさん2016/05/04(水) 09:18:02.12ID:Z89K0usy
LINQは多言語に移植するときクソなので今は使わないでほしい
0317デフォルトの名無しさん2016/05/04(水) 09:32:21.97ID:N/RwPJUB
>>309
ほれ

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
>>317
ありがとうございました。
.Select( x => new { row = x.Split
こういうテクニックがなかなか思いつきません。勉強になりました。
0319デフォルトの名無しさん2016/05/04(水) 09:57:53.20ID:/hVZH15i
こういうくだらないコードは勉強する価値が無い
0320デフォルトの名無しさん2016/05/04(水) 10:11:49.11ID:Mk4V6hyN
要はLINQ以前の段階でつまずいているんだよな…
0321デフォルトの名無しさん2016/05/04(水) 10:23:24.55ID:foGbZYeo
LINQ使用禁止
0322デフォルトの名無しさん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:c7vIrIvG
LINQも免許制にしたらいい
0324デフォルトの名無しさん2016/05/04(水) 10:51:15.29ID:Mk4V6hyN
>>322
×回答者 →○質問者
だった… 俺も十分ダサいなw
0325デフォルトの名無しさん2016/05/04(水) 11:23:51.23ID:N/RwPJUB
>>318
listの中に何が入ってくるか分からないなら
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:IHDYpsAX
λ式の引数と矢印ってうっとおしいよ
list.ToDictionary($0.foo , $0.bar)
みたいな構文導入されねえかな
あと識別子の前方一致ルックアップ
li.ToDict($0.f , $0.b)
この辺c#は頭固い
0327デフォルトの名無しさん2016/05/04(水) 12:23:13.86ID:c7vIrIvG
田舎者センス丸出しのご発表はSpeakerDeckとかでやるといいよ
0328デフォルトの名無しさん2016/05/04(水) 12:33:04.49ID:IHDYpsAX
ホントmsのc#チームはセンスが田舎モノすぎて困っちゃうな
0329デフォルトの名無しさん2016/05/04(水) 13:22:02.38ID:Z+vBdcSH
切り返しがあまりにもテンプレでワロタ
0330デフォルトの名無しさん2016/05/04(水) 14:37:09.05ID:Z89K0usy
replace「)→無」デリミタ「(」のsplitがやりたいって話じゃないの?
0331デフォルトの名無しさん2016/05/04(水) 20:41:04.06ID:1Z9f5mj5
>>326 の構文は無いと思うけど、ToDictionaryとかSumとかクエリ式でも使えるようにしてくれたらいいよね

実現方法思いつかんけど
■ このスレッドは過去ログ倉庫に格納されています