如何在C#中转换为通用参数?

我正在尝试编写一个以强类型方式获取XElement值的泛型方法.这就是我所拥有的:
public static class XElementExtensions
{
    public static XElement GetElement(this XElement xElement,string elementName)
    {
        // Calls xElement.Element(elementName) and returns that xElement (with some validation).
    }

    public static TElementType GetElementValue<TElementType>(this XElement xElement,string elementName)
    {
        XElement element = GetElement(xElement,elementName);
        try
        {
            return (TElementType)((object) element.Value); // First attempt.
        }
        catch (InvalidCastException originalException)
        {
            string exceptionMessage = string.Format("Cannot cast element value '{0}' to type '{1}'.",element.Value,typeof(TElementType).Name);
            throw new InvalidCastException(exceptionMessage,originalException);
        }
    }
}

正如您在GetElementValue的第一个尝试行中看到的那样,我正试图从字符串 – >对象 – > TElementType.不幸的是,这不适用于整数测试用例.运行以下测试时:

[Test]
public void GetElementValueShouldReturnValueOfIntegerElementAsInteger()
{
    const int expectedValue = 5;
    const string elementName = "intProp";
    var xElement = new XElement("name");
    var integerElement = new XElement(elementName) { Value = expectedValue.ToString() };
    xElement.Add(integerElement);

    int value = XElementExtensions.GetElementValue<int>(xElement,elementName);

    Assert.AreEqual(expectedValue,value,"Expected integer value was not returned from element.");
}

GetElementValue< int>时出现以下异常叫做:

system.invalidCastException : Cannot cast element value ‘5’ to type ‘Int32’.

我是否必须分别处理每个铸造案例(或至少是数字案例)?

解决方法

你也可以试试 Convert.ChangeType
Convert.ChangeType(element.Value,typeof(TElementType))

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...