2016-06-07 3 views
3

가능한 경우 메서드를 만들 때 제네릭 형식을 활용하도록 가르칩니다. 제네릭 형식을 사용하는 하나의 메서드에이 두 메서드를 결합 할 수 있습니까?제네릭 형식을 사용하는 메서드를 작성하는 방법을 배우려고합니다.

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); 
} 

답변

2

그것은 Convert.ChangeType()와 방법 같은 것을 구현하는 이지만, 나는 그것이 것이 좋습니다 확실하지 않다 :

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

내가 당신을 위해 몇 가지 코드를 썼다. 이 하나

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); 
    } 

} 

시도

관련 문제