2016-07-01 16 views
4

文字列にParseLongという名前の拡張機能があります。動的オブジェクトに対して拡張機能が機能しない

public static long ParseLong(this string x, long Default = 0) 
{ 
if (!string.IsNullOrEmpty(x)) 
    long.TryParse(x, out Default); 
return Default; 
} 

と正常に動作します:

long x = "9".ParseLong(); 

しかしなどの動的オブジェクトのために:

dynamic x = GetValues(); 
x.StartValue.ToString().ParseLong(); 

がエラーを生成します。

'string' does not contain a definition for 'ParseLong'

答えて

13

正しい、拡張機能がために動作しません。 dynamicオブジェクトs。これは、動的オブジェクトがParseLongを実行するように指示されたときにの手がかりがないためですusingの指示文がC#コード内にあったため、何をしたいのか推測できません。

拡張メソッドは100%コンパイラ機能(のみ)です。 dynamicは、主にランタイム機能です(ただし、コンパイラはその機能をサポートする必要があります)。

あなたはタイプを知っていればあなただけの、しかし、キャストできます(通常のC#2にdynamicから戻ってスワップし、その拡張メソッドが動作)

long x = ((string)x.StartValue).ParseLong(); 

関連する問題