dynamic 型に拡張メソッドが使えない
◆ 実際の型の拡張メソッドは検索されないみたい
dynamic 型を使っていた時に拡張メソッドを使おうとしたらエラーになりました
このコードでは dstr.s() のところで
'string' に 's' の定義がありません
と言われます
中身が string でも dynamic 型は string じゃなく dynamic 型なので string の拡張メソッドが検索されないんでしょう
絶対その型なのが決まっているならキャストするか
拡張メソッド形式じゃなく static メソッドの呼び出しにすれば実行できます
static class Extension
{
public static string s(this string str)
{
return str;
}
}
class Program
{
static void Main(string[] args)
{
var str = "abcd";
Console.WriteLine(str.s());
dynamic dstr = "abcd";
Console.WriteLine(dstr.s());
}
}
{
public static string s(this string str)
{
return str;
}
}
class Program
{
static void Main(string[] args)
{
var str = "abcd";
Console.WriteLine(str.s());
dynamic dstr = "abcd";
Console.WriteLine(dstr.s());
}
}
このコードでは dstr.s() のところで
'string' に 's' の定義がありません
と言われます
中身が string でも dynamic 型は string じゃなく dynamic 型なので string の拡張メソッドが検索されないんでしょう
絶対その型なのが決まっているならキャストするか
Console.WriteLine(((string)dstr).s());
拡張メソッド形式じゃなく static メソッドの呼び出しにすれば実行できます
Console.WriteLine(Extension.s(dstr));