在调用扩展方法之前,需要对DynamicObject的属性进行转换?

时间:2013-06-19 09:40:37

标签: c# casting dynamicobject

我创建了一个扩展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();

我想知道为什么我可以在没有强制转换的情况下使用字符串方法,而我不能在不进行强制转换的情

任何想法为什么我不能在没有强制转换的情况下使用扩展方法?

0 个答案:

没有答案