我正試圖為提供Parse和ParseExact方法的值實作一個通用方法。我的方法應該適用的型別是值型別(如double,int等)和TimeSpan。
有什么想法可以讓我實作我所描述的內容嗎?
為了更好地理解我的需求,我做了一些代碼,大致描述了我想實作的目標(顯然它并不可行)。Flags只是一些enum。
public Dictionary<。 Flags, object> FlagValues { get; } = new Dictionary<Flags, object>()。
public T GetFlagValue<T> (Flags標志,string formatString = null) where T : struct >。
{
T result = default(T)。
if (FlagValues.TryGetValue(flag, out object flagValueRaw) )
{
if (formatString == null)
{
結果 = T.Parse(flagValueRaw, CultureInfo.InvariantCulture)。
}
else else ?
{
結果 = T.ParseExact(flagValueRaw, formatString, CultureInfo.InvariantCulture)。
}
}
return 結果。
}
uj5u.com熱心網友回復:
//錯誤處理不包括在內 ///由于在所有的Parse中第一個引數是字串,所以ParseExact.。
public Dictionary<Flags, string> FlagValues { get; } = new()。
public T GetFlagValue< T>(Flags flag, string? formatString = null) where T : struct
{
if (FlagValues.TryGetValue(flag, out var flagValueRaw)
{
if (!string.IsNullOrEmpty(formatString))
{
var parseExact = typeof(T)。 GetMethod("ParseExact", new[] { typeof(string) 。typeof(string), typeof(IFormatProvider) })。)
if (parseExact is not null)
return (T)parseExact.Invoke(null, new object? [] { flagValueRaw, formatString, CultureInfo.InvariantCulture }) !。
}
var parse = typeof(T). GetMethod("Parse", new[] { typeof(string) 。typeof(IFormatProvider) })! ;
if (parse is not null)
return (T)parse.Invoke(null, new object? [] { flagValueRaw, CultureInfo.InvariantCulture }) !。
}
return default。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/333676.html
標籤:
