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个分析是否有问题,求详解。。。。。在线等。

参考技术A 第一 不清楚vb.net
第二 是的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# 不支持整形强制转换成字符串

本回答被提问者采纳
参考技术B

    C#对与数据类型要求比较严格,所以隐式转换的前提是,位数小的类型向大的转换,且能够保证值不发生变化就可以自动转换。否则就必须要用类型强制转换。

    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# 关于隐式类型转换的问题?的主要内容,如果未能解决你的问题,请参考以下文章

C# 到 VB.Net:为啥转换为 VB 时编译失败?

C#类继承与重载的问题,Mat继承于Matrix,但提示无法将类型隐式转换为 存在一个显式转换 是不是缺少强制转

c#中如何把string类型转换为double类型?

Golang关于Go中的类型转换

vb net中怎么样将字符串类型转换成日期型

C#编程(四十一)----------用户定义的数据类型转换