我正在构建一个扩展Enum.Parse
概念的函数
所以我写了以下内容:
public static T GetEnumFromString<T>(string value, T defaultValue) where T : Enum
{
if (string.IsNullOrEmpty(value)) return defaultValue;
foreach (T item in Enum.GetValues(typeof(T)))
{
if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item;
}
return defaultValue;
}
Run Code Online (Sandbox Code Playgroud)
我得到一个Error Constraint不能是特殊类System.Enum
.
很公平,但是有一个解决方法允许Generic Enum,或者我将不得不模仿该Parse
函数并将类型作为属性传递,这会迫使您的代码出现丑陋的拳击要求.
编辑以下所有建议都非常感谢,谢谢.
已经解决了(我已离开循环以保持不区分大小写 - 我在解析XML时使用它)
public static class EnumUtils
{
public static T ParseEnum<T>(string value, T defaultValue) where T : struct, IConvertible
{
if (!typeof(T).IsEnum) throw new ArgumentException("T must be an enumerated type");
if (string.IsNullOrEmpty(value)) return …
Run Code Online (Sandbox Code Playgroud) 在.NET中,String.Empty
和之间的区别是什么""
,它们是可互换的,还是存在一些基本的参考或本地化问题,这些问题String.Empty
将确保不是问题?
我需要做一个LINQ2DataSet查询,在多个字段上进行连接(如
var result = from x in entity
join y in entity2
on x.field1 = y.field1
and
x.field2 = y.field2
Run Code Online (Sandbox Code Playgroud)
我还找到了一个合适的解决方案(我可以在where子句中添加额外的约束,但这远不是一个合适的解决方案,或者使用这个解决方案,但假设是一个等值连接).
LINQ是否可以在单个连接中加入多个字段?
编辑
var result = from x in entity
join y in entity2
on new { x.field1, x.field2 } equals new { y.field1, y.field2 }
Run Code Online (Sandbox Code Playgroud)
我引用的解决方案是假设上面的等值连接.
进一步编辑
为了回答我最初的例子是等值的批评,我确实承认,我目前的要求是等同于我,我已经采用了上面引用的解决方案.
但是,我试图了解LINQ应该采用/应该采用的可能性和最佳实践.我很快就需要使用表ID进行日期范围查询连接,并且只是预先解决了这个问题,看起来我必须在where子句中添加日期范围.
一如既往地感谢所有建议和意见
为什么我必须runat="server"
在所有ASP.NET控件上指定它是必需属性,并且server
是我对ASP.NET知识有限的唯一选项,如果我不使用它,我会收到错误?
我明白我可以选择在我的HTML标签上使用它,并且我理解客户端/服务器范例以及它实际指定的内容.
它是一个冗余标记,可能只是由控件作为ASP.NET控件隐含,还是有潜在的原因?
我们的编译时间非常慢,在双核2GHz,2G Ram机器上可能需要20多分钟.
这很大程度上是由于我们的解决方案的规模已经发展到70多个项目,以及VSS,当你拥有大量文件时,它本身就是瓶颈.(不幸的是,交换VSS不是一个选项,所以我不希望它下降到VSS bash)
我们正在考虑合并项目.我们还在寻找多种解决方案,以便为应用程序的每个元素实现更大的关注点分离和更快的编译时间.我可以看到这将成为一个DLL地狱,因为我们试图保持同步.
我很想知道其他团队如何处理这个扩展问题,当你的代码库达到一个临界质量时你会怎么做,你正在看着状态栏传递编译消息的一半时间.
更新 我忽略了这是一个C#解决方案.感谢所有的C++建议,但是我已经有几年了,因为我不得不担心标题.
编辑:
到目前为止有很好的建议(不是说下面没有其他好的建议,只是帮助了什么)
仍然没有通过编译扯皮,但每一点都有帮助.
Orion在评论中确实提到仿制药也可能有一个游戏.从我的测试来看,似乎确实有最小的性能损失,但不足以确定 - 由于光盘活动,编译时间可能不一致.由于时间限制,我的测试没有包含与实时系统中出现的一样多的泛型或代码,因此可能会累积.我不会避免在它们应该被使用的地方使用泛型,只是为了编译时的性能
替代方法
我们正在测试在新解决方案中构建应用程序新领域的实践,根据需要导入最新的dll,当我们对它们感到满意时,将它们集成到更大的解决方案中.
我们也可以通过创建临时解决方案来对现有代码执行相同的操作,这些解决方案仅封装我们需要处理的区域,并在重新集成代码后将它们丢弃.我们需要权衡重新整合这些代码所需的时间与我们获得的时间,因为没有Rip Van Winkle喜欢在开发过程中快速重新编译的经验.
我听说Generics的Java实现不如C#实现那么好.因为语法看起来很相似,那么Java实现的不合标准是什么,还是宗教观点呢?
测试输入字符串的最有效方法是,它是否包含数值(或相反的非数字)?我想我可以使用Double.Parse
或正则表达式(见下文),但我想知道是否有一些内置的方法来做到这一点,如javascript NaN()
或IsNumeric()
(是VB,我不记得?).
public static bool IsNumeric(this string value)
{
return Regex.IsMatch(value, "^\\d+$");
}
Run Code Online (Sandbox Code Playgroud) 在RoR的安装文档中,它提到在Windows上运行Ruby on Rails存在许多限制,在某些情况下,整个库不起作用.
这些限制有多糟糕,我是否总是默认使用Linux来编写/运行RoR,Iron Ruby是否可以解决这些限制或者它们是操作系统本身的核心?
编辑感谢您在Linux上安装和运行的答案,但我真的想了解安装文档中引用的功能限制,以及非工作库 - 我试图找到评论的链接,但它是在我安装msi软件包时,安装中引用了我的想法
编辑 感谢最近对IronRuby的引用,它肯定是一个值得关注的项目,因为它显然是一种.NET语言,如果它符合承诺,它将是非常宝贵的.然而,最终,在我的情况下,我只是咬了一口子并安装了一个Ubuntu服务器.
<偏见>我应该在几年前完成它</ bias>
Cypher查询似乎不支持LIKE.
是否有任何其他构造可以执行相同的任务?
例如:
start n = node(*) where n.Name LIKE('%SUBSTRING%') return n.Name, n;
Run Code Online (Sandbox Code Playgroud)