2016-07-26 5 views
0

文字列を入力として受け取り、文字列が有効な整数でない場合は変換された整数を返すTryParseNullという拡張メソッドをintに追加しようとしています。TryParseNull拡張メソッドをC#のintに追加できません

私はこのポストからdoubleMeの例を踏襲:using extension methods on int

私の拡張メソッドは次のように宣言されています:

public static class IntExtensions { 
    public static int? TryParseNull(this string s) { 
     int dummy; 
     int? value; 
     if (int.TryParse(s, out dummy)) { 
      value = dummy; 
     } 
     else { 
      value = null; 
     } 
     return value; 
    } 
} 

しかし、私はこのようにそれを使用しようとすると、コンパイラは、それがないと文句を言いTryParseNullが何であるかを知る。私は以下の両方を試しました。

int? myNum = int?.TryParseNull("1"); 
int? myNum = int.TryParseNull("1"); 

編集:私は問題がパラメータthis string sだと思うが、私はそれを修正するかどうかはわかりませんので、私は、文字列で渡しています。

編集2:以下の回答から問題の内容を確認できますが、構文がある方法はありますかint.TryParseNull("1")

+1

'' 1 '.TryParseNull() ' –

+0

制御しない型に静的メソッドを追加することはできません。 – Will

答えて

3

拡張メソッドは、型ではなく、 'this'パラメータのインスタンスで機能します。

代わり

int? myNum = int?.TryParseNull("1"); 

int? myNum = "1".TryParseNull(); 

編集をお試しください: ところで、あなたはまた、最初の引数としてのthisパラメータで静的メソッドを呼び出すことができます。

int? myNum = IntExtensions.TryParseNull("1"); 
3

int? myNum = "1".TryParseNull(); 
を試してみてくださいあなたの方法は int?stringにない拡張されます。それは int?

0

intを返さないフレームワーク提供型で、追加した拡張メソッドは、もともとint実装の一部ではなかった、あなたが直接タイプを使用して、それを呼び出すことはできませんので、あなたはintのインスタンス上でそれを呼び出す必要があります他の人が指摘しているように。

関連する問題