LINQ:当Null返回字符串时抛出异常?一个类的属性?

时间:2011-03-28 21:45:01

标签: linq exception-handling null linq-to-objects notnull

我有一个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证实了这一点?

3 个答案:

答案 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)