[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 08/16 23:53 / Filesize : 244 KB / Number-of Response : 980
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part46



1 名前:デフォルトの名無しさん [2008/04/22(火) 00:31:59 ]
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。
c++厨の嵐はスルー汁。

前スレ
C#, C♯, C#相談室 Part45
pc11.2ch.net/test/read.cgi/tech/1200911737/

その他テンプレ>>2-5くらい

902 名前:895 mailto:sage [2008/06/16(月) 20:14:14 ]
皆さんレスありがとうございます。
とりあえずはコレクションを引数に渡すやり方で実装できました。
ラムダ式を使った方法を教えてくださった898,899さんのやり方は
ちょっと理解ができませんでした・・・申し訳ありません。
デリゲートのコレクションは使ったことがないので勉強してみたいと思います。


903 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:28:26 ]
ITfMessagePump(TSFのInterface)をC# Formアプリで使ってる人いる?
メッセージループが競合してどうすりゃいいか、分からんのだが・・・。

904 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 01:32:33 ]
いません

905 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:39:48 ]
そうか。だよなー。

906 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 02:53:11 ]
>>903
ご想像通りメッセージループを自前のものに置き換えるしかない。

907 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:09:54 ]
その方法を知りたいな

908 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:26:33 ]
>>907
メッセージディスパッチャに関してはP/Invokeで動くというか、
普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
P/InvokeでDispatchMessageすればおk。
必要ならWinFormのApplicationクラスのソースでも眺めて見れ。
折角公開されたんだし。WPFももう公開されたんだっけ?
WPFアプリケーションでWinFormsを併用するときのドキュメントも参考になるかも。

というかメッセージディスパッチャにWPFのApplicationクラスを使いつつ
WinFormsを表示するのが楽かもしれんな。XP以降専用になっちまうが。

あとはExecutionContextの実装もちゃんとやっておくとベター。

909 名前:907 mailto:sage [2008/06/17(火) 03:29:53 ]
>あとはExecutionContextの実装もちゃんとやっておくとベター。

SynchronizationContextの間違い。すまそ。
msdn.microsoft.com/ja-jp/library/system.threading.synchronizationcontext.aspx

910 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 03:31:08 ]
ぐあ
909==908ね。



911 名前:908 mailto:sage [2008/06/17(火) 04:00:28 ]
実際試してみた。WPFのApplicationクラスでWinForms。
一応動くことは動くみたい。
この方法ならWPFのSynchronizationContextが使われるので
SynchronizationContextはそのままでOK、なはず。
---------------
// PresentationFramework.dll
// System.Windows.Forms.dll
// WindowsBase.dll
using System;
static class Program
{
  [STAThread]static void Main(){ new CustomApplication().Run(); }
}
public class CustomApplication : System.Windows.Application
{
  protected override void OnStartup(System.Windows.StartupEventArgs e)
  {
    base.OnStartup(e);

    var form = new System.Windows.Forms.Form()
    {
      Width = 640,
      Height = 480,
      Text = "Test Window",
    };
    form.Disposed += (_o, _e) => this.Shutdown();
    form.Show();
  }
}

912 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:03:10 ]
>>908
ありがと。
Application.csは見ていて、FPushMessageLoopでGetMessageWしてるのは確認したんだが、
ThreadContextの処理と整合性を取りつつも、
ITfMessagePump::GetMessageする確実な手段が分からなくてね。

ThreadContext周りの処理はinternal/privateがひしめいていて、
うかつに手を出せないし、お手上げ状態。

WPFは要件的に採用は厳しいかな。

いずれにせよ、overrideなり、Filter的なものでGetMessegeを自前の処理を行う仕組みはなさそうだね。

>普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
>P/InvokeでDispatchMessageすればおk。
おkな理由を教えてもらえると嬉しいな。

913 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 04:24:01 ]
>>912
>おkな理由を教えてもらえると嬉しいな。

PresentationFramework.dllが中でやっていることがまさにそれだから、で説明になる?
System.Windows.Threading.Dispatcher.PushFrameImplおよび
System.Windows.Threading.Dispatcher.GetMessageと全く同じことをすれば動く。
で、納得してもらえるんだろうか……

914 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:36:47 ]
たとえばNetworkStreamのBeginReadでAsyncCallbackを指定したとする。

このコールバック中にEndReadで例外が発生したらアプリが強制終了してしまう。

この例外をメインスレッド、少なくとも呼び出したスレッドで処理するにはどうすればよろしいでしょうか?

915 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 10:42:52 ]
例外を補足できない?

916 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 14:27:34 ]
>>914
Windowsアプリなら、Control.BeginInvokeでEndRead呼べば
発生する例外もメインスレッドの管轄になるはず
ただ、例外チェインの最後のエラーしか取れないかも

コンソールアプリならしらね

917 名前:デフォルトの名無しさん [2008/06/18(水) 10:06:15 ]
xmlファイルからデータを取得する方法について教えてください。

下記のxmlファイルtest1.xmlを作成しました。
test1.xml
 <?xml version="1.0" encoding="utf-8" ?>
  <Items>
   <Item ID="001">
    <Name>aaaa</Name><Age>10</Age>
   </Item>
   <Item ID="002">
    <Name>bbb</Name><Age>20</Age>
  </Item>
 </Items>

test1.xmlのデータを下記のプログラムで読み込みました。
001  XmlDocument xmlDoc = new XmlDocument();
002  xmlDoc.Load("c:\\test1.xml");
003
004  string wID = "002";
005  XmlNode xmlNode = xmlDoc.SelectSingleNode("//Items/Item[@ID='" + wID + "']");
006  string wName = xmlNode.SelectSingleNode("//Name").InnerXml;
007  string wAge = xmlNode.SelectSingleNode("//Item/Age").InnerXml;

私の予想ではwNameには"bbb"、wAgeには"20"が入ると思っていたのですが
実際にはwNameには"aaa"、wAgeには"10"が入ります。

プログラムの005行目の処理でxmlNodeには確かに<Name>bbb</Name><Age>20</Age>が抽出されています。
006-007行目で、そこから更に//Nameを抽出したのにwNameに"bbb"が入らず"aaa"が入ってしまうのは何故ですか?

また,このような絞込みっぽい処理を行うには、どのようにすれば良いでしょうか。

918 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 10:10:56 ]
そこで // 使っちゃ駄目だろ

919 名前:917 mailto:sage [2008/06/18(水) 10:17:43 ]
>>918
Σ(゚д゚lll)
//はずしたら上手くいきました。

なぜこういう事になるのか勉強して出直してきます。
ありがとうございました。

920 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:16:35 ]
javaばっかりでいつも不思議に思っているんですが、
キーワードでas base isとかがかぶったらどういう回避方法があるんでしょうか。




921 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:21:07 ]
何を言いたいのか良く分からん

922 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:28:48 ]
@as @base @is

923 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:36:16 ]
ソース上で既に使っていて、キーワードとかぶっているときはどうなるんでしょうか。
またソースに手を入れて変更しないとダメなんでしょうか。

924 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 19:51:53 ]
1.0から3.0までで変数名に使えないキーワードは増えてなかったと思うが

925 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:38:42 ]
c, javaのソースからc#に移植というか少し手を入れるときキーワードの問題が発生しませんか?
特にc#は独自のキーワード名が多いみたいですけど。


926 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:41:35 ]
勝手な拡張もいいんですけど、もとのソースの関数名がas, in, baseとかだとどうするんでしょうか?
関数名のAPIの方を変更できないし泣きませんか?
そうするとC#で作る気力も無くなるんですけど。

927 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:43:58 ]
C#はjavaじゃないから嫌いだとか
子供に生まれてこなくて良かったとか言い出す奴らは
来てもらわなくてもいいよ


928 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:48:49 ]
いや、そういうことじゃないんですけど。
まともにプログラミングの話を出来ないなら、別にいいですよ。
噂どおり、C#の人はC++厨房と変わらないようですねw

929 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:53:56 ]
asとかを使いたければ@asとしてくれ
他言語からの移植なんてそう簡単にはいかんよ

930 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:54:39 ]
typedefとか#defineが欲しいといいたいのかな?泥沼だと思うがね。
同じ言語の世代間の違いならコンパイルオプションや
pragmaのようなコンパイル指令で逃げるのだろうけど、
他言語からの場合は良識に任せるしかないな。
移植を前提にしたコードでbaseとかinとかselfとか変数に
使ってたらそういう名前を使った奴がアホだろ。




931 名前:デフォルトの名無しさん [2008/06/18(水) 20:56:23 ]
簡単なことだし、ここでちゃんと教えればすむことなのに、「C#の奴はやっぱり変人しかいないよ」とか噂を流される方がいいのかな?
まあ、>>927みたいなしきり屋がいるようなところじゃ、こっちの方がよくわかんないけど。

ここでは>>927みたいなしきり屋に従わなければいけないのですか?

932 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 20:58:36 ]
伊武雅刀の「子供達を責めないで」のオマージュだろね。
フルすぎるネタで若い子にはわからないぞ;;

933 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:04 ]
>>931
はいはい、とっとと噂を流す仕事に戻ってね。

934 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:05:46 ]
これ聞いて落ち着け
ttp://jp.youtube.com/watch?v=YaCkfvm3Oyw


935 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:16:13 ]
>>930
Cならともかく、C#みたいなしんまい言語を前提にコードかけるかよw
in selfとかをキーワードに設計する方が多言語からの移植を考えないようなアホじゃないのか。
おまえはいつも、次の言語のキーワードとぶつからないように考えながら書いてるのか?アホはおまえだなw

936 名前:デフォルトの名無しさん [2008/06/18(水) 21:18:57 ]
>>933
Javaの世界ではC#の奴はめちゃ嫌われてるよ。
演算子オーバーロード―がどうとかうるさいしww
VBほどじゃないけど(笑)

937 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:21:33 ]
それをC#のスレで言って何がしたいのか分からん
嫌われてるからJavaやれってか?
そんな気を使わなくてもC#一筋なやつの方が少ないだろ

938 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:14 ]
C#一筋で食っていけるほど仕事がないな。

939 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:26:54 ]
Javaの新機能はほぼ全てC#のパクリなのにな

940 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:28:49 ]
だから移植前提で独自キーワード入れないでほしいんだけど。またMSの悪い癖(独自拡張?)がでちゃったんですか?



941 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:31:26 ]
昔COBOLという言語があってな。
ていうか独自キーワードってなんだよ。
Javaのキーワードが他の言語からの移植を考えて決められてるなんて初耳だ。

942 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:33:07 ]
>>940
Javaを使い続ければすむことじゃないのか?

943 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:51:19 ]
Javaって $_ みたいな名前定義できなかったっけ?

CLIだとどうなってるんだろ?

944 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 21:59:50 ]
Java屋?
C#出たときあちこち馬鹿にしまくったくせに掌反してパクり始めた奴らだろ?
そりゃあんだけ醜態晒せば嫌って、なかったことにでもせんとなwwww

まあそれはいいとして @ つければキーワードとして扱われなくなるよ。VBなら[]で囲むんだっけかな

相互運用のためにその手の機能を持つことが推奨されてる。ちなみにCILは「どんな識別子でも」持てるから
限界はあるんだけどな

945 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:06:13 ]
移植するのに変数名まで同じにしたい痛い人がいるスレはここですか

946 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:07:26 ]
実際そんなに独特な予約語多くないだろ
2.0以降に追加されたキーワードは全て文脈次第だし

947 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:09:25 ]
あそうそう、コンテキストキーワードも多いっての書き忘れてた

948 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:14:03 ]
半年も使わないと忘れちゃうしキーワード多すぎだろ。
いちいち覚えるのとか別に苦痛じゃないんだけど、なんかMSに束縛されてるみたいで嫌じゃないか?
まあ、変なところがあったらコンパイラが叱ってくれるからいいんだけど…

949 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:17:23 ]
…半年はさすがに記憶力悪すぎかろくに触ってなかったレベルだろう。

950 名前:デフォルトの名無しさん [2008/06/18(水) 22:19:51 ]
scriptfpとかpackageはそのままでjavaに移植できるの?
java使ったことないんでしらんけど。

そもそも多言語移植の時に変数名そのままで移植できなきゃやだやだやだ
なんてバカかよ。ほとんど意味ないと思うんだが。
そこまでしたいならまずjavaの段階で適宜リファクタリングして移植すりゃ
いいことなんじゃねーの?



951 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:21:05 ]
ざっくり読むと
アホがjavaからC#へ移植を試みて文句言ってる
のに食いついたって感じ?
暇だなぁ、お前等

952 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:23:01 ]
J#でもつかってろよ

953 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:15 ]
おお、まさにJ#でこの話終わりだなww

954 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:26:25 ]
コンテキストキーワードよりもはるかに気持ち悪いのは,
インターフェイスとか抜きで特定の名前(引数)のメソッドの呼び出しに変換される機能
foreach→GetEnumerator()とかコレクション初期化子→Add(引数任意)とかクエリ式とか

955 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:28:08 ]
C#コンテキストキーワードって
get set partial where yield value と後はC#3.0で導入されたクエリキーワードぐらいだよな。

>忘れちゃうキーワード
explicit implicit stackalloc unchecked volatile あたりは時々忘れそうになる。

956 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:41 ]
add/removeとかも<コンテキストキーワード

957 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:30:57 ]
そろそろ次スレ立てたほうがいい?970くらいでいい?

958 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:32:24 ]
>>954
java5にも同じのあるじゃないか
Iterable/Iteratorでfor ( : ) をお忘れではないか

959 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:35:22 ]
>>958
C#のはダックタイピング的なのでちょっと違う。
多分>>954はその事を知ってて書いてる。

960 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:52:38 ]
Whereという名前のメソッドがあればクエリ式のwhere使えるんだよね



961 名前:デフォルトの名無しさん [2008/06/18(水) 22:53:33 ]
>>955
ええ!それは忘れないだろ。
それ、使わないならC#言語じゃなくてもいいでない?
ん・・・このスレのレベルは、理解に苦しむ・・

962 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:03 ]
>>959
了解、インターフェイスがなくてもメソッドの名前が一致してればOKという話か。
usingはなぜかIDisposable.Dispose()でないと受け付けない。
これもメソッドの名前だけで使わせて欲しいよ。

963 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 22:57:17 ]
>>956
リファレンスのキーワードの項に、
>>955のとクエリキーワードは載ってるけど、add/removeが載ってない
中の人にも忘れられてる?

964 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:23 ]
add/removeはデリゲートだけでデリゲートでも普通使わないからやっぱり忘れられていると思う。

965 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:03:48 ]
C#というのは、Javaと比べるとポインタ演算unsafeとstackallocが売りだと思うんだけど…

966 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:07:13 ]
いやなウリだな

967 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:08:34 ]
>>964
WinFormでもWPFでもコントロールのイベントはカスタムしてるのがほとんどだぜ

968 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:11:15 ]
便利なものはどんどん積極的に組み込んでアピールしていこうっていうのがコンセプトでしょ

969 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:13:49 ]
ヘジたんはむしろ抑え役っぽい

970 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:17:46 ]
抑え役だし押さえ気味だよなぁ。
というかあいつら基本的に自分たちでだいぶ使ってから出すから
まぁそんなもんかという気はする。



971 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:38 ]
VBと違ってクエリ演算子のサポートが消極的すぎ
中途半端に付けるくらいならクエリ式なんて無くてよかった
メソッド形式だけだとどうしてもインパクトに欠けるからなあ

972 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:32:42 ]
javaがいったいいくつ独自キーワードを取り入れたか

973 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:35:19 ]
今のC#のウリは関数型とラムダ式だろ
JavaやC++とくらべて進んでるところは

974 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:38:10 ]
次はついに動的型くるかも

975 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:42:53 ]
動的型というか、動的っぽい記述が一時的につかるようになる dynamic ブロックになりそうかな。

976 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:45:46 ]
GetEnumeratorは仕方ない。
ジェネリックがなかったころだから。


977 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:48:39 ]
Mix-in 入れてくれんかな

978 名前:デフォルトの名無しさん [2008/06/18(水) 23:49:20 ]
相変わらずC#はキモイな
どこがどうキモイかを気がついてないようだけどw

979 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 23:54:12 ]
>相変わらずC#はキモイな
何言ってる?
現在進行形でキモクなってんだよっ






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<244KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef