The road to C# master trapemiya

C#を中心に、.NETの話題を取り上げます。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  256  : 記事  1  : コメント  10235  : トラックバック  30

ニュース

Since 2005年10月26日

わんくま同盟

わんくま同盟

Microsoft MVP


Visual Developer - Visual C#

記事カテゴリ

書庫

日記カテゴリ

void hoge(int? a){...}
void hoge(double? a){...}
以上の2つのメソッドがある場合にhoge(null)を実行します。
「次のメソッドまたはプロパティ間で呼び出しが不適切です。」というコンパイルエラーになってほしいのですが、hoge(int? a)が呼ばれてしまいます。
ちなみに、当然ですがhoge((double?)null)とするとhoge(double? a)が呼ばれます。

僕はアリだと思うんだぜ
http://blogs.wankuma.com/rti/archive/2009/08/12/180078.aspx
 
とか
 
 
で話題にしてもらったんですが、未だ理由がわかりませんので火元の私が責任を取らなきゃと思いw、コネクトに出してみました。

nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。
https://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=483653
投稿日時 : 2009年8月19日 10:18

コメント

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 10:51 よねけん
class A
{
public static void Hoge(byte a) { Console.WriteLine("byte"); }
public static void Hoge(long a) { Console.WriteLine("long"); }
}

とあった場合に、A.Hoge(0);がエラーにならないのと同じ理由で、
(たぶん)言語仕様どおりじゃないでしょうか。

単に0と書いた場合、この値はint型扱いですので、上記のコードで単純に考えると曖昧ですが、暗黙の型変換が可能である場合には小さい範囲のデータ型から(※)合致するものと判断されます。
(※ ”小さい範囲から”というのはざっくりとした説明なので、厳密にはプリミティブ型のオーバーロードの解決順位のルールがあると思います)

nullは参照型であれば何にでも暗黙的に型変換できますので、
同様に小さい範囲のデータ型から合致するようにオーバーロード解決されるているのだと思います。つまり、理屈的には数値の0の場合と同じで、0を引数として呼び出す場合に曖昧だと怒られないのであれば、nullの場合でも怒られるないのが妥当じゃないでしょうか。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 10:57 よねけん
補足です。
Nullable型以外の無関係な参照型同士の場合、
オーバーロード解決の優先順位に差がないので曖昧エラーになりますが、
継承関係にある参照型同士のオーバーロード解決では、より派生型である方が選ばれます。

class A
{
public static void Hoge1(object o) { Console.WriteLine("object"); }
public static void Hoge1(string o) { Console.WriteLine("string"); }
}

A.Hoge1(null); // stringの方が呼ばれる。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 11:16 επιστημη
> 小さい範囲のデータ型から(※)合致するものと判断されます

じゃ、じゃ、親子関係のないクラス Foo, Bar があって、
void hoge2(Foo? f) { ... }
void hoge2(Bar? b) { ... }

だったとき、hoge2(null) は?



# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 11:41 よねけん
> じゃ、じゃ、親子関係のないクラス Foo, Bar があって、

親子関係のない参照型やプリミティブ型以外に対するNullable型は、
オーバーロード解決の優先順位に差がないので曖昧だよってエラーになります。


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 11:45 επιστημη
> オーバーロード解決の優先順位に差がない

デスヨネー
hoge3(Foo? f) と hoge3(int? i) ならどうなんだろ。
プリミティブなint?にマッチさせちゃうんだろか。


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 11:52 よねけん
> hoge3(Foo? f) と hoge3(int? i) ならどうなんだろ。
> プリミティブなint?にマッチさせちゃうんだろか。

プリミティブ同士についてはコンパイラが知識を持っているので優先順を付けられるのですが、
上記の場合はそうでないので曖昧エラーです!


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 12:09 aetos
> プリミティブ型のオーバーロードの解決順位のルールがあると思います

があれば解決ですね。

ただ、この例
> Hoge(0);がエラーにならないのと同じ理由で、
は、0 が int 型だからそうなるのであって、null は何型でもないという点は決定的な違いですよね。


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 12:32 aetos
言語仕様読んでもわかんないなぁ。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 13:12 trapemiya
なるほど。0の場合もコンパイルエラーにならないんですね。継承しているクラスの場合もそうなんですね。勉強になりました。
この例のようにnullの場合もプリミティブ同士なら優先順位で解決されるのだとしても、仕様的にはやっぱりコンパイルエラーにして欲しいなぁ。知らぬ間に意図しないメソッドが実行されて気づかないうちに変な動作をする可能性がありそうだし・・・。
もしくは仕様ですと言い切るのであれば、全面的にMSDNとかに目立つように書いて欲しいなぁ。C#の言語仕様書にも私が読んだ限り見つけられませんし・・・。ちなみに引数0の場合はどこかに記述があるのでしょうか?

# [C#] nullable な引数を持つメソッドをオーバーロードする場合の解決 2009/08/19 13:30 雑記 - otherwise
nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 (The road to C# master trapemiya) null 許容型の不思議 (R.Tanaka.Ichiro’s Blog) どうやらこれは、「プリミティブ型が特別」なのではなくて、「双方の型変

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 13:39 こくぶん
# コードがコメント欄に書きづらかったので自分とこ(はてな)に記事書きました。
# trackbackも飛ばしましたが、直接コメントも書いておきます ^^;


結局、型変換規則に従って、一番上位の型として解決している(コンパイラが)ってことなのかと思います~。

>> 引数 0 の場合
これも同じ理屈ですかね~。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 13:41 aetos
> ちなみに引数0の場合はどこかに記述があるのでしょうか?

特に 0 の場合についてはありませんが、言語仕様書 6.1.8 にあります。

> int 型の constant-expression (7.18 を参照) は、constant-expression の値が変換後の型の範囲内である場合、sbyte、byte、short、ushort、uint、ulong に変換できます。

ただし、変換した結果マッチするメソッドが複数あった場合に、小さい方がより適切であるという記述は、オーバーロードの解決について定義している 7.4.3 にはありませんね。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 13:43 aetos
もうひとつ面白い例を。

Hoge( 0 ); は、以下の場合にどうなるでしょう?

ケース1
Hoge( byte ) と Hoge( short ) があるとき

ケース2
Hoge( byte ) と Hoge( short? ) があるとき

ケース3
Hoge( byte? ) と Hoge( short ) があるとき

ケース4
Hoge( bute? ) と Hoge( short? ) があるとき

答え:
ケース 1、2、4 は byte の方に解決されます。ケース 3 は曖昧でエラーです。…なんで?

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 15:23 よねけん
> ただし、変換した結果マッチするメソッドが複数あった場合に、小さい方がより適切であるという記述は、オーバーロードの解決について定義している 7.4.3 にはありませんね。

小さい方がより適切かどうかについての答えは、7.4.3以外に
7.4.2.1 Applicable function member
7.4.2.3 Better conversion
7.4.2.2 Better function member
これらを合わせて解釈する必要があると思います。
(C#3.0の言語仕様書(日本語版)が手元にないので)C#1.2の仕様書の斜め読みしかしてませんが、
・オーバーロード解決の候補には暗黙の型変換ができるものが含まれる。
・暗黙の型変換には優先順位がある
(ここで個々のプリミティブ型同士の変換の優先順らしきものの記載がある)
ように読めます。

でも、一覧表みたいになっているわけでもないので、この仕様から実装が
起こせるレベルで記述されているかと言われるとよくわかりません(^^;

> ケース 1、2、4 は byte の方に解決されます。ケース 3 は曖昧でエラーです。…なんで?

Nullableより非Nullableが優先だからじゃないでしょうか。
(言語仕様書での記載はC#3.0言語s(ry・・・のため未確認)

byte vs short -> byteの勝ち
?付き vs ?なし -> ?なしの勝ち
ケース3は1勝1敗だから、曖昧。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 15:38 trapemiya
>>こくぶんさん

># コードがコメント欄に書きづらかったので自分とこ(はてな)に記事書きました。

プリミティブに順位があるわけではなく、型変換規則にしたがっているというわけですね。大変参考になりました。ありがとうございます。

暗黙的な数値変換の一覧表 (C# リファレンス)
http://msdn.microsoft.com/ja-jp/library/y5b434w4(VS.80).aspx

と、上記の「null 許容型の不思議 」のコメントに書かれているOratorさんが作成された表
http://www.vb-user.net/junk/replySamples/2009.08.18.14.35/Nullable.htm

が見事に一致していますね。


>>aetosさん

>特に 0 の場合についてはありませんが、言語仕様書 6.1.8 にあります。

了解しました。暗黙の型変換ですね。

>もうひとつ面白い例を。

また悩ましい問題をw


>>よねけんさん

>小さい方がより適切かどうかについての答えは、7.4.3以外に

どうやらまちがいなさそうな気がしてきました。

>Nullableより非Nullableが優先だからじゃないでしょうか。

byteとshortの間には明らかに優先順位がありますから、それが不定となるということは、確かにそういうことかもしれませんね。


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 18:14 aetos
> 小さい方がより適切かどうかについての答えは、7.4.3以外に
> 7.4.2.1 Applicable function member
> 7.4.2.3 Better conversion
> 7.4.2.2 Better function member
> これらを合わせて解釈する必要があると思います。

1.2 と 3.0 では節番号がずれていて、1.2 の 7.4.2.x は 3.0 の 7.4.3.x に相当します。
ってか、どの仕様書で話をしているのか明記すべきでしたね。

> C#3.0の言語仕様書(日本語版)が手元にないので

VS2008 日本語版をインストールされてませんか?
されてるなら、%VSInstallDir%\VC#\Specifications\1041 にありますよ。
で、こいつは 2.0 に対する差分ではなく、一本化されているため、節番号がずれています。

で、その日本語版の内容を読んでの感想が
> 小さい方がより適切であるという記述は、オーバーロードの解決について定義している 7.4.3 にはありませんね。
です。

そこにある「らしきもの」は、unsigned よりは signed の方が優先されるというやつではないでしょうか。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/19 18:20 aetos
> プリミティブに順位があるわけではなく、型変換規則にしたがっているというわけですね。

うん?
順位がないのならば、小さい方が選ばれる理由は何なのでしょう?
暗黙変換の一覧表は、そういう変換が可能であるというだけのものです。変換可能なオーバーロードが複数あったときにどれを選ぶかという問題は、そこには書かれていないと理解しています。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 1:02 よねけん
> VS2008 日本語版をインストールされてませんか?

Express Editionだと確か付属してなかったんですよね。

> されてるなら、%VSInstallDir%\VC#\Specifications\1041 にありますよ。

自宅にはあるので確認してみました。

>で、その日本語版の内容を読んでの感想が
>> 小さい方がより適切であるという記述は、オーバーロードの解決について定義している 7.4.3 にはありませんね。
>です。
>
>そこにある「らしきもの」は、unsigned よりは signed の方が優先されるというやつではないでしょうか。

その説明の1つ前の箇条書きだと思っています。

--引用ここから
7.4.3.3 式からの "より適切な変換"

「型 S を型 T1 に変換する変換 C1、および型 S を型 T2 に変換する変換 C2 があるとすると、T1 と T2 が異なる型であり、次のいずれかの条件が満たされる場合、C2 よりも C1 の方が適切な変換となります。」
- 中略 -
「・T1 から T2 への暗黙の変換が存在し、T2 から T1 への暗黙の変換が存在しない。」
--引用ここまで

この箇条書きのルールにより、T1 =byte、T2=longの例とすると、T1→T2の暗黙の変換が存在し、T2→T1の暗黙の変換は存在しないので、T1が勝ちとなります。

ちなみにメソッドの実引数が定数の場合、オーバーロードの解決時には値の範囲まで見ているようで、

void Hoge(byte a) { … }
void Hoge(long a) { … }

とあった場合のA.Hoge(0);はbyte型版オーバーロードが呼ばれます。

整数定数は基本的にはint型として扱われる、と書きましたが、
実際にはオーバーロードの解決時の扱いはもう少し柔軟な判断をしています。
0がint型の扱いとして考えた場合、int→byteへの暗黙の変換は存在しない、となるため、long型版オーバーロードが呼ばれそうなものですが、実際には0~255の定数値に対してはbyte型版が呼ばれます。

私の最初のコメントの例で呼び出しをいかの2パターンでやってみるとおもしろい結果になります。
A.Hoge(255);
A.Hoge(256);


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 10:48 aetos
> その説明の1つ前の箇条書きだと思っています。

なるほど。
それで byte が最強になる説明はつきそうですね。
っていうか、そこを勘違いして読んでました。すいません。

さて、しかし、本題である nullable の話はどうでしょうか?
Hoge( short? ) と Hoge( long? ) があったとき、Hoge( null ) はどちらを呼ぶか。
null は任意の Nullable<T> 型に暗黙変換ができます。
また、暗黙の拡大変換により、short? は long? に変換できますが、逆はありません。
以上のルールからは null リテラルを与えた場合に short? 側が呼ばれるのは一見正しく見えます。

しかし、関数呼び出しに際して暗黙の変換がかかるのは一度きりです。
型 X が Y に、Y が Z に暗黙変換可能であるとき、Hoge( new X() ); は Hoge( Z ) に適合しません。

null を直接 short? に変換すれば一度の変換で可能ですが、null はいかなる型も持たないため、7.4.3.3 が定義できないのではないかと思うのです。ならば、null を long? ではなく short? にする理由がありません。

> 実際には0~255の定数値に対してはbyte型版が呼ばれます。

Hoge( 0 );

int hoge = 0;
Hoge( hoge );
では結果が変わりますね。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 10:52 aetos
http://blogs.wankuma.com/rti/archive/2009/08/17/180218.aspx#180241

によって、いかなる型も持たないのではなく int? にされてしまうから、short? に適合するんでしょうかね。
だとすれば、何故 int? なのかという問題になりますが…そうしないとオーバーロードが解決できなくなるから?

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 11:43 よねけん
> null はいかなる型も持たないため

むしろnullはどんな参照型 or Nullable型にもなれる、と考えてはどうでしょう。


# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 11:54 aetos
> むしろnullはどんな参照型 or Nullable型にもなれる、と考えてはどうでしょう。

ではなぜ long? にならなかったの? ということですよ。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 12:27 よねけん
> http://blogs.wankuma.com/rti/archive/2009/08/17/180218.aspx#180241
>
>によって、いかなる型も持たないのではなく int? にされてしまうから、short? に適合するんでしょうかね。
>だとすれば、何故 int? なのかという問題になりますが…そうしないとオーバーロードが解決できなくなるから?

class A
{
public static void Hoge(int? a){}
public static void Hoge(double? a){}
static void Main()
{
A.Hoge(null);
}
}

というコードをコンパイルしてILを確認しました。
nullはint?としてオーバーロード解決されていて、
int? vs double?の代わりに、short? vs long?とした場合なら、
nullはshort?だとして解釈されていますね。
特にキャストが行われているわけではなく、あくまでコンパイル時に型を決定していますね。

> ではなぜ long? にならなかったの? ということですよ。

「 また、暗黙の拡大変換により、short? は long? に変換できますが、逆はありません。」とaetosさんが書かれているとおりだと思います。



# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 12:45 aetos
> nullはshort?だとして解釈されていますね。

というのは、IL 的に
A.Hoge((short?)null);
というコードが生成されているということですか?

> ではなぜ long? にならなかったの? ということですよ。

コンパイル時に null に型が与えられるという話はこのスレでは出てきていません。
それを抜きにして考えれば、2度の暗黙変換が必要になるのでコンパイルエラーになるはずだ、ということです。

従って、なぜコンパイルエラーにならないのか、なぜ小さい方が優先されるのかは、「コンパイル時に null に型が与えられるため」が答えとなるでしょう。
なぜそうなっているのか、はまた別の問題ですね。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 13:28 よねけん
> というのは、IL 的に
> A.Hoge((short?)null);
> というコードが生成されているということですか?

C#的に表現すると以下のようなコードです。
Short? sh = null;
A.Hoge(sh);

IL的にはnullをロードする=0をロードする、と同じで、そのため、
変数に代入されるまでは何型とかないので、
実質的には変数に代入されることで型が決まる、
といって差し支えないのかなと思います。

> コンパイル時に null に型が与えられるという話はこのスレでは出てきていません。

では、「コンパイル時にnullに型が与えられる」と主張しておきます。
といっても、その根拠は、言語仕様書などから読み取れる情報というより、
実際にそうなっているから、ですが。

> なぜそうなっているのか、はまた別の問題ですね。

ですね。



# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 15:22 trapemiya
>IL的にはnullをロードする=0をロードする、と同じで

なるほど。そうなっているんですね。

>ですね。

結局、ここなんですよね。雰囲気は暗黙の型変換の規則と関係がありそうなんですけどね。
ちょっとここまでみなさんのテストの結果を踏まえてまとめますと、0がintに暗黙に型付けされるように、nullもオーバーロードする複数のメソッドの引数のなかから、一番小さい型(一番どの型へもキャストできる型)の引数を選び、その型にnullが型付けされて代入されるということですね。

あと、byte? 対 shortだとコンパイルエラーになるということですが、私の方で試したらbyte?で解決されましたよ。ちなみにbyte?対byteだとbyte?に解決されました。

というわけで裏づけはないですが、みなさんのおかげでとりあえず納得状態ではあります。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/20 18:29 aetos
> あと、byte? 対 shortだとコンパイルエラーになるということですが、私の方で試したらbyte?で解決されましたよ。ちなみにbyte?対byteだとbyte?に解決されました。

引数に null 渡しませんでした? そりゃ nullable vs non-nullable だったら、null は nullable にしか解決できませんからそうなります。
あの実験の引数は 0 ですよ。

# re: nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/08/21 9:37 trapemiya
>あの実験の引数は 0 ですよ。

ほんとだ。ごめんなさい。私の誤りです。ぼけてますね。
というわけでこの問題は未解決なわけですね・・・

# 《回答が付きました。》 nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。 2009/09/08 17:28 The road to C# master trapemiya
《回答が付きました。》 nullableの引数を持つメソッドをオーバーロードする場合に、引数にnullを与えた時にコンパイルエラーにならない。

# rutIgmAopEtIOxqVZ 2012/01/04 6:40 http://www.kosherbeefjerky.com/
TBlsBW Hooray! the one who wrote is a cool guy..!

# re: 無意味なコメント(前回ソースゴミのエントリーの延長線) 2017/07/24 11:46 zzzzz
http://www.nbajerseys.us.org/
http://www.pandorajewelryoutlets.in.net/
http://www.uggboots-forwomen.in.net/
http://www.nikeshoes2017.us.com/
http://www.michaelkors-handbags.org.uk/
http://www.nikeshoesoutlet.us.org/
http://indianapoliscolts.jerseyscheap.us.com/
http://www.louisvuitton-sacpascher.fr/
http://www.dolceandgabbana.in.net/
http://www.cheapray-banssunglasses.us.com/
http://chicagobears.jerseyscheap.us.com/
http://www.coachoutlet-storeonline.com.co/
http://www.fitflopssale-clearances.us.com/
http://www.uggsforwomen.eu.com/
http://www.kate-spadehandbags.us.com/
http://www.true-religionoutlets.us.com/
http://www.eccoshoesoutlet.us/
http://www.nikehuarache2017.in.net/
http://www.montblancpensoutlet.com.co/
http://www.nikestores.org.uk/
http://www.chaussurelouboutinpas-cher.fr/
http://atlantafalcons.jerseyscheap.us.com/
http://www.christianlouboutinoutlets.us/
http://www.nhljerseyswholesaler.us.com/
http://www.fitflopsclearancesale.us.com/
http://www.polo-outlets.us.com/
http://newenglandpatriots.jerseyscheap.us.com/
http://www.nikeoutlet-stores.us.com/
http://www.nikeblazerlow.fr/
http://www.nikefactorystore.us.com/
http://www.prada-shoes.us.com/
http://www.replicawatchesforsale.us.com/
http://www.redvalentino.in.net/
http://www.ugg-slippers.de.com/
http://www.uggs-forwomen.de.com/
http://www.conversetrainer.org.uk/
http://www.uggs-onsale.eu.com/
http://sanfrancisco49ers.jerseyscheap.us.com/
http://www.cheapjordanshoes.in.net/
http://neworleanssaints.jerseyscheap.us.com/
http://www.truereligionjeansoutletonline.us.com/
http://www.ugg-slippers.eu.com/
http://www.michaelkors-handbagswholesale.in.net/
http://www.new-balanceshoes.in.net/
http://www.michaelkorshandbagswholesale.in.net/
http://www.ralph-laurenoutlets.us.com/
http://miamidolphins.jerseyscheap.us.com/
http://www.coachoutletstore-online.eu.com/
http://www.raybanssunglasses.net.co/
http://www.oakleysunglassesoutlete.us.com/


# yezi20160620@163.com 2017/09/27 18:43 wwwww
http://www.outletlacoste.us.com
http://www.michael-kors-handbags.com.co
http://www.cheapretro-jordans.com
http://www.jordan12.us.com
http://www.yeezyboost.in.net
http://www.retro-jordans.us.com
http://www.fitflops.cc
http://www.goldengoose-snearkers.com
http://www.goldengoose.us.com
http://www.yslhandbags.us.org
http://www.curry3.in.net
http://www.nikebasketballshoes.us.com
http://www.lebron14.us.com
http://www.ultraboost.us.com
http://www.curry4.us.com
http://www.vancleefarpels.us.com
http://www.toryburchshoes.us
http://www.adidasnmds.com
http://www.rosherun.us.com
http://www.adidasoutletonline.us.com
WWW

# re: [Tips][Visual Studio]Visual Studio 2008で、ソースコードの行数をカウントする方法 2017/09/29 9:51 chenlina
http://www.uggsadd.com
http://www.mlbjerseyswholesale.us.com
http://www.nikerosherunsale.co.uk
http://www.officialcoachfactoryoutletonline.us.com
http://www.canadagoose.com.co
http://www.michaelkorsuk.me.uk
http://www.raybanpascher.fr
http://www.nikeoff.com
http://www.ferragamooutlet.us.com
http://versace.sunglassescheap.us.com


# cc 2018/06/30 7:37 chenlixiang
2018.6.30chenlixianghttp://www.truereligionoutlet.in.net
http://www.jordans.pt
http://www.basketball--shoes.net
http://www.newbalance.org.uk
http://www.swarovski-gioielli.it
http://www.louboutinoutlet.us.org
http://www.ralphlauren-outlet.co.uk
http://www.coachsaleoutletonline.us.com
http://www.adidasstore.us.org
http://www.tommy-hilfiger.org.uk
http://www.jordan3.in.net
http://www.retro-jordan.us.com
http://www.reebok.us.org
http://www.michaelkors--canada.ca
http://www.oakleysunglassessale.name
http://www.ralph--lauren.fr
http://www.nikerosherun.net
http://www.nikeblazer.in.net
http://www.herveleger.us
http://www.toryburch-outletsonline.us.com
2018.6.30chenlixiang


# Nike VaporMax 2019/04/18 10:26 xjqliqs@hotmaill.com
"Yeah." Qin Hengtian couldn't help but feel unpleasant. I just said that I would like to devote myself to martial arts. You will come out to challenge. This is the rhythm of hitting my face! "

# Nike VaporMax Flyknit 2019/04/22 17:56 tcbrwj@hotmaill.com
Qin Zhan drank heavily, the whole body was magnificent, and the endless spiritual power was brewing. It seemed to be a shocking accumulation, and finally broke out.

# retro jordan 33 2019/04/27 14:34 roglbisxy@hotmaill.com
Dalio pointed out that the gap between rich and poor has reached the highest level since the end of the 1930s, and now the wealthiest 1% of the population has more than the wealth of the bottom 90% of the population. So who is responsible for this dilemma? Dalio thinks that it should not be "evil rich" or "lazy poor", but should be the capitalist system itself. Dalio pointed out.

# Yeezy 700 2019/05/01 2:38 vvbobkatqil@hotmaill.com
Now, it’s set to continue that recent proliferation of eye-catching makeups with a new Light Orewood style. A color palette that any NSW fan is sure to be at least somewhat familiar with, this Element 55 applies the aforementioned orewood tone across the upper for a light, breezy look. Accents then arrive via salmon-colored detailing on the eyestays/the collar’s taped seams, while bronze and brown appear on the heel clip and lace loops.

# Pandora Ring 2019/05/06 1:21 nqlstzv@hotmaill.com
The three have a lot of ground to make up in the large, diverse field where many contestants have been officially raising money and building donor lists for months. Ryan, who unsuccessfully challenged Nancy Pelosi for the party’s caucus leadership after the 2016 election, is focusing on green manufacturing jobs.

# Air Max 2019 2019/05/07 23:03 ibiynbp@hotmaill.com
At a rally in Fort Worth the next day, Sanders campaign senior adviser Nina Turner excoriated those who dared to boo the Vermont senator.

# NFL Jerseys 2019/05/08 13:22 ziuaquvosim@hotmaill.com
Raja's defense team has argued that their client feared for his life when Jones drew his gun.

# Nike Store 2019/05/08 15:14 lsyxsjdzjc@hotmaill.com
If George really wanted to get Lillard back, his best option is to just wait until next season and hope he can get revenge on the Trail Blazers. It takes time to come back after losing like that.

# Nike Outlet 2019/05/22 3:51 bdkdpejpj@hotmaill.com
http://www.nikefactoryoutletstoreonline.com/ nike factory outlet store online

# cheap custom nfl jerseys 2019/06/02 11:00 kvcdboojfjg@hotmaill.com
http://www.nfljerseys2019.us/ NFL Jerseys 2019

# Travis Scott Jordan 1 2019/06/02 14:06 gorporxkp@hotmaill.com
Last year,Jordan the Giants passed on QBs Sam Darnold,Jordan Josh Rosen and Josh Allen and drafted a running back second overall. Even with Saquon Barkley's Offensive Rookie of the Year performance,Jordan New York won only five games with eroding statue Eli Manning behind center,Jordan and that appears to be the plan yet again. Daniel Jones played under David Cutcliffe at Duke,Jordan and there's no doubt Cutcliffe's cozy relationship with the Manning family had plenty to do with the Giants selecting Jones with the No. 6 pick.

# pandora jewelry 2019/06/10 2:36 jryckmv@hotmaill.com
http://www.yeezy.me.uk/ Yeezy

# NFL Jerseys Cheap 2019/06/25 5:59 cdyglvs@hotmaill.com
http://www.jordan12gymred.us.com/ Jordan 12 Gym Red 2018

# jordan 11 concord 2019/07/15 15:48 lbequiqxcfa@hotmaill.com
http://www.yeezy-350.org.uk/ Yeezy 350

# Adidas Yeezy 2019/08/13 20:03 moptyeu@hotmaill.com
http://www.yeezy-shoes.in.net/ Yeezy

# Yeezy Boost 350 V2 2019/08/14 23:38 jqnmsdahs@hotmaill.com
http://www.nfl-jerseys.us.org/ NFL Jerseys

# Yeezy 2019/08/20 17:55 tkkovxrr@hotmaill.com
http://www.nikeoutletonlineshopping.us/ Nike Outlet

# Illikebuisse znfyy 2021/07/04 21:52 pharmacepticacom
tadalafil troche cost https://www.pharmaceptica.com/

# re: nullable???????????????????????????null???????????????????? 2021/08/07 10:52 hydroxychloroquine sulfate tablets
cloriquin https://chloroquineorigin.com/# hydroxycholorquine

# 激安ブランドのオーデマピゲ腕時計 2021/12/06 3:01 ktyuspcafc@ezwen.ne.jp
ルイヴィトン - N級バッグ、財布 専門サイト問屋

弊社は販売) バッグ、財布、 小物、靴類などでございます。
1.品質を重視、納期も厳守、信用第一は当社の方針です。

2.弊社長年の豊富な経験と実績があり。輸入手続も一切は弊社におまかせてください。質が一番、最も合理的な価格の商品をお届けいたします。

3.お届け商品がご注文内容と異なっていたり、欠陥があった場合には、全額ご返金、もしくはお取替えをさせていただきます。

弊社は「信用第一」をモットーにお客様にご満足頂けるよう、

送料は無料です(日本全国)! ご注文を期待しています!
下記の連絡先までお問い合わせください。

是非ご覧ください!

# expoZoHghntIiwiCgf 2022/04/19 13:21 johnansog
http://imrdsoacha.gov.co/silvitra-120mg-qrms

Post Feedback

タイトル
名前
Url:
コメント