我正在努力教会自己在可能的情况下创建方法时利用泛型类型。 是否可以将这两种方法组合成一种使用泛型类型的方法?
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);
}
答案 0 :(得分: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?;
}
}
}
答案 1 :(得分: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);
}
}