1

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

我想知道为什么我可以使用字符串方法而不进行强制转换,而我不能使用扩展方法而不进行强制转换。

知道为什么我不能在不强制转换的情况下使用扩展方法吗?

4

0 回答 0