你好心愛的社區:DSystem.NullReferenceException與選擇子句
現在我正在對我的第一個大項目,我有點卡住了。 我想驗證一些輸入。
因此我使用這個功能:
public static Validatable<string> RequiredOr(this Validatable<string> that, Func<Validatable<string>, bool> func)
{
return that.DoEvaluate && !(func(that) || that.Value != null)
? that.Error(ML.Get("Validation", "IsRequired"))
: that;
}
對於正常驗證我使用這個:
public Validatable<TProperty> Validate<TProperty>(
Expression<Func<TEntity, TProperty>> expr)
{
return new Validatable<TProperty>(
new ErrorTrackerWrapper(ErrorTracker, expr.Body), expr.Compile()(Value));
}
而這部分稱之爲 「RequiredOr」 功能:
var header = from name in v.Validate(it => it.Name).Required().MaxLength(Constants.String.NameLength)
from startDate in v.Validate(it => it.StartDate).Required().After(DateTime.Today)
from endDate in v.Validate(it => it.EndDate).Required().After(DateTime.Today)
from endTime in v.Validate(it => it.EndTime).BlockErrors().Required().ReplaceIfInvalid(new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 30, 0))
from requestedCurrency in v.Validate(it => it.RequestedCurrency).Required()
from language1 in v.Validate(it => it.Language1).Required()
from language2 in v.Validate(it => it.Language2)
from language3 in v.Validate(it => it.Language3)
from hasMoreInformation in v.Validate(it => it.HasMoreInformation)
// TODOJP: If "hasMoreInformation" is true, then "moreInformationEmail" has to be required.
from moreInformationEmail in v.Validate(it => it.MoreInformationEmail).IsEmail()//.RequiredOr(p => !hasMoreInformation)
from isAnonymous in v.Validate(it => it.IsAnonymous)
select new AnnouncementHeader(
currentUser,
type,
name,
startDate,
endDate.SetTime(new Time(endTime.Hour, endTime.Minute)),
isAnonymous,
infoField,
requestedCurrency,
language1,
language2,
language3,
hasMoreInformation,
moreInformationEmail);
到目前爲止,這是正確的,但一些如何,它告訴我在「RequiredOr」部分中的「hasMoreInformation」是一個NullReferenceException。
我能夠將錯誤追溯回「RequiredOr」函數。
我想檢查「HasMoreInformation」是否爲true,然後將該字段設置爲「必需」或不。
我希望你的傢伙明白我想告訴你什麼。 並且非常感謝您的幫助。
請發佈Validate()的代碼,也請發佈整個linq查詢。現在很難猜測發生了什麼。標題說select子句有問題,但是你沒有包含select子句。 – phoog 2012-02-23 15:41:58
我更新了代碼。 錯誤不在select子句中 - 對不起 - 它在「moreInformationEmail」的「RequiredOr」部分。 (看看評論部分) – KampfFussel 2012-02-23 15:50:38
對不起,我還是很困惑。 'Validate()'返回一個IEnumerable嗎?還是它返回一些其他類型的查詢理解語法? – phoog 2012-02-23 16:00:36