0

我有一个 Linq 查询,我正在选择一个字符串,当然字符串可以包含 null!

那么,如果我检测到空值,有没有办法可以在我的 Linq 查询中引发异常?

我可以用一个不允许它为空的属性来装饰我的类吗?

我想将我的 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 一起使用,但我不确定是否可以将它与标准类一起使用。

4

3 回答 3

1

由于字符串为 null 并不是特别特殊,因此您可以执行以下操作:

var items = myStrings.Where(s => !string.IsNullOrEmpty(s)).Select(s => new Item(s));

更新

如果您从 XML 文件中读取此数据,那么您应该查看LINQ to XML,并使用 XSD 来验证XML 文件,而不是在不包含字符串的元素或属性上引发异常。

于 2011-03-28T22:02:29.213 回答
0

为什么要在这种情况下抛出异常?这听起来像是为了一开始不应该发生的事情而把婴儿和洗澡水一起扔出去。

如果您只想检测有空/空项目:

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 };
于 2011-03-28T21:59:13.020 回答
0

您可以尝试故意生成 NullReferenceException:

try
{
    //Doesn't change the output, but throws if that string is null.
    myStrings.Select(s=>s.ToString());
}
catch(NullReferenceException ex)
{
   ...
}

您还可以创建一个扩展方法,您可以附加到一个如果为 null 时会抛出的字符串:

public static void ThrowIfNull(this string s, Exception ex)
{
    if(s == null) throw ex;
}

...

myString.ThrowIfNull(new NullReferenceException());
于 2011-03-28T21:49:23.450 回答