在.net代码中删除文字字符串

时间:2009-03-18 15:26:46

标签: c# .net

你在代码中删除(帮助/扩展方法)字符串文字做了什么?

e.g。我有各种各样的nhibernate搜索条件代码。

Expression.Eq("Status", LoginStatus.LoggedIn),

“状态”是在案例中用作字符串的实体对象的属性。

更新:在这种情况下,主要原因是启用重构。如果我编写一个反映对象并获取值的辅助方法,将使上面的表达式强类型化。

5 个答案:

答案 0 :(得分:2)

这就是“资源”和“设置”的用途。您可以通过在Visual Studio中右键单击项目并单击“属性”,然后转到“资源”或“设置”选项卡来找到它。

对于不会经常更改的预构建资源,请使用资源。对于您希望配置的内容,请使用“设置”,因为它会自动生成App.config的配置块。如果您不想使用默认值,则仍需要手动复制和粘贴这些值。

两者的好处是VS将构建一个很好的静态类,其中包含可在整个代码中使用的属性。只要您继续使用向导,VS就会动态维护类和资源。

答案 1 :(得分:1)

我通常会将它们声明为常量,或者,如果我有相关字符串组,我将创建一个枚举。

无论哪种方式,至少他们都附有一个描述性名称(而不是使用“魔术字符串”),并且它们的使用始终是一致的。

答案 2 :(得分:1)

过去,我使用CodeRush(或您最喜欢的重构工具)转换为类中的const字符串,然后将所述const字符串移动为它们所适用的实体类的公共成员。

这里的真正答案是,如果你想在重构时让你的代码变得不那么脆弱,那就是退出字符串业务,并使用Linq 4 /到NHibernate,但是你必须研究它是否是完整性足以满足您的目的。

答案 3 :(得分:1)

意识到我可以用Expression树的方式做到这一点。使用Code作为数据!

像这样的东西

  protected IList<T> _FindByProperty<TResult>(Expression<Func<T, TResult>> expression, TResult value)  
   {  
   return _FindByProperty((expression.Body as MemberExpression).Member.Name, value);  
  } 

IList<User> costCenters = _FindByProperty( user=> user.Name, "name"); 

积分 http://suryagaddipati.wordpress.com/2009/03/14/code-as-data-in-c-taking-advantage-of-expression-trees/

这与expression-trees标记中的很多问题有关。

答案 4 :(得分:0)

我使用与Cherian类似的方法。我从FluentNhibernate的ReflectionHelper中得到了我的想法。

原则是使用表达式树然后你可以放入一个x =&gt; x.Status表达式。该方法将属性名称返回为字符串。

事实上,你也可以只使用FluentNHibernate?但是,我不知道他们的查询模型是否作为映射接口均匀扩展......