2009-08-26 4 views
0

Я уверен, что об этом спрашивали раньше, но мое прочтение поисковых запросов по подобным вопросам не дало ответа.Тип вывода в методе расширения

Я устал проверять, имеет ли значение Nullable значение. Почему я не могу назначить myNullable<int> yourAge на int myAge и получить исключение, если yourAge имеет значение NULL? Кроме того, если какой-либо из наших проклятых возрастов имеет значение null, почему я должен выполнить проверку fxning, чтобы избежать назначения «deafault» в fxning SqlParameter? Я даже не могу сделать цивилизованный mySqlParm = myAge.HasValue ? myAge.Value : DBNull.Value.

Какая точка определения типов с нулевым значением? Нам еще нужно использовать `-1 'для pkId, чтобы избежать ужасного Null. Мы даже не можем добавить свои собственные мантоды расширения, потому что «бла-бла».

Почему даже fxning беспокоит параметры вообще? Почему бы нам просто не сохранить все даты как fxning varchar (10)?

+2

Ого, ты сердишься –

+0

Что ваш вопрос? Что делает Nullable связано с базой данных? –

+1

Возможно, «тип вывода в методе расширения» вдохновил вас написать это, но это не правильный заголовок для этого сообщения, как есть. –

ответ

6

Почему я не могу назначить myNullable<int> yourAge к int myAge и получить исключение, если yourAge является недействительным?

Конечно, вы можете. Просто используйте свойство Value без проверки первого:

int myAge = yourAge.Value; 

Если yourAge содержит нуль, вы получите исключение.

+0

Спасибо @ Guffa, мне никогда не приходило в голову, будучи ослепленным другими сложностями. – ProfK

3

Возможно, вы хотите сделать что-то подобное?

public static object GetDatabaseValueFromNullableType<T>(this T? value) 
    where T: struct 
{ 
    return value.HasValue ? (object) value.Value : DBNull.Value; 
} 

, а затем вы можете использовать его так:

//this is just a test I wrote but you get the idea 
[Test] 
public void NullableTest() 
{ 
    int? something = null; 
    var value = something.GetDatabaseValueFromNullableType(); 
    Assert.IsTrue(value == DBNull.Value); 
} 
+0

+1 для тестового примера. Вы заслуживаете щедрости, но я могу это сделать только на следующем вопросе. Будьте на связи. :-) – ProfK

Смежные вопросы