我有一个linq查询,我选择一个字符串,当然一个字符串可以包含null!
因此,如果有一种方法可以在我的linq查询中抛出异常,如果我检测到空?
我可以使用不允许null的属性来装饰我的类吗?
我想在try catch中包装我的linq查询..一旦检测到null,它就会进入catch ..我可以处理它。
任何帮助真的很感激
修改
这是我的linq查询,目前非常简单..我要扩展它..但这显示你
var localText = from t in items select new Items { item = t.name }
基本上item设置为t.name,t.name是一个字符串,因此它可以为空/ null这是完全合法的,因为它的字符串和字符串可以保持NULL。
因此,如果它返回NULL,那么我需要抛出异常。
实际上,抛出异常是NULL或空是很方便的。
我似乎记得某些属性可以设置在“不接受null”等属性之上。??
修改
嗯,我想我找到了它。http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspx
不允许使用null或字符串,所以我认为它会抛出异常,我已经将它与MVC一起使用但不确定我是否可以将它与标准类一起使用?
ANyone证实了这一点?
答案 0 :(得分:1)
由于字符串为null并不是特别特殊,您可以执行以下操作:
var items = myStrings.Where(s => !string.IsNullOrEmpty(s)).Select(s => new Item(s));
<强>更新强>
如果您正在从XML文件中读取此数据,那么您应该查看LINQ to XML以及use XSD to validate XML文件,而不是在不包含字符串的元素或属性上抛出异常。
答案 1 :(得分:0)
您可以尝试故意生成NullReferenceException:
try
{
//Doesn't change the output, but throws if that string is null.
myStrings.Select(s=>s.ToString());
}
catch(NullReferenceException ex)
{
...
}
您还可以创建一个扩展方法,您可以将其绑定到一个String,如果为null,则抛出该字符串:
public static void ThrowIfNull(this string s, Exception ex)
{
if(s == null) throw ex;
}
...
myString.ThrowIfNull(new NullReferenceException());
答案 2 :(得分:0)