我在Fabio Maulo's的博客上看到了一篇非常有趣的文章。如果您不想跳转到链接,这里有代码和错误信息。我定义了一个新的通用类,如下所示:
public class TableStorageInitializer<TTableEntity> where TTableEntity : class, new()
{
public void Initialize()
{
InitializeInstance(new TTableEntity());
}
public void InitializeInstance(dynamic entity)
{
entity.PartitionKey = Guid.NewGuid().ToString();
entity.RowKey = Guid.NewGuid().ToString();
}
}
请注意,InitializeInstance接受一个参数,类型为dynamic。现在为了测试这个类,我定义了另一个嵌套在我的主程序类中的类,如下所示:
class Program
{
static void Main(string[] args)
{
TableStorageInitializer<MyClass> x = new TableStorageInitializer<MyClass>();
x.Initialize();
}
private class MyClass
{
public string PartitionKey { get; set; }
public string RowKey { get; set; }
public DateTime Timestamp { get; set; }
}
}
注意:内部类"MyClass"被声明为私有。
现在,如果我运行这段代码,我会在"entity.PartitionKey = Guide.NewGuid().ToString()"这一行上得到一个Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。
然而,有趣的是异常消息说"对象不包含PartitionKey的定义"。
alt text http://img697.imageshack.us/img697/4188/testdl.png
另请注意,如果您将嵌套类的修饰符更改为public,则代码将无问题执行。那么,在幕后到底发生了什么?请参考任何文档 - 当然,如果这些内容有文档记录的话。
IList<string>
可以调用Count
!?)- 你能否详细解释一下?(另外,你上面是不是指的d.Count
?) - BlueRaja - Danny Pflughoeft