1樓:
這是對c#型別轉換不熟悉造成的!
強制轉換與平穩轉換是指將記憶體執行型別與當前指標型別之間的轉換。
如:int i =4;
long p = (long)4;
執行中的是數值型,是可以進行強制轉換的。一般在程式中都是父型別與子類似之間的轉換。
如果b類繼承於a類,
a p = new b();
p是指標型別a,而實現執行時,p指向的堆中卻是一個b型別,所以我們稱執行時型別,這兩者之間可以使用強制轉換的。如:b q = (b)p;。但是,如果是
a p = new a();b q = (b)p;是錯誤的。只能是是執行態型別的不同變化。
所以你可以認為強制轉換是一種執行態型別的不同角色扮演——執行態子類似可以扮演繼承的父型別或是介面型別。但父型別不能轉換為子型別,轉換本身取決於執行態的型別。
as typeof()是一種平穩的轉換,與強制轉換是一樣的,只不過不能轉換時自動轉為null(vb中為nothing)。 經常見到這種形式: datarow[0] as string,等等。
如果datarow[0]執行型別是int,如果直接使用(string)datarow[0]會出現錯誤[如果存在值,其實是利用了tostring轉換的],如果null的情況下,(string)null肯定是會報錯的,如果(int)datarow[0]中datarow[0]執行態是string的話,一定會報錯,這個是因為string比較特殊。因為所以的物件都繼承了object的tostring方法。除了string外,只能是執行態型別的不同角色扮演。
但是用as 則會直十平穩了!
datarow[0] as string,如果是null時,並不會報錯。會變成null的string結構。所以這兩個方法的轉換並非是解析級的轉換。
iconvert介面實現解析級別的轉換,如convert.toint32("123")這種就是可以將其他的資料進行轉換,而不在意你執行時記憶體中的型別。如:
int.parse("123")其實它是convert.toint32來實現的!
它才是只真的型別之間的轉換。將一個型別轉換為另一個型別。而強制轉換與平穩轉換可以認為只是轉的了指標型別,並不能真正轉堆中的型別,而convert則是直接將堆中的型別轉換。
string是一種特殊的型別轉換,因為都繼承了object的tostring介面,所以它可以實現轉換,如果沒有重寫tostring()方法,則一般轉換結果為this.gettype().tostring()的結果。
2樓:匿名使用者
c#裡就不用這種型別轉換方式,常用的有以下幾種int i_temp = 4;
string str = i_temp.tostring();
str = convert.tostring(i_temp);
其中tostring是最常用的方式,而且所有型別物件都有這個方法。
3樓:匿名使用者
string s=4;
這樣可以嗎? 有時候c#會自動轉換 有時候不會我沒具體測試剛才實驗了下
s=4;是不行的; 但是s="asd"+4;就可以 也就是說雖然s有特定型別,但是4其實是範型別 呵呵 奇妙
4樓:
我實驗過了,這樣寫無法轉換,vs報錯,string s=(4).tostring();可以的。
5樓:匿名使用者
不可以,兩種資料型別並不相容。
想轉換可以用如下方法:
int a=4;
string s=a.tostring();
或者簡寫成這樣也可以:
string s=(4).tostring();
6樓:衡修
貌似不能。
string s = 4.tostring();
或者直接
string s = "4";
j**a中的那些資料型別可以進行強制轉換?string和int如何進行強制轉換?
j**a中如何把string型別轉換成int型別
7樓:匿名使用者
有兩種方法,根據例子說明:
string -> int
s="12345";
int i;
第一種方法:i=integer.parseint(s);
第二種方法:i=integer.valueof(s).intvalue();
第一種方法:i=integer.parseint(s);//直接使用靜態方法,不會產生多餘的物件,但會丟擲異常
第二種方法:i=integer.valueof(s).
intvalue();//integer.valueof(s) 相當於 new integer(integer.parseint(s)),也會拋異常,但會多產生一個物件
8樓:匿名使用者
幹嘛要把年份用字串儲存呢。直接用int不就行了。非要這麼做,那就是用int的包裝類。把你上面**的i換成(integer.parseint(i))。
9樓:匿名使用者
你可以直接輸入int型別,用int型別接就可以了, int i=imput.nextint();,然後在判斷就行了,就不用轉型了
10樓:匿名使用者
int year = integer.valueof(i);//string 轉 int
反過來string.valueof(int)就能int轉string
11樓:創作者
integer.parse(string x)
12樓:久居深海唯魚相伴
int a;
string i;
a=integer.parseint(i);
13樓:匿名使用者
string i=imput.nextline();改為int i=imput.next();不好嗎。。
凡是能被4整除的年份就是閏年嗎,凡是能被4整除的年份就是閏年對還是錯
不是,普通年中能夠被4整除的年份是閏年,而世紀年中能夠被400整除的才是閏年,閏年分為普通閏年和世紀閏年。普通閏年是指能被4整除但不能被100整除的年份為普通閏年。如2004年就是閏年,1900年不是閏年 世紀閏年是指能被400整除的為世紀閏年。如2000年是世紀閏年,1900年不是世紀閏年 閏年共...
小米4,聯通4g的能改為移動4g嗎
你好,wp酷七網團隊為你解答 不能的,硬體限制,不支援 滿意請採納,不懂請追問。能 移動 電信 聯通 升級188號碼 可以隨便選擇 小米是聯通4g能改移動4g嗎?根據提供的資訊,支援的網路制式是由手機硬體確定的,所以無法把只支援聯通4g網路的手機變更為支援移動4g網路的。不能,手機使用的網路模式是手...
聯想電腦能加4G記憶體條嗎,4G記憶體的電腦能再加個記憶體條嗎
可以加,但需要64位的作業系統才能識別4g記憶體 4g記憶體的電腦能再加個記憶體條嗎?如果你的電腦上有四個記憶體插槽是可以再加的,因為你的系統是64位的,完全可以訪問你的記憶體地址,加了只會提高你的資料處理能力。但前提是你的電腦的cpu要比較好才行,否者也發揮不下大記憶體的優勢。可以增加加記憶體條的...