第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何重構(gòu)方法

如何重構(gòu)方法

C#
叮當(dāng)貓咪 2022-12-24 14:14:15
我有兩種方法。它們非常相似。我試過使用泛型,但它不適用于 TryParse()    public static int EnterIntengerNumber()    {        while (true)        {            Console.Write("Enter an intenger number: ");            if (int.TryParse(Console.ReadLine(), out int number))            {                return number;            }            else            {                ConsoleError("Incorrect value");            }        }    }    public static double EnterRealNumber()    {        while (true)        {                            Console.Write("Enter a number: ");            if (double.TryParse(Console.ReadLine(), out double number))            {                return number;                                }            else            {                ConsoleError("Incorrect value");            }        }    }我如何組合或重構(gòu)它們?
查看完整描述

3 回答

?
哈士奇WWW

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以創(chuàng)建一個(gè)函數(shù),它接受一個(gè)帶有TryParse參數(shù)和返回值的委托作為通用的。你也可以/將不得不制作字符串來詢問正確的類型。但這可以從這個(gè)例子中得到改進(jìn):


    static void Main(string[] args)

    {

        var myDouble = EnterSomething<double>("a double", double.TryParse);

        var myInt = EnterSomething<int>("an interger", int.TryParse);

        Console.WriteLine(myDouble);

        Console.WriteLine(myInt);


        Console.ReadLine();

    }



    public delegate bool TryParseFunction<Tout>(string input, out Tout output);


    public static Tout EnterSomething<Tout>(string typeName, TryParseFunction<Tout> parser)

    {

        while (true)

        {

            Console.Write("Enter " + typeName + " number: ");

            if (parser(Console.ReadLine(), out Tout number))

            {

                return number;

            }

            else

            {

                Console.WriteLine("Incorrect value");

            }

        }

    }

小的額外解釋:int.TryParse傳遞給 EnterSomething 的不是調(diào)用 TryParse。它實(shí)際上只是“傳遞”函數(shù),以便可以在 EnterSomething 中調(diào)用它。


不使用的原因Func<>是它不支持輸出變量,請(qǐng)看這里的一些例子:Func<T> with out parameter

編輯:我刪除了 Tin 類型參數(shù),因?yàn)闊o論如何輸入都是字符串。


查看完整回答
反對(duì) 回復(fù) 2022-12-24
?
阿晨1998

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊

你可以這樣試試:


public static int EnterIntengerNumber()

{

    return EnterNumber(t => int.TryParse(t, out int v) ? (int?)v : null)

}


public static double EnterRealNumber()

{

    return EnterNumber(t => double.TryParse(t, out double v) ? (double?)v : null)

}


private static T EnterNumber<T>(Func<string, T?> tryParse) where T : struct

{

    while (true)

    {

        Console.Write("Enter a number: ");

        T? result = tryParse(Console.ReadLine());

        if (result.HasValue)

        {

            return result.Value;

        }

        else

        {

            ConsoleError("Incorrect value");

        }

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-12-24
?
回首憶惘然

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊

您可以使用Convert.ChangeType


請(qǐng)記住,您最終將使用裝箱,因此失去了使用泛型的意義。盡管您最終確實(shí)擁有更少的代碼。


    public static T EnterNumber<T> ()

    {

        while (true)

        {

            Console.Write("Enter an " + typeof(T) + " number: ");

            try

            {

                return (T) Convert.ChangeType(Console.ReadLine(), typeof(T));

            }

            catch (FormatException ex)

            {

                Console.Write("Incorrect format" + ex.Message);

            }

        }

    }


查看完整回答
反對(duì) 回復(fù) 2022-12-24
  • 3 回答
  • 0 關(guān)注
  • 130 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)