最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中的Converter的具體應(yīng)用

 更新時間:2025年07月27日 10:50:06   作者:CoderIsArt  
C#中的Converter提供了一種靈活的類型轉(zhuǎn)換機制,本文詳細介紹了Converter的基本概念、使用場景,具有一定的參考價值,感興趣的可以了解一下

Converter是C#中一個非常有用的概念,主要用于類型轉(zhuǎn)換。它通常以委托或接口的形式出現(xiàn),允許開發(fā)者定義如何將一種類型轉(zhuǎn)換為另一種類型。下面我將詳細介紹Converter的概念、使用場景,并以布爾型轉(zhuǎn)換為例展示具體應(yīng)用。

Converter的基本概念

1. Converter委托

在C#中,Converter<TInput, TOutput>是一個泛型委托,定義在System命名空間中。它的簽名如下:

public delegate TOutput Converter<in TInput, out TOutput>(TInput input);

這個委托表示一個方法,該方法將對象從TInput類型轉(zhuǎn)換為TOutput類型。

2. 使用場景

Converter常用于:

  • 集合類型轉(zhuǎn)換
  • 數(shù)據(jù)格式化
  • 類型適配
  • 值轉(zhuǎn)換(如字符串到布爾值)

布爾型轉(zhuǎn)換示例

示例1:簡單的字符串到布爾值轉(zhuǎn)換

// 定義轉(zhuǎn)換器
Converter<string, bool> stringToBoolConverter = s => 
    s.Equals("true", StringComparison.OrdinalIgnoreCase) || 
    s.Equals("1", StringComparison.OrdinalIgnoreCase) || 
    s.Equals("yes", StringComparison.OrdinalIgnoreCase);

// 使用轉(zhuǎn)換器
string input = "Yes";
bool result = stringToBoolConverter(input);
Console.WriteLine(result); // 輸出: True

示例2:使用Array.ConvertAll方法轉(zhuǎn)換數(shù)組

string[] stringBools = { "true", "False", "1", "0", "yes", "no" };

// 使用Array.ConvertAll和自定義轉(zhuǎn)換器
bool[] boolArray = Array.ConvertAll(stringBools, stringToBoolConverter);

foreach (bool b in boolArray)
{
    Console.Write(b + " "); // 輸出: True False True False True False
}

示例3:自定義轉(zhuǎn)換器類

public class BoolConverter : IConverter<string, bool>
{
    public bool Convert(string input)
    {
        return input switch
        {
            "true" or "1" or "yes" => true,
            "false" or "0" or "no" => false,
            _ => throw new ArgumentException("Invalid boolean string")
        };
    }
}

// 使用
var converter = new BoolConverter();
bool value = converter.Convert("yes"); // 返回true

其他常見轉(zhuǎn)換場景

示例4:數(shù)字到布爾值轉(zhuǎn)換

Converter<int, bool> intToBoolConverter = i => i != 0;

Console.WriteLine(intToBoolConverter(0));    // False
Console.WriteLine(intToBoolConverter(1));    // True
Console.WriteLine(intToBoolConverter(-5));   // True

示例5:對象到布爾值轉(zhuǎn)換(處理可能為null的情況)

Converter<object, bool> objectToBoolConverter = o => 
    o != null && (o.ToString().Equals("true", StringComparison.OrdinalIgnoreCase) || 
                 o.ToString() == "1");

Console.WriteLine(objectToBoolConverter(null));         // False
Console.WriteLine(objectToBoolConverter("TRUE"));       // True
Console.WriteLine(objectToBoolConverter(1));            // True

示例6:使用內(nèi)置的Boolean.Parse和Boolean.TryParse

// 直接使用內(nèi)置方法
Converter<string, bool> builtInConverter = bool.Parse;

try
{
    Console.WriteLine(builtInConverter("True"));  // True
    Console.WriteLine(builtInConverter("abc"));  // 拋出FormatException
}
catch (FormatException)
{
    Console.WriteLine("Invalid boolean format");
}

// 更安全的TryParse版本
string input = "abc";
if (bool.TryParse(input, out bool result))
{
    Console.WriteLine(result);
}
else
{
    Console.WriteLine("Conversion failed");
}

高級應(yīng)用場景

示例7:在LINQ中使用轉(zhuǎn)換器

List<string> stringList = new List<string> { "true", "false", "1", "0" };

// 使用ConvertAll方法
List<bool> boolList = stringList.ConvertAll(stringToBoolConverter);

// 或者使用LINQ Select
List<bool> boolList2 = stringList.Select(s => stringToBoolConverter(s)).ToList();

示例8:可配置的轉(zhuǎn)換器

public class ConfigurableBoolConverter
{
    private readonly string[] _trueValues;
    private readonly string[] _falseValues;

    public ConfigurableBoolConverter(string[] trueValues, string[] falseValues)
    {
        _trueValues = trueValues;
        _falseValues = falseValues;
    }

    public bool Convert(string input)
    {
        if (_trueValues.Contains(input, StringComparer.OrdinalIgnoreCase))
            return true;
        if (_falseValues.Contains(input, StringComparer.OrdinalIgnoreCase))
            return false;
        throw new ArgumentException($"Cannot convert '{input}' to boolean");
    }
}

// 使用
var converter = new ConfigurableBoolConverter(
    trueValues: new[] { "on", "yes", "1" },
    falseValues: new[] { "off", "no", "0" });

Console.WriteLine(converter.Convert("on"));   // True
Console.WriteLine(converter.Convert("off"));  // False

總結(jié)

C#中的Converter模式提供了靈活的類型轉(zhuǎn)換機制,特別適用于:

  • 需要將一種類型集合轉(zhuǎn)換為另一種類型集合時
  • 處理用戶輸入或外部數(shù)據(jù)源的不一致格式時
  • 需要在不同系統(tǒng)或組件間轉(zhuǎn)換數(shù)據(jù)格式時
  • 需要可配置或可擴展的轉(zhuǎn)換邏輯時

對于布爾型轉(zhuǎn)換,Converter特別有用,因為布爾值在不同上下文中可能有多種表示形式(如"true"/"false"、"yes"/"no"、1/0等)。通過使用Converter,可以集中管理這些轉(zhuǎn)換邏輯,提高代碼的可維護性和一致性。

到此這篇關(guān)于C#中的Converter的具體應(yīng)用的文章就介紹到這了,更多相關(guān)C# Converter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解c# 中的DateTime

    詳解c# 中的DateTime

    這篇文章主要介紹了c# 中的DateTime的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#隱藏主窗口的方法小結(jié)

    C#隱藏主窗口的方法小結(jié)

    這篇文章主要介紹了C#隱藏主窗口的方法,列舉了C#隱藏窗口的三種常用方法,涉及C#窗體操作的常用技巧,需要的朋友可以參考下
    2016-03-03
  • C# 委托(跨窗體操作控件)實例流程講解

    C# 委托(跨窗體操作控件)實例流程講解

    今天研究了一下,在C#里面卻是可以不用自定義消息這么復(fù)雜的方法來實現(xiàn)跨窗體調(diào)用控件,C#有更好的辦法就是委托。
    2013-03-03
  • C#連接Oracle數(shù)據(jù)庫的多種方法總結(jié)

    C#連接Oracle數(shù)據(jù)庫的多種方法總結(jié)

    最近小項目當(dāng)中要使用C#來連接Oracle數(shù)據(jù)庫來完成系統(tǒng)的操作,這篇文章主要給大家介紹了關(guān)于C#連接Oracle數(shù)據(jù)庫的多種方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-04-04
  • C#實現(xiàn)把dgv里的數(shù)據(jù)完整的復(fù)制到一張內(nèi)存表的方法

    C#實現(xiàn)把dgv里的數(shù)據(jù)完整的復(fù)制到一張內(nèi)存表的方法

    這篇文章主要介紹了C#實現(xiàn)把dgv里的數(shù)據(jù)完整的復(fù)制到一張內(nèi)存表的方法,需要的朋友可以參考下
    2014-08-08
  • Unity實現(xiàn)圖片水印生成

    Unity實現(xiàn)圖片水印生成

    這篇文章主要為大家詳細介紹了Unity實現(xiàn)圖片水印生成,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • WinForm中變Enter鍵為Tab鍵實現(xiàn)焦點轉(zhuǎn)移的方法

    WinForm中變Enter鍵為Tab鍵實現(xiàn)焦點轉(zhuǎn)移的方法

    這篇文章主要介紹了WinForm中變Enter鍵為Tab鍵實現(xiàn)焦點轉(zhuǎn)移的方法,主要通過一個ControlTools類來實現(xiàn)該功能,需要的朋友可以參考下
    2014-08-08
  • C#中DataSet,DataTable,DataView的區(qū)別與用法

    C#中DataSet,DataTable,DataView的區(qū)別與用法

    這篇文章介紹了C#中DataSet,DataTable,DataView的區(qū)別與用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • C# 程序集和反射詳解

    C# 程序集和反射詳解

    本文主要介紹了C# 程序集和反射的相關(guān)知識。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • C#中一個方法返回多個值的實現(xiàn)方法小結(jié)

    C#中一個方法返回多個值的實現(xiàn)方法小結(jié)

    通常一個方法只能返回一個值,但是如果在某些時候,我們想要返回多個值,例如某個方法將一個浮點數(shù)分割成一個整數(shù)和一個小數(shù)返回,因此本文給大家介紹了C#中一個方法返回多個值的實現(xiàn)方法及示例代碼,需要的朋友可以參考下
    2024-05-05

最新評論

南昌县| 洛川县| 泰安市| 宁强县| 南平市| 怀柔区| 门源| 建瓯市| 高雄市| 清新县| 杨浦区| 清镇市| 溆浦县| 中卫市| 方山县| 延吉市| 新沂市| 贵溪市| 右玉县| 湖南省| 古丈县| 酒泉市| 揭阳市| 南涧| 化德县| 上思县| 昭觉县| 珲春市| 揭西县| 肇州县| 小金县| 舒城县| 合作市| 鸡东县| 和林格尔县| 兰坪| 渭源县| 吴忠市| 黔西| 乌苏市| 钦州市|