Mik*_*ark 5 .net c# polymorphism parsing
我试图使用泛型类型参数制作通用解析器,但我无法掌握100%的概念
private bool TryParse<T>(XElement element, string attributeName, out T value) where T : struct
{
if (element.Attribute(attributeName) != null && !string.IsNullOrEmpty(element.Attribute(attributeName).Value))
{
string valueString = element.Attribute(attributeName).Value;
if (typeof(T) == typeof(int))
{
int valueInt;
if (int.TryParse(valueString, out valueInt))
{
value = valueInt;
return true;
}
}
else if (typeof(T) == typeof(bool))
{
bool valueBool;
if (bool.TryParse(valueString, out valueBool))
{
value = valueBool;
return true;
}
}
else
{
value = valueString;
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
正如您可能猜到的,代码无法编译,因为我无法将int | bool | string转换为T(例如,value = valueInt).感谢您的反馈,我甚至可能无法做到这一点.使用.NET 3.5
鉴于您只是编写了一个很大的 if/then 组合,我认为您最好只使用一堆重载:
public static class Parser
{
private static string TryParseCommon(XElement element, string attributeName)
{
if (element.Attribute(attributeName) != null && !string.IsNullOrEmpty(element.Attribute(attributeName).Value))
{
return element.Attribute(attributeName).Value;
}
return null;
}
public static bool TryParse(XElement element, string attributeName, out string value)
{
value = TryParseCommon(element, attributeName);
return true;
}
public static bool TryParse(XElement element, string attributeName, out int value)
{
return int.TryParse(TryParseCommon(element, attributeName), out value);
}
public static bool TryParse(XElement element, string attributeName, out bool value)
{
return bool.TryParse(TryParseCommon(element, attributeName), out value);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
345 次 |
| 最近记录: |