繁体   English   中英

如何在C#中编写泛型函数?

[英]How to write a generic function in c#?

我正在尝试在c#中编写一个通用函数,该函数试图根据类型解析字符串。

这是我尝试过的

    public static T convertString<T>(string raw)
    {
        if( typeof(T) == DateTime ){
            DateTime final;
            DateTime.TryParseExact(raw, "yyyy-mm-dd hh:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out final);
            return final;
         }

        if( typeof(T) == int ){
            int final;
            Int32.TryParse(raw, out final);
            return final;
        }

    }

如何更正此功能才能正常工作?

您可以尝试这样的事情:

public static T ConvertFromString<T>(string raw)
{
    return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(raw);
}

// Usage
var date = ConvertFromString<DateTime>("2015/01/01");
var number = ConvertFromString<int>("2015");

编辑:支持TryConvert

否则,您可以创建一个函数来尝试转换输入字符串:

public static bool TryConvertFromString<T>(string raw, out T result)
{
    result = default(T);
    var converter = TypeDescriptor.GetConverter(typeof (T));
    if (!converter.IsValid(raw)) return false;

    result = (T)converter.ConvertFromString(raw);
    return true;
}

// Usage
DateTime result;
if (!TryConvertFromString<DateTime>("this is not a date", out result))
{

}

如果类型U实现IConvertible,您甚至可以更通用,而不依赖字符串参数-这意味着您必须指定两个类型参数:

 public static T ConvertValue<T,U>(U value) where U : IConvertible
    {
        return (T)Convert.ChangeType(value, typeof(T));
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM