Próbuję utworzyć ogólną metodę, która zwróci predykat w celu znalezienia elementów w dokumencie XML.Czy istnieje sposób wykonywania tego rodzaju rzutowania w predykacie C#
Zasadniczo coś takiego:
private static Func<XElement, bool> GetPredicate<T>(Criterion criterion)
{
switch (criterion.CriteriaOperator)
{
case CriteriaOperator.Equal:
return x => (T)x.Attribute(criterion.PropertyName) ==
(T)(criterion.PropertyValue);
case CriteriaOperator.GreaterThan:
return x => (T)x.Attribute(criterion.PropertyName) >
(T)(criterion.PropertyValue);
case CriteriaOperator.GreaterThanOrEqual:
return x => (T)x.Attribute(criterion.PropertyName) >=
(T)(criterion.PropertyValue);
case CriteriaOperator.LessThan:
return x => (T)x.Attribute(criterion.PropertyName) <
(T)(criterion.PropertyValue);
case CriteriaOperator.LessThanOrEqual:
return x => (T)x.Attribute(criterion.PropertyName) <=
(T)(criterion.PropertyValue);
case CriteriaOperator.NotEqual:
return x => (T)x.Attribute(criterion.PropertyName) !=
(T)(criterion.PropertyValue);
default:
throw new ArgumentException("Criteria Operator not supported.");
}
}
Jedyną rzeczą jest to, że nie kompiluje. Problem polega na (T)x.Attribute(criterion.PropertyName)
części, gdzie kompilator wskazuje:
Nie można rzucać wyrażenia typu „System.Xml.Linq.XAttribute” do rodzaju
Obecnie mam dwie metody „T”, które są identyczne, z wyjątkiem tego, że jeden rzutuje na podwójny, a drugi na dziesiętny. Naprawdę chciałbym nie mieć tego rodzaju duplikacji.
co jest 'Criterion'? –
@ DanielA.White: Jest niestandardową klasą zawierającą dane dla wyrażenia boolowskiego. Nazwa_właściwości jest ciągiem, który reprezentuje nazwę atrybutu w węźle xml, do którego pasuję, a właściwość PropertyValue jest obiektem o wartości, której szukam. –