C#匿名类型似乎非常有用,但我很快就会遇到一个应用程序,我希望设置匿名类型的属性,并且我也希望能够使用属性。
我的应用程序是一个通用存储过程和SQL执行程序,它可以自动将C#属性映射到SQL输入和输出参数,并使用适当的SqlDbType
(例如string
映射到NVARCHAR(MAX)
等)。
e.g。
int PersonID = 1234;
var output = new { GivenName = (string)null, FamilyName = (string)null };
sqlExecutor.ExecSQL("SELECT @GivenName = GivenName, @FamilyName = FamilyName FROM People WHERE PersonID = @PersonID", new { PersonID }, output);
string GivenName = output.GivenName;
string FamilyName = output.FamilyName;
该方法有效(对于存储过程,我只是使用上面的原始SQL来使我更清楚我想要做的事情)。 但是,我只能通过使用“糟糕的想法”来完成上述形式的工作。在匿名输出对象中设置支持字段(使用用户Alex对How to set value for property of an anonymous object?的回答中的代码)。
我无法想到为这类问题创建这样一个易于使用的轻量级界面的任何其他方法。很容易看出属性在这里也很有用,例如修改参数映射。
那么为什么匿名类型限于没有设置而没有属性?考虑到基本的匿名类型功能已经在语言中,这些看起来好像它们在合理的用例中是有用的,并且好像它们将是容易包含的功能。