0
A
回答
3
public class GenericsManager
{
public static T ChangeType<T>(object data)
{
T value = default(T);
if (typeof(T).IsGenericType &&
typeof(T).GetGenericTypeDefinition().Equals(typeof(Nullable<>)))
{
value = (T)Convert.ChangeType(data, Nullable.GetUnderlyingType(typeof(T)));
}
else
{
if (data != null)
{
value = (T)Convert.ChangeType(data, typeof(T));
}
}
return value;
}
}
沒有大量有用的在這裏,但我想你可以利用這一點,並驗證了結果不等於該類型的默認值。
但是,tryparse要好得多,並且要達到您所要做的。
3
1
您可以使用正則表達式來確定它們可能是什麼類型。雖然這將是一個有點麻煩,如果你需要一個int和一個字節之間者區分如果該值小於255
0
您可以在TryParse和正則表達式之間混用。這不是一個漂亮的代碼,但速度很快,並且您可以在任何地方使用該方法。
有關於布爾類型的問題。 或可以表示布爾值,但也可以是類型字節。我解析了true和false文本值,但是關於您的業務規則,您應該決定什麼是最適合您的。
public static Type getTypeFromString(String s)
{
if (s.Length == 1)
if (new Regex(@"[^0-9]").IsMatch(s)) return Type.GetType("System.Char");
else
return Type.GetType("System.Byte", true, true);
if (new Regex(@"^(\+|-)?\d+$").IsMatch(s))
{
Decimal d;
if (Decimal.TryParse(s, out d))
{
if (d <= Byte.MaxValue && d >= Byte.MinValue) return Type.GetType("System.Byte", true, true);
if (d <= UInt16.MaxValue && d >= UInt16.MinValue) return Type.GetType("System.UInt16", true, true);
if (d <= UInt32.MaxValue && d >= UInt32.MinValue) return Type.GetType("System.UInt32", true, true);
if (d <= UInt64.MaxValue && d >= UInt64.MinValue) return Type.GetType("System.UInt64", true, true);
if (d <= Decimal.MaxValue && d >= Decimal.MinValue) return Type.GetType("System.Decimal", true, true);
}
}
if (new Regex(@"^(\+|-)?\d+[" + NumberFormatInfo.CurrentInfo.CurrencyDecimalSeparator + @"]\d*$").IsMatch(s))
{
Double d;
if (Double.TryParse(s, out d))
{
if (d <= Single.MaxValue && d >= Single.MinValue) return Type.GetType("System.Single", true, true);
if (d <= Double.MaxValue && d >= Double.MinValue) return Type.GetType("System.Double", true, true);
}
}
if(s.Equals("true",StringComparison.InvariantCultureIgnoreCase) || s.Equals("false",StringComparison.InvariantCultureIgnoreCase))
return Type.GetType("System.Boolean", true, true);
DateTime dateTime;
if(DateTime.TryParse(s, out dateTime))
return Type.GetType("System.DateTime", true, true);
return Type.GetType("System.String", true, true);
}
相關問題
- 1. 我如何可以驗證字符串是否包含特定字符範圍
- 2. 如何將數據類型轉換爲可讀的字符串
- 3. 如何強制類型轉換爲字符串以BLOB格式
- 4. 是否可以將字符串轉換爲List數據類型?
- 5. PHP - 是否可以從字符串的值轉換爲類型?
- 6. Javascript:可以將字符串轉換爲/轉換爲類型常量嗎?
- 7. 如何將特定字符串轉換爲特定的int
- 8. cocoa:如何將整數類型轉換爲字符串類型?
- 9. 如何將字符串轉換爲自定義數據類型
- 10. 如何將自定義類型轉換爲字符串?
- 11. 使用轉換將字符串轉換爲自定義類型
- 12. 字符串轉換類型類類型
- 13. 將字符串轉換爲字符串的泛型類型
- 14. 將drawable轉換爲特定字符串
- 15. 將LinqToExcel.RowNoHeader類型轉換爲字符串
- 16. 將MYSQL_ROW類型轉換爲字符串
- 17. 類型轉換爲unicode字符串?
- 18. 將字符串轉換爲'Date'類型
- 19. 將字符串轉換爲類型「LuaFunction」
- 20. 將字符串轉換爲類型UTCTime
- 21. 將字符串類型轉換爲int
- 22. 將字符串值轉換爲類型
- 23. 指定值轉換爲字符類型的字符串
- 24. Python-如何驗證字符串是否以特定字符串結尾?
- 25. 如何確保特定的字符串可以轉換爲WPF中的SolidBrush?
- 26. Javascript驗證字符串可以是日期還是特定字符串
- 27. 如何將類型轉換爲可以在vb .net中編譯的字符串?
- 28. 如何將字符串轉換爲運行時確定的可空類型?
- 29. 檢查字符串是否可以轉換爲C#中的給定類型
- 30. 如何將字符串類型轉換爲任務型
是否有一個特別的原因,您不想使用TryParse?這是最簡單,最強大的方式,也可能是最快的方法之一。 – 2009-06-24 10:11:00