国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C#學習筆記】類型轉(zhuǎn)換

這篇具有很好參考價值的文章主要介紹了【C#學習筆記】類型轉(zhuǎn)換。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【C#學習筆記】類型轉(zhuǎn)換,C#學習筆記,c#,學習,筆記


類型轉(zhuǎn)換

我們簡單地將值類型分為5種:整數(shù)型,浮點型,布爾型,字符型,再加上一個本屬于引用類型的字符串。

由于 C# 是在編譯時靜態(tài)類型化的,因此變量在聲明后就無法再次聲明,或無法分配另一種類型的值,除非該類型可以隱式轉(zhuǎn)換為變量的類型。

  • 隱式轉(zhuǎn)換:由于這種轉(zhuǎn)換始終會成功且不會導致數(shù)據(jù)丟失,因此無需使用任何特殊語法。 示例包括從較小整數(shù)類型到較大整數(shù)類型的轉(zhuǎn)換以及從派生類到基類的轉(zhuǎn)換。

  • 顯式轉(zhuǎn)換(強制轉(zhuǎn)換) :必須使用強制轉(zhuǎn)換表達式,才能執(zhí)行顯式轉(zhuǎn)換。 在轉(zhuǎn)換中可能丟失信息時或在出于其他原因轉(zhuǎn)換可能不成功時,必須進行強制轉(zhuǎn)換。 典型的示例包括從數(shù)值到精度較低或范圍較小的類型的轉(zhuǎn)換和從基類實例到派生類的轉(zhuǎn)換。

上述2種轉(zhuǎn)換就不過多贅述,隱式轉(zhuǎn)換和顯式轉(zhuǎn)換都是十分基礎(chǔ)的

  • 用戶定義的轉(zhuǎn)換:用戶定義的轉(zhuǎn)換是使用特殊方法執(zhí)行,這些方法可定義為在沒有基類和派生類關(guān)系的自定義類型之間啟用顯式轉(zhuǎn)換和隱式轉(zhuǎn)換。 有關(guān)詳細信息,請參閱用戶定義轉(zhuǎn)換運算符。

  • 使用幫助程序類進行轉(zhuǎn)換:若要在非兼容類型(如整數(shù)和 System.DateTime 對象,或十六進制字符串和字節(jié)數(shù)組)之間轉(zhuǎn)換,可使用 System.BitConverter 類、System.Convert 類和內(nèi)置數(shù)值類型的 Parse 方法(如 Int32.Parse)。 有關(guān)詳細信息,請參見如何將字節(jié)數(shù)組轉(zhuǎn)換為 int、如何將字符串轉(zhuǎn)換為數(shù)字和如何在十六進制字符串與數(shù)值類型之間轉(zhuǎn)換。

字符轉(zhuǎn)數(shù)字

GetNumericValue

GetNumericValue是char類型提供的方法,用于將字符轉(zhuǎn)換為double值的數(shù)字,失敗則返回-1.0

令我不解的是,字符類型只能保存0~9之間的數(shù)字,不可能保存浮點數(shù),不知為何返回值是double類型的。

public int a = 123;
char tmp;
tmp = a.ToString()[0];
char.GetNumericValue(tmp);// 使用char提供的GetNumericValue方法可以將char轉(zhuǎn)為double的1

Convert.ToInt32

Convert類型的轉(zhuǎn)換存在大量重載,基本可以應對所有轉(zhuǎn)換情況

public int a = 123;
char tmp;
tmp = a.ToString()[0];
int b =Convert.ToInt32(tmp); // 使用ToInt32會將字符1轉(zhuǎn)為ASCII碼49

隱式轉(zhuǎn)換計算

int a = 123;
char tmp;
tmp = a.ToString()[0];
int t = tmp - '0'; // 使用char類型進行計算,最后的結(jié)果類型是整數(shù)型,輸出結(jié)果是ASCII碼相減
// 49 - 48 = 1

字符串轉(zhuǎn)數(shù)字

字符串轉(zhuǎn)數(shù)字是一種比較萬能的方法,因為object提供了ToString方法,能夠讓任何值類型都轉(zhuǎn)化為字符串。

Parse 或 TryParse 方法

Parse 和 TryParse 方法會忽略字符串開頭和末尾的空格,但所有其他字符都必須是組成合適數(shù)值類型(int、long、ulong、float、decimal 等)的字符。

char tmp = '1';
int a = Int32.Parse("  -105  "); // a = -105,無視空格
a = Int32.Parse(tmp.ToString()); // a = 1
bool b = Int32.TryParse("200", out a); // a = 200,方法本身返回布爾值,b = true

錯誤用法:

Int32.Parse("  -1.05  "); //浮點型不能用整型的Parse方法,應該為float.Parse或其他浮點型的Parse方法
Int32.Parse("  1 05  "); // 數(shù)字之間不能有空格
Int32.Parse(" 10e1 "); // 不接受科學計數(shù)法,

字節(jié)數(shù)組轉(zhuǎn)整數(shù)

由于一般的整數(shù)類型Int的類型是System.Int32。而一個byte代表8位,所以一個Int32=4個字節(jié),因此如果要字節(jié)轉(zhuǎn)整數(shù),一般需要四個四個地轉(zhuǎn)變。

使用BitConverter類來操作字節(jié)數(shù)組

byte[] bytes = { 0, 0, 0, 25 };
// 此處是根據(jù)操作系統(tǒng)來決定字符順序的
// 不同計算機的字節(jié)體系不同,可能高八位,可能低八位
if (BitConverter.IsLittleEndian)
    Array.Reverse(bytes);

int i = BitConverter.ToInt32(bytes, 0);
Console.WriteLine("int: {0}", i);
// Output: int: 25

as,is強制類型轉(zhuǎn)換

is

is 運算符檢查表達式結(jié)果的運行時類型是否與給定類型兼容。 is 運算符還會對照某個模式測試表達式結(jié)果。

具有類型測試 is 運算符的表達式具有以下形式

E is T
E is not T

其中E是返回一個值的表達式,T是類型或類型參數(shù)的名稱。 E 不得為匿名方法或 Lambda 表達式。

簡單的來說,is判斷true對應四種判斷

  • ET 類型時
  • 當為T的派生類,子類,繼承類(包括類和接口)時。
  • ET的可為空類型T?,且E不為空時
  • ET的轉(zhuǎn)換涉及裝箱拆箱時

讓我們分別看看這四種對應的判斷:

ET 類型時:

int a = 0;
if (a is int) // true
{
    Debug.Log(a);
}
if (a is long) // false
{
    Debug.Log(a);
}

當為T的派生類,子類,繼承類(包括類和接口)時:

class Parent
{

}
interface IDonothing
{

}
class child : Parent, IDonothing
{

}
void Start()
{
    child c = new child();
    int a = 0;
    if (c is Parent) // true
    {
        Debug.Log(0);
    }
    if (c is IDonothing) // true
    {
        Debug.Log(1);
    }
}

ET的可為空類型T?,且E不為空時

int? a = null;
if (a is int) // a為int?但為空,false
{
    Debug.Log(1);
}
if (a is int?) // a為int?但為空,false
{
    Debug.Log(2);
}
int b = 1;
if (b is int) // b為int,true
{
    Debug.Log(3);
}
if (b is int?) // b為int,true
{
    Debug.Log(4);
}
a = 1;
if (a is int) // a為int?且不為空,true
{
    Debug.Log(5);
}
if (a is int?) // a為int?且不為空,true
{
    Debug.Log(6);
}

ET時涉及裝箱拆箱時

object O;
int a = 1;
O = a;
if (O is int) // true
{
    Debug.Log(1);
}
if (O is int?) // true
{
    Debug.Log(2);
}
if (a is object) // true,畢竟object是所有類的父類,此時符合第二條E為T的派生類
{
    Debug.Log(3);
}

在檢測類型時,is類型會對E類型進行T類型轉(zhuǎn)換來判斷是否為T類型,但不對E的本身的類型造成影響。但is類型不會考慮用戶自定義的類型轉(zhuǎn)換。


as

as運算符將表達式結(jié)果顯式轉(zhuǎn)換為給定的引用或可以為null值的類型。 如果無法進行轉(zhuǎn)換,則as運算符返回null。 與強制轉(zhuǎn)換表達式 不同,as運算符永遠不會引發(fā)異常。

E as T

使用as運算符,與下述三目運算符是一樣的:

E is T ? (T)(E) : (T)null

使用as進行轉(zhuǎn)換,其中類型T必須是可為null值的類型
as 運算符僅考慮引用類型、可以為 null、裝箱和取消裝箱轉(zhuǎn)換。 不能使用 as運算符執(zhí)行用戶定義的轉(zhuǎn)換。 為此,請使用強制轉(zhuǎn)換表達式。

object o = new object() as string;
o = "1";
Debug.Log(o.GetType()); // string類型

用戶定義的轉(zhuǎn)換

implicit operatorexplicit operator 關(guān)鍵字分別用于定義隱式轉(zhuǎn)換或顯式轉(zhuǎn)換。 定義轉(zhuǎn)換的類型必須是該轉(zhuǎn)換的源類型或目標類型。 可用兩種類型中的任何一種類型來定義兩種用戶定義類型之間的轉(zhuǎn)換。

using System;
public readonly struct Digit
{
    private readonly byte digit;
    public Digit(byte digit)
    {
        if (digit > 9)
        {
            throw new ArgumentOutOfRangeException(nameof(digit), "Digit cannot be greater than nine.");
        }
        this.digit = digit;
    }
    public static implicit operator byte(Digit d) => d.digit;
    public static explicit operator Digit(byte b) => new Digit(b);

    public override string ToString() => $"{digit}";
}

public static class UserDefinedConversions
{
    public static void Main()
    {
        var d = new Digit(7);

        byte number = d;
        Console.WriteLine(number);  // output: 7

        Digit digit = (Digit)number;
        Console.WriteLine(digit);  // output: 7
    }
}

使用自定義類型可以定義隱式轉(zhuǎn)換和顯示轉(zhuǎn)換,但是要注意類型匹配。文章來源地址http://www.zghlxwxcb.cn/news/detail-631804.html

到了這里,關(guān)于【C#學習筆記】類型轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 【C#學習筆記】引用類型(2)

    【C#學習筆記】引用類型(2)

    支持 .NET 類層次結(jié)構(gòu)中的所有類,并為派生類提供低級別服務。 這是所有 .NET 類的最終基類;它是類型層次結(jié)構(gòu)的根。 簡單來說,它是萬能的,它是所有類型的父類。因為.NET 中的所有類都派生自 Object,因此 Object 類中定義的每個方法都可用于系統(tǒng)中的所有對象。 在 Object

    2024年02月14日
    瀏覽(20)
  • C#學習筆記--復雜數(shù)據(jù)類型、函數(shù)和結(jié)構(gòu)體

    C#學習筆記--復雜數(shù)據(jù)類型、函數(shù)和結(jié)構(gòu)體

    特點:多個數(shù)據(jù)變量地一個集合體,可以自己命名 種類:枚舉、數(shù)組和結(jié)構(gòu)體 枚舉:整型常量的集合 數(shù)組:任意變量類型的順序存儲的數(shù)據(jù)集合 結(jié)構(gòu)體:任意變量類型的數(shù)據(jù)組合成的數(shù)據(jù)塊 枚舉 : 枚舉可以方便表示對象的各種狀態(tài),本質(zhì)還是一種變量。 例如我們可以用

    2024年02月08日
    瀏覽(24)
  • Python學習筆記(2)--字面量,注釋,變量,數(shù)據(jù)類型,數(shù)據(jù)類型轉(zhuǎn)換,標識符,運算符

    Python學習筆記(2)--字面量,注釋,變量,數(shù)據(jù)類型,數(shù)據(jù)類型轉(zhuǎn)換,標識符,運算符

    傳送門==B站黑馬python入門教程 1.字面量 字面量 : 代碼中被固定寫的值 python常用的6種數(shù)據(jù)類型為 數(shù)字,字符串,列表,元組,集合,字典 目前基礎(chǔ)部分學習 字符串,整數(shù),浮點數(shù) 即可 字符串 :(文本),由任意數(shù)量的 字符 (示例:中文/英文/各類符號/數(shù)組)組成; 在 python 中,字符串需要用雙

    2024年02月11日
    瀏覽(97)
  • python教程 入門學習筆記 第6天 數(shù)據(jù)類型轉(zhuǎn)換 字符串轉(zhuǎn)換成數(shù)值 數(shù)值之間互轉(zhuǎn) 其它類型轉(zhuǎn)字符串

    s1=\\\"188\\\" #字符串 ns1=int(s1) #轉(zhuǎn)換成整型數(shù)值 print(ns1+8) #打印數(shù)值結(jié)果 s1=\\\"3.14\\\" #字符串 ns1=float(s1) #轉(zhuǎn)換成浮點型數(shù)值 print(ns1+3) #打印數(shù)值結(jié)果(數(shù)值結(jié)果為6.140000000000001,出現(xiàn)誤差,后面講解決辦法) print(type(ns1)) #獲取新數(shù)值的數(shù)據(jù)類型屬性 z1=78 nz1=float(z1) print(nz1) #打印結(jié)果

    2024年02月14日
    瀏覽(45)
  • Qt-OpenCV學習筆記--基本函數(shù)操作--cv::convertTo(圖像類型轉(zhuǎn)換)

    Qt-OpenCV學習筆記--基本函數(shù)操作--cv::convertTo(圖像類型轉(zhuǎn)換)

    不是所有格式的Mat型數(shù)據(jù)都能被使用。 目前OpenCV主要只支持單通道和3通道的圖像,并且此時要求其深度為8bit和16bit無符號(即CV_16U),所以其他一些數(shù)據(jù)類型是不支持的,比如說float型等。 如果Mat類型數(shù)據(jù)的深度和通道數(shù)不滿足上面的要求,則需要使用convertTo()函數(shù)和cvtColor(

    2024年02月04日
    瀏覽(95)
  • C#類型轉(zhuǎn)換

    C#類型轉(zhuǎn)換

    大體分為三個大類型:整型(其中又分為有符號整型、無符號整型)、浮點型、特殊類型 注意:浮點數(shù)在初始化時要在值后加上后綴,雙精度浮點數(shù)decimal的后綴為“M”、單精度浮點數(shù)double和float的后綴為“f”。 作用:將高精度(大范圍)轉(zhuǎn)為低精度(小范圍) 語法:大變

    2024年02月14日
    瀏覽(15)
  • 【C#】通用類型轉(zhuǎn)換

    數(shù)據(jù)類型轉(zhuǎn)換就是將數(shù)據(jù)(變量、數(shù)值、表達式的結(jié)果等)從一種類型轉(zhuǎn)換為另一種類型。 自動類型轉(zhuǎn)換就是編譯器默默地、隱式地、偷偷地進行的數(shù)據(jù)類型轉(zhuǎn)換,這種轉(zhuǎn)換不需要程序員干預,會自動發(fā)生。 例如: 敲黑板: 轉(zhuǎn)換前后的類型必須相兼容 例如:int和double 隱式

    2024年02月11日
    瀏覽(20)
  • C#數(shù)據(jù)類型轉(zhuǎn)換

    C#數(shù)據(jù)類型轉(zhuǎn)換

    目錄 1.常用的數(shù)據(jù)類型: ?編輯1.1別名概念例子: 輸出結(jié)果: 2.數(shù)值類型之間的相互轉(zhuǎn)換: ?2.1舉例: ?編輯輸出結(jié)果: 用GetType來獲取數(shù)據(jù)類型的時候,就是指向System.Byte和System.Char這個類,相同其它的也是指向不同的類 ?實數(shù)值類型包括byte、short、int、long、fload、double等,根據(jù)這

    2024年02月12日
    瀏覽(12)
  • C# 數(shù)據(jù)類型與類型轉(zhuǎn)換:包含教程與示例

    C# 中的變量必須是指定的數(shù)據(jù)類型: 數(shù)據(jù)類型指定了變量值的大小和類型。 使用正確的數(shù)據(jù)類型對應于相應的變量是重要的;這樣可以避免錯誤、節(jié)省時間和內(nèi)存,還會使您的代碼更易于維護和閱讀。最常見的數(shù)據(jù)類型有: 整數(shù)類型: int :4 字節(jié),范圍從 -2,147,483,648 到 2,

    2024年01月18日
    瀏覽(25)
  • C#中的數(shù)據(jù)類型轉(zhuǎn)換

    C#中的數(shù)據(jù)類型轉(zhuǎn)換

    開發(fā)工具與關(guān)鍵技術(shù): MVC 撰寫時間:2021/8/18 下面我們來講C#中數(shù)據(jù)類型的轉(zhuǎn)換; 1.C#中的數(shù)據(jù)類型轉(zhuǎn)換分為兩種:隱式類型轉(zhuǎn)換以及顯式類型轉(zhuǎn)換; (1)隱式類型轉(zhuǎn)換:將存儲范圍小的數(shù)據(jù)類型直接轉(zhuǎn)換為存儲范圍大的數(shù)據(jù)類型。 例如: 隱式轉(zhuǎn)換大致分為以下幾種: 隱式

    2023年04月08日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包