2012-08-24 17 views
6

मेरे पास स्ट्रिंग्स के लिए निम्न ("true").As<bool>(false) करने में सक्षम होने के लिए निम्न एक्सटेंशन विधि हैं, विशेष रूप से बूलियन के लिए यह कुछ कस्टम रूपांतरण करने के लिए AsBool() का उपयोग करेगा। किसी भी तरह से मैं टी से बूल और इसके विपरीत नहीं डाला जा सकता। मुझे यह निम्नलिखित कोड का उपयोग करके काम कर रहा है, हालांकि यह थोड़ा अधिक लगता है।कास्ट टी टू बूल और इसके विपरीत

यह इस लाइन के बारे में बताया गया है:
(T)Convert.ChangeType(AsBool(value, Convert.ToBoolean(fallbackValue)), typeof(T))
मैं नहीं बल्कि निम्न का उपयोग होगा, लेकिन यह संकलन नहीं होगा:
(T)AsBool(value, (bool)fallbackValue), typeof(T))

मैं कुछ याद आ रही हूँ या यह जाने के लिए सबसे छोटा रास्ता है ?

public static T As<T>(this string value) 
    { 
     return As<T>(value, default(T)); 
    } 
    public static T As<T>(this string value, T fallbackValue) 
    { 
     if (typeof(T) == typeof(bool)) 
     { 
      return (T)Convert.ChangeType(AsBool(value, 
               Convert.ToBoolean(fallbackValue)), 
               typeof(T)); 
     } 
     T result = default(T); 
     if (String.IsNullOrEmpty(value)) 
      return fallbackValue; 
     try 
     { 
      var underlyingType = Nullable.GetUnderlyingType(typeof(T)); 
      if (underlyingType == null) 
       result = (T)Convert.ChangeType(value, typeof(T)); 
      else if (underlyingType == typeof(bool)) 
       result = (T)Convert.ChangeType(AsBool(value, 
               Convert.ToBoolean(fallbackValue)), 
               typeof(T)); 
      else 
       result = (T)Convert.ChangeType(value, underlyingType); 
     } 
     finally { } 
     return result; 
    } 
    public static bool AsBool(this string value) 
    { 
     return AsBool(value, false); 
    } 
    public static bool AsBool(this string value, bool fallbackValue) 
    { 
     if (String.IsNullOrEmpty(value)) 
      return fallbackValue; 
     switch (value.ToLower()) 
     { 
      case "1": 
      case "t": 
      case "true": 
       return true; 
      case "0": 
      case "f": 
      case "false": 
       return false; 
      default: 
       return fallbackValue; 
     } 
    } 

उत्तर

5

आप T को object और फिर इसे डाली कर सकते हैं:

if (typeof(T) == typeof(bool)) 
{ 
    return (T)(object)AsBool(value, Convert.ToBoolean(fallbackValue)); 
} 
+3

एक बहुत क्लीनर इस तरह :) लग रहा है। यही कारण है कि मैं सीधे नहीं डाला जा सकता? – Silvermind

संबंधित मुद्दे