LINQ: выбрасывать исключение, когда Null возвращается в строку?Атрибут на класс? - PullRequest
0 голосов
/ 29 марта 2011

У меня есть запрос linq, который я выбираю в строку, конечно, строка может содержать нуль!

Так что, если есть способ, я могу вызвать исключение в моем запросе linq, если я обнаружу ноль?

Могу ли я украсить свой класс атрибутом, который не позволяет ему разрешить null?

Я бы хотел заключить свой запрос linq в попытку catch ... и сразу же как nullобнаружен, тогда он будет входить в улов ... и я могу справиться с этим.

Любая помощь действительно ценится

РЕДАКТИРОВАТЬ

Вот мой запрос linq,это довольно просто в настоящее время .. я собираюсь расширить его .. но это показывает, что

var localText = from t in items select new Items { item = t.name }

в основном элемент установлен в t.name, t.name является строкой, поэтому он может быть пустым / нольэто совершенно законно, так как строка и строки могут содержать NULL.

Так что, если он возвращает NULL, тогда мне нужно сгенерировать исключение.

На самом деле было бы удобно иметь возможность генерировать исключениеNULL или пусто.

Кажется, я помню какие-то атрибуты, которые могутбыть установленным поверх свойств, которые говорят "Не принимать ноль" и т. д. ??

РЕДАКТИРОВАТЬ

Эмм, я думаю, что нашел это .. http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.requiredattribute.aspx

не допускает пустых значений или строк, поэтому я предполагаю, что оно выдает исключение, я использовал это с MVC, но не уверен, что могу использовать его со стандартным классом?

Кто-нибудь подтверждает это?

Ответы [ 3 ]

1 голос
/ 29 марта 2011

Поскольку строка с нулевым значением не является особенной, вы можете сделать что-то вроде:

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

ОБНОВЛЕНИЕ

Если вы читаете эти данные изXML-файл, тогда вам следует изучить LINQ to XML , а также использовать XSD для проверки XML-файла, а не создавать исключения для элементов или атрибутов, которые не содержат строк.

0 голосов
/ 29 марта 2011

Почему вы хотите выбросить исключение в этом случае? Это звучит как выбросить ребенка с водой из ванны для чего-то, что не должно происходить в первую очередь.

Если вы просто хотите обнаружить , что есть нулевые / пустые элементы:

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 };
0 голосов
/ 29 марта 2011

Вы можете попытаться преднамеренно создать исключение 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());
...