Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试学习如何编写使用泛型类型的方法_C#_Generics - Fatal编程技术网

C# 尝试学习如何编写使用泛型类型的方法

C# 尝试学习如何编写使用泛型类型的方法,c#,generics,C#,Generics,我试图教会自己在创建方法时尽可能利用泛型类型。 是否可以将这两个方法组合成一个使用泛型类型的方法 private Decimal? NullDec(string val) { return String.IsNullOrEmpty(val) ? (Decimal?)null : Convert.ToDecimal(val); } private Int32? NullInt(string val) { return String.IsNullOrEmpty(val) ? (In

我试图教会自己在创建方法时尽可能利用泛型类型。 是否可以将这两个方法组合成一个使用泛型类型的方法

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);
}
可以使用实现类似于您的方法的东西,但我不确定它是否可取:

使用系统;
名称空间示例
{
内部课程计划
{
公共静态void Main(字符串[]args)
{
var@int=Foo(“3”);
var@double=Foo(“3.14”);
var dateTime=Foo(“2016年2月1日”);
十进制变量=Foo(“3.1”);
WriteLine($“{@int}是一个{@int.GetType()}”);
WriteLine($“{@double}是一个{@double.GetType()}”);
WriteLine($“{dateTime}是一个{dateTime.GetType()}”);
WriteLine($“{@decimal}是一个{@decimal.GetType()}”);
Console.ReadLine();
}
公共静态T?Foo(字符串val),其中T:struct,IConvertible
{
返回字符串.IsNullOrEmpty(val)?null:将.ChangeType(val,typeof(T))转换为T?;
}
}
}

我为你写了一些代码

试试这个

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

}
公共类空值测试
{
公共T Null(字符串val,Func Func)
{
返回函数(val);
}
}
公共类TestConvert
{
public int?ConvertToInt32Null(字符串val)
{
if(string.IsNullOrWhiteSpace(val))
返回null;
返回Convert.ToInt32(val);
}
公共十进制?ConvertToDecimalNull(字符串val)
{
if(string.IsNullOrWhiteSpace(val))
返回null;
返回Convert.ToDecimal(val);
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var test=新的NullTest();
var converter=newtestconvert();
int?t1=test.Null(“2”,converter.ConvertToInt32Null);
十进制数?t2=test.Null(“,converter.ConvertToDecimalNull);
}
}
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);
    }

}