我创建了一个扩展 DynamicObject 的类:
public class DynamicEntity : DynamicObject
{
private readonly Dictionary<string, object> values = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
values.TryGetValue(binder.Name, out result);
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
values[binder.Name] = value;
return true;
}
}
我可以将属性添加到我的类的实例中。例如:
dynamic person = new DynamicEntity();
person.firstName = "John";
person.birthDate = "January 2, 1990";
我还可以使用字符串的方法和属性:
Console.WriteLine(person.firstName.Length);
Console.WriteLine(person.firstName.Contains("ohn"));
但是,使用扩展方法,
bool empty = person.firstName.IsEmpty();
给我一个错误'string' does not contain a definition for 'IsEmpty'。
只有当我将属性转换为字符串时,才能抑制错误:
bool empty = ((string)person.firstName).IsEmpty();
我想知道为什么我可以使用字符串方法而不进行强制转换,而我不能使用扩展方法而不进行强制转换。
知道为什么我不能在不强制转换的情况下使用扩展方法吗?