vb.net,c# 关于隐式类型转换的问题?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net,c# 关于隐式类型转换的问题?相关的知识,希望对你有一定的参考价值。
vb.net 中,将一个int32类型的数 乘以0.1 再赋值给 一个int32 类型的变量,没问题,结果以小数形式显示出来,也没有报错。
如 Dim a As interger =1234
Dim b As interger
b= a*0.1
Label1.Text = b.ToString 没报错 label1显示结果为 123.4
而在 c# .net 中,将一个int32类型的数 乘以0.1 再赋值给 一个int32 类型的变量 就报错了
如: int a =1234;
int b ;
b = a*0.1;
label1.Text = b.ToString;
错误1: 无法将"double" 类型转隐式转换为 “int” ,存在一个显式转换(是否缺少强制转换?)
错误 2: 无法将方法组“ToString”转换为非委托类型“string”。您是要调用方法吗?
我是不是可以理解为:
1 vb,c#.net 对于数据类型的检查严格程度不同
2 c# 中 将一个int 类型乘以小数,结果得到 double类型?
3, c# 中 label1.Text = 3 会报错, vb中 label1.Text =3 没报错,是不是vb中 Label.Text会自动将数值类型转换成字符串类型, 而c#中要强制类型转换
4. c#中
int a = 1234 ;
label1.Text =(string) a; 提示错误,无法将“int” 类型转换成“string”
label1.Text= a.toString ; 提示错误, 无法将方法组“ToString”转换为非委托类型“string”。 wht????
label1.Text =Convert.toString(a); 这就行了,没报错。 why??????
以上4个分析是否有问题,求详解。。。。。在线等。
第二 是的2*0.2=0.4 会取最大精度
第三 label1.Text = 3 这里的3在c#里是数字 如果要写成字符串 label1.Text = "3"; label1.Text 的属性是字符串类型。。所以你不能赋值 整形类型的
第四 label1.Text= a.toString 你缺少了() label1.Text= a.toString();
label1.Text =Convert.toString(a); 转换成字符串追问
为啥 label1.Text =(string) a; 提示错误,无法将“int” 类型转换成“string”
追答因为c# 不支持整形强制转换成字符串
本回答被提问者采纳 参考技术BC#对与数据类型要求比较严格,所以隐式转换的前提是,位数小的类型向大的转换,且能够保证值不发生变化就可以自动转换。否则就必须要用类型强制转换。
C#将int类型乘以小数,根据编译器判定,会隐式转换成dobule类型,如果继续保持int类型,编译器就必须要进行四舍五入了,这样就会出现所得到的值出现偏差。
C#对于数据类型要求比较严格,(做C#编程,最好是先看下C#的语法)
int a=1234;label1.Text=a.toString();这才是正确的写法为啥 label1.Text =(string) a; 提示错误,无法将“int” 类型转换成“string”
追答toString 是一个方法,任何一个对象都可以有自己的字符串表达方式,就好比任何物品都可以有自己的名字一样。
而强制类型转换成String,就是将原本不是String类型的对象转换成String类型,它不会去调用tostring方法。这就相当于将物品A当成物品B来使用,如果两者不能转换的话,就相当于把石头当救生圈使用了。。
如何将 C# 多维列表转换为 VB.Net
【中文标题】如何将 C# 多维列表转换为 VB.Net【英文标题】:How can I convert a C# multidimensional List to VB.Net 【发布时间】:2013-08-15 01:13:02 【问题描述】:我首先要说的是我在过去几天中学到的关于 C# 的所有知识,研究如何将 C# 模块转换为 VB.Net 4.0。
下面的代码是我要转换为 VB.Net 的 C# 模块中的一些选择行。在大多数情况下,它相对简单,我无法弄清楚,我用谷歌搜索并找到了答案。经过大约 10 个小时的尝试寻找下面几行的答案后,我终于来到这里寻求帮助。
据我所知,C# 代码创建了一个整数列表,其中整数是一个数组。我在下面包含的行访问该数组列表。
我的问题是:如何将其转换为 VB.Net 4.0?或者有人可以向我提供转换后的工作代码吗?
提前致谢!
C# 代码:
// mColumnPoint, mStartPoint, mEndPoint are all Integers
// Note that there is a mColumnPoint(int) and mColumnPoints(list) plural
private List<int[]> mColumnPoints;
mColumnPoints = new List<int[]>();
mColumnPoints.Add(new int[] mStartPoint, mEndPoint );
for (int i = (int)mColumnPoints[mColumnPoint].GetValue(0);
i < (int)mColumnPoints[mColumnPoint].GetValue(1); i++)
// Stuff in for loop here
【问题讨论】:
听起来很懒,但是您是否尝试过使用工具进行转换?喜欢developerfusion.com/tools/convert/csharp-to-vb/… 我没有。但我会看看那个。谢谢! @CalebC:我刚刚试用了那个工具,它完美地工作了......虽然我为它的工作而欣喜若狂,但我对它的速度和我花在研究 C# 的时间感到受骗。 .. 不过我会克服的。感谢您提供该链接...绝对已添加书签以供将来参考。 【参考方案1】:嗯,这很容易:
Dim list As List(Of Integer()) = New List(Of Integer())()
list.Add(New Integer()() = Class1.mStartPoint, Class1.mEndPoint )
For i As Integer = CInt(list(Class1.mColumnPoint).GetValue(0))To CInt(list(Class1.mColumnPoint).GetValue(1)) - 1
Next
我使用了一个很棒的工具,叫做“ILSpy”, http://sourceforge.net/projects/sharpdevelop/files/ILSpy/2.0/ILSpy_Master_2.1.0.1603_RTW_Binaries.zip/download 只需使用 C# 或 vb.net 构建您想要的内容,然后打开该工具并浏览您的 *.exe 或 *.dll 以在 vb.net 或 c# 中查看它,玩得开心:)
【讨论】:
感谢您的代码转换。这正是我想要的!【参考方案2】: Module Module1
Structure segment
Dim startingPoint As Integer
Dim endingPoint As Integer
End Structure
Sub Main()
Dim mStartPoint, mEndPoint, mColumnPoint As Integer
Dim mColumnPoints As New ArrayList
Dim nextSegment As segment
mStartPoint = 1
mEndPoint = 42
mColumnPoint = 0 ' The first element in the array
nextSegment.startingPoint = mStartPoint
nextSegment.endingPoint = mEndPoint
mColumnPoints.Add(nextSegment)
Dim startValue As Integer = mColumnPoints(mColumnPoint).startingPoint
Dim limit As Integer = mColumnPoints(mColumnPoint).endingPoint
Dim i As Integer
For i = startValue To limit
' do something
Console.WriteLine("Cycle # " & i.ToString)
Next
Console.WriteLine("Done " & i.ToString)
End Sub
End Module
【讨论】:
感谢您这样做,但由于我正在转换现有代码,因此无法更改其内在结构。如果可以的话,我自己会做不同的事情。同样感谢您的时间和精力。 =) 祝您的转换项目好运!去过那里,必须这样做。以上是关于vb.net,c# 关于隐式类型转换的问题?的主要内容,如果未能解决你的问题,请参考以下文章