2016-06-07 17 views
3

Ich versuche, mich selbst zu lehren, Hebel generische Typen bei der Erstellung von Methoden, wenn möglich. Ist es möglich, diese beiden Methoden zu einer Methode zu kombinieren, die einen generischen Typ verwendet?Versuchen zu lernen, wie Methoden schreiben, die generischen Typ verwenden

private Decimal? NullDec(string val) 
{ 
    return String.IsNullOrEmpty(val) ? (Decimal?)null : Convert.ToDecimal(val); 
} 

private Int32? NullInt(string val) 
{ 
    return String.IsNullOrEmpty(val) ? (Int32?)null : Convert.ToInt32(val); 
} 

Antwort

2

Es ist möglich mit Convert.ChangeType() so etwas wie Ihre Methoden zu implementieren, aber ich bin nicht sicher, dass es ratsam:

using System; 

namespace Example 
{ 
    internal class Program 
    { 
     public static void Main(string[] args) 
     { 
      var @int = Foo<int>("3"); 
      var @double = Foo<double>("3.14"); 
      var dateTime = Foo<DateTime>("01/02/2016"); 
      var @decimal = Foo<decimal>("3.1"); 

      Console.WriteLine($"{@int} is a {@int.GetType()}"); 
      Console.WriteLine($"{@double} is a {@double.GetType()}"); 
      Console.WriteLine($"{dateTime} is a {dateTime.GetType()}"); 
      Console.WriteLine($"{@decimal} is a {@decimal.GetType()}"); 

      Console.ReadLine(); 
     } 

     public static T? Foo<T>(string val) where T : struct, IConvertible 
     { 
      return string.IsNullOrEmpty(val) ? null : Convert.ChangeType(val, typeof(T)) as T?; 
     } 
    } 
} 
0

ich für Sie einige Code geschrieben haben.

Versuchen Sie dieses

public class NullTest 
{ 
    public T Null<T>(string val, Func<string, T> func) 
    { 
     return func(val); 
    } 
} 

public class TestConvert 
{ 
    public int? ConvertToInt32Null(string val) 
    { 
     if (string.IsNullOrWhiteSpace(val)) 
      return null; 
     return Convert.ToInt32(val); 
    } 

    public decimal? ConvertToDecimalNull(string val) 
    { 
     if (string.IsNullOrWhiteSpace(val)) 
      return null; 
     return Convert.ToDecimal(val); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var test = new NullTest(); 
     var converter = new TestConvert(); 

     int? t1 = test.Null("2", converter.ConvertToInt32Null); 
     decimal? t2 = test.Null("", converter.ConvertToDecimalNull); 
    } 

} 
Verwandte Themen