我需要一些澄清:
is/as 运算符
out/ref 参数修饰符
类型
如果您不喜欢,请随意只回复您知道或想要回复的内容,而不是整个问题。
是的,我要求澄清这些。纠正我或补充我已经说过的话。
好吧,我用谷歌搜索了一下,登陆了各种网站,MSDN 等等。我仍然需要有人编写一些代码来帮助我阐明整个概念,最后让我充分利用它,希望这对其他人也有帮助。
基本上这是我所理解的:
A)是
在伪代码中
如果对象是这种类型,则返回 true,否则返回 false
简单的。或者我在这里做错了什么?
某些类型是否有任何限制或问题?
这段代码运行良好,所以我想我做得很好。
object s = new SqlBoolean();
if (s is SqlBoolean)
{
Console.WriteLine("Is SqlBoolean");
Console.ReadLine();
}
2)作为
好吧,我仍然必须完全理解这一点。
MSDN 报告:
as 运算符用于执行兼容类型之间的转换。as 运算符类似于强制转换,只是它在转换失败时产生 null 而不是引发异常。
好吧,我在 Object 数组上尝试了一个循环,它基本上只转换原语并且有很多问题(每次转换都比一点困难抛出 null 或其他东西)
IE
using System;
using System.Data.SqlTypes;
class StackOverflow
{
public static void Main()
{
string country = "jii";
string vatNum= "dde";
object[] MyObjects = {country,
vatNum
};
for (int i = 0; i<=MyObjects.Length-1;i++)
{
MyObjects[i] = MyObjects[i] as SqlString?;
Console.WriteLine(MyObjects[i].ToString() + " " + MyObjects[i].GetType());
Console.ReadLine();
}
}
}
在我正在制作的程序中,我需要将这些值转换为 SqlStrings、SqlBooleans 等。
请注意我用“SqlString?”行强制 SqlString 为 Nullable 的事实。末尾有问号(?强制为空,谁知道呢!:D)。
所以基本上它对于在不使用异常的情况下进行一些低级转换很有用?或者是什么?
3)参考和输出
那么基本上 ref 从函数中更改预声明变量的值:
IE
using System;
class StackOverflow
{
public static void Main()
{
int x = 10;
Write(func(ref x).ToString());
Write(Convert.ToString(x));
}
public static int func(ref int y)
{
y += 10;
return y;
}
public static void Write(string z)
{
Console.WriteLine(z);
Console.ReadLine();
}
}
执行此操作即可,输出将为 20 20 删除两个 ref 将输出 20 10
(ref 直接更改外部声明的 x 而不在方法中创建实例)
出去怎么办?什么用途????
我无法得到它。在某处读取它似乎就像一个与 ref 一样的参数,但它让你以某种方式拥有一些输出参数。
在前面显示的代码中使用 out 而不是 ref 只会产生 IntelliSense 的编译错误,我什至不知道如何让这些 out 参数显示。
在我正在做的一个项目中,我正在使用以下代码:
public static Array check(string country, string vatNum)
{
bool valid;
string name;
string address;
checkVatService vatchecker = new checkVatService();
vatchecker.checkVat(ref country, ref vatNum, out valid, out name, out address);
return new object[] {country,
vatNum,
valid,
name,
address
};
}
现在,checkVat 是来自 欧洲在线检查网络服务的一些代码。
我看到它有参数,它们是由 webservice 网站上的 wsdl webservice 消费库生成的(如果需要,链接到库)
如何使用 out 参数?它们是否可以在不使用 return 的情况下产生一些输出?我如何使用它们?请说的很详细
4)类型
这将返回您传递给它的 Type 的 System.Type 类型。
首先我想我可以得到我传递给它的任何对象的类型
int x;
SqlBoolean xy = new SqlBoolean();
typeof(x) // integer
typeof(xy) // SqlBoolean
但事实并非如此。
它只是从 System.Type 返回类型。
喜欢
typeof(int).ToString() // System.Int32 或类似的东西 typeof(xy).ToString() // System.Data.SqlTypes.SqlSqlBoolean
我真的不知道该怎么办。
要获取对象的类型,您必须从对象中执行类似 .GetType 之类的操作。
那么 typeof 的实际用途是什么,我错过了什么?
谢谢任何人