mpe*_*pen 4 c# dictionary anonymous-types
我写了这个函数
private string BuildXPathQuery(string prefix = "descendant::", string tag = "*", object attrs = null)
{
StringBuilder sb = new StringBuilder(prefix);
sb.Append(tag);
if (attrs != null)
foreach (var a in attrs.GetType().GetProperties())
sb.Append(string.Format("[@{0}='{1}']", a.Name, a.GetValue(attrs, null)));
return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)
所以,而不是写作
BuildXPathQuery(attrs: new Dictionary<string,string> {{"attr","value"}});
Run Code Online (Sandbox Code Playgroud)
我可以写
BuildXPathQuery(attrs: new {attr=value});
Run Code Online (Sandbox Code Playgroud)
但这有什么缺点吗?
它使用反射可能比普通类型访问慢。另一个缺点是,通过查看方法签名,您会看到一个对象,对于此方法的最终使用者而言,它可能并不总是很明显它必须放在那里,因为对象实际上可以是任何东西:
当智能感知显示:
BuildXPathQuery(object attrs);
Run Code Online (Sandbox Code Playgroud)
你真的必须在这里猜测,除非它有很好的文档(例如 ASP.NET MVC HTML 助手使用类似的方法在 DOM 元素上构建 HTML 属性)。
这是一种非常 Rubyist 的方法,我喜欢它:-)(可选参数和哈希表)
归档时间: |
|
查看次数: |
1175 次 |
最近记录: |