我有一个名为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();
生成错误:
'串'不包含' ParseLong'
的定义
答案 0 :(得分:13)
正确,扩展功能对dynamic
个对象不起作用。这是因为动态对象在被告知执行ParseLong
时,没有线索你的C#代码中有using
个指令,所以无法猜测你想做什么。
扩展方法100%是编译器功能(仅限); dynamic
主要是一个运行时功能(尽管编译器必须在某些地方帮助它)。
但是,如果您知道类型:
,您可以投long x = ((string)x.StartValue).ParseLong();
(从dynamic
切换回常规C#,因此扩展方法有效)