我创建了一个扩展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";
我也可以使用string的方法和属性:
Console.WriteLine(person.firstName.Length);
Console.WriteLine(person.firstName.Contains("ohn"));
但是,使用扩展方法,
bool empty = person.firstName.IsEmpty();
给我一个错误'string'不包含'IsEmpty'的定义。
只有在将属性转换为字符串时才能抑制错误:
bool empty = ((string)person.firstName).IsEmpty();
我想知道为什么我可以在没有强制转换的情况下使用字符串方法,而我不能在不进行强制转换的情
任何想法为什么我不能在没有强制转换的情况下使用扩展方法?