Возможно, самое близкое, что вы можете сделать, это
static bool IntegerFunction<T>(T value) where T: struct
Не уверен, что вы могли бы сделать следующее
static bool IntegerFunction<T>(T value) where T: struct, IComparable
, IFormattable, IConvertible, IComparable<T>, IEquatable<T>
Для чего-то такого конкретного, почему бы просто не перегружать для каждого тип, список настолько короткий и, возможно, меньше памяти.
OK - нашел ответ, который искал.
это класс XmlConvert.
var el_date = (XmlElement)el_root.SelectSingleNode("./DateVal");
//WANTED: el_date.Value = 2010-02-18 01:02:03 (as a DateTime Object)
var val_date = XmlConvert.ToDateTime(el_date.InnerText);
//ACTUAL: el_date.InnerText="2010-02-18T01:02:03"
var el_duration = (XmlElement)el_root.SelectSingleNode("./TimeVal");
//WANTED: el_date.Value = 10 hours, 5 minutes, 3 seconds (as a TimeSpan Object)
var val_duration = XmlConvert.ToTimeSpan(el_duration.InnerText);
//ACTUAL: el_date.InnerText="PT10H5M3S"
Ответ Марка был верным с точки зрения чтения в целом строго типизированном классе, но в этом случае я хотел прочитать только один строго типизированный элемент / узел.
Вам нужно сделать два шага:
1) Возьмите файл XML-схемы и запустите его через утилиту xsd.exe
(которая поставляется с Windows SDK - она находится в C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\
или по аналогичному пути. Это может превратить XSD файл в класс C#:
xsd /c yourfile.xsd
В результате вы получите файл yourfile.cs
, который содержит класс, представляющий эту XML схему.
2) Теперь, вооруженный этим классом C#, вы должны быть в состоянии просто десериализовать XML-файл в экземпляр вашего нового объекта:
XmlSerializer ser = new XmlSerializer(typeof(foo));
string filename = Path.Combine(FilePath, "SimpleFields.xml");
foo myFoo = ser.Deserialize(new FileStream(filename, FileMode.Open)) as foo;
if (myFoo != null)
{
// do whatever you want with your "foo"
}
Вот так все просто! :-)