我有一个Linq查询,我选择它作为字符串,当然字符串可以包含null!
那么,如果我检测到null,有没有办法在我的Linq查询中抛出异常?
我可以用一个不允许null的属性来修饰我的类吗?
我想将我的Linq查询包装在try catch中,一旦检测到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中使用过它,但我不确定是否可以在标准类中使用它。
发布于 2011-03-29 06:02:29
由于字符串为null并不是特别特殊,您可以这样做:
var items = myStrings.Where(s => !string.IsNullOrEmpty(s)).Select(s => new Item(s));更新
如果从XML文件中读取此数据,则应该查看LINQ to XML,并对XML文件执行use XSD to validate操作,而不是对不包含字符串的元素或属性抛出异常。
发布于 2011-03-29 05:49:23
您可以尝试有意地生成一个NullReferenceException:
try
{
//Doesn't change the output, but throws if that string is null.
myStrings.Select(s=>s.ToString());
}
catch(NullReferenceException ex)
{
...
}您还可以创建一个扩展方法,它可以附加到一个字符串上,如果为空,将抛出该字符串:
public static void ThrowIfNull(this string s, Exception ex)
{
if(s == null) throw ex;
}
...
myString.ThrowIfNull(new NullReferenceException());发布于 2011-03-29 05:59:13
为什么要在这种情况下抛出异常?这听起来像是为了一开始就不应该发生的事情而把婴儿和洗手水一起扔掉。
如果您只想检测是否有null/空的项:
int nullCount= items.Count( x=> string.IsNullOrEmpty(x.name));如果你想过滤掉它们:
var localText = from t in items where !string.IsNullOrEmpty(t.name) select new Items { item = t.name };https://stackoverflow.com/questions/5465450
复制相似问题